低功耗蓝牙开发入门概念科普

article/2025/10/15 13:30:54

一、概述

1、缘起
低功耗蓝牙起源于Bluetooth4.0版本,至今已发展到5.3

4.0 bluetooth low enerngy 这个阶段低功耗蓝牙的基础框架已经稳定成型,后面版本主要退出新特性和扩展特性,同时保证和4.0的原生兼容性
4.1 multi role(主从一体),自动回连
4.2 data length extend,le secure connections pair ecdh密钥交换,(legacy pair)
5.0 2M phy,codeed phy(long range),扩展广播(31——>255)
5.1 增加方位和角度(用于定位,厘米级),比如apple tag
5.2 增加ble audio,
5.3 定期广播增加,加密密钥大小控制增加,亚速率连接(更快的更新连接参数),信道分类增强(从设备翻身做主,可对主机发出的信道策略提出更正)

二、架构

1、H-C设计(分层分工设计)

1.1、soc

在这里插入图片描述

soc设计是嵌入式开发中较为常见的开发设计方式,即controller和host在一颗芯片中搞定,典型如nordic,ti cc2640 2541,esp32等等

1.2、双芯片

在这里插入图片描述

双芯片就是host和controller分别放在一颗芯片中设计

2、controller

负责链路层及其以下的部分

链路层: 链路层定义了两个设备如何利用无线电传输信息,包含了报文、广播、数据通道的详细定义,也规定了发现其他设备的流程、广播的数据、连接建立、连接管理以及连接中的数据传输。

phy层: 物理层,底层基带信号调制(理解为二进制信号流即可)

看着事少,确是一切的基石

3、host

l2cap: 逻辑链路控制和适配器
在这里插入图片描述

在这里插入图片描述

ATT: 属性协议(蓝牙服务中的最小原子单位,可理解为军队中具体的一个士兵)
GATT: 属性协议配置规范
SM: 安全管理
GAP: 通用访问规范
应用层: 这是开发者大展拳脚的地方

4、hci

全称是host controller interface

VHCI:soc设计中典型方式(可理解为massage queue)
UART: H4,H5(不带流控,SLIP分包)
USB
SPI
SDIO

5、总体层次图

在这里插入图片描述

三、连接

1、广播与扫描

广播通道
在这里插入图片描述

1.1、广播事件

在这里插入图片描述

1.2、广播类型

可连接非定向广播(最常用)
可连接定向广播
不可连接非定向广播
不可连接可扫描广播

1.3、广播包数据结构

广播包有两种(广播包,广播响应包)
两种包数据结构相同,最大长度31(5.0->255),数据采用LTV格式来组织
L:length 1byre
T:type 1byre
V:value length-1byre
在这里插入图片描述

1.4、扫描

扫描分两种类型
主动扫描和被动扫描
在这里插入图片描述
在这里插入图片描述

2、连接

当扫描设备扫描到自己感兴趣的广播设备,即可再广播通道的广播事件锚点发出连接申请(connection indication),双方即可各种进入连接状态,准备交互数据

连接申请中包含的内容很丰富,挑几样来说

①初始连接参数
②通道选择算法和通道图(用于沟通初始通道和后续跳频)
③双方mac地址
④crc初始值
⑤传输窗口等等
在这里插入图片描述

3、状态转换关系

在这里插入图片描述

4、连接事件及连接参数

在这里插入图片描述

最小连接间隔
最大连接间隔
slave latency
super timeout

四、数据通讯

1、数据包格式

在这里插入图片描述

是不是感觉和自己定的串口通讯协议很像,前导码类似于AA55这种用来表示蓝牙数据包起始
在这里插入图片描述

以前感觉串口前面加的AA55这种很土,现在觉得很亲切很自然,因为连续的0101是最理想数字编码数据,连续多bit0和连续多bit1是最差的(容易误码)
在这里插入图片描述
蓝牙实际的抓包,空中包也确实是这个样子的

2、attribute

在这里插入图片描述

在这里插入图片描述

attribute table 中的最小单位,组成包括

attribute handle
attribute type(uuid)
attribute value
attribute permissions

在这里插入图片描述
实例

在这里插入图片描述

3、character

特征,几个attribute组成一个character,可以理解为一个attribute小组,小组中往往只有一个attribute是起数据通讯只用,其它attribure基本是对改主要attribute的辅助
在这里插入图片描述

4、service

服务,几个character组成一个service,可以理解为一个attribute部门,该部门持有几个character共同提供某一服务,不如A501,A502,A503,A508等共同组成我们公司的A5服务

5、profile

规范(规则),1个或者几个服务组成一个profile,可以理解为一个attribute 事业部,几个不同的子部门共同来支持这个事业部,比如穿戴事业部由系统部,应用部等等组成

6、profile示意图

在这里插入图片描述

7、数据发送方式

角色:server or client

注意:设备可以即是client又是server,典型的比如我们的手表或者苹果手机,苹果手机在作为client访问我们手表server数据的同时,它又同时作为server为我们提供了ams,ancs等服务(手表作为client)

上行:一般指server往client发数据
下发:一般指client往server发数据

上行数据方法

notify:无确认包,但保证交付
indicate:保证交互,且又明确的确认包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意client想后续收到server的notify和indication,必须要先打开对应的配置(使能)

在这里插入图片描述

下发数据方法
write with rsp:保证交付,且有明确的结果返回
write without rsp:保证交互,没有明确的结果返回(正确对应ATT_WRITE_REQ,错误对应ATT_ERROR_RSP)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

截取一些错误码,完整错误码请参考 core spec

8、提高数据发送速率及其原理

1、改变连接参数
在这里插入图片描述

在这里插入图片描述

连接参数来源,主机,主机,还是主机(扫描广播,并发起连接的设备)影响方法

①初始connection 包
②gap profile中的Peripheral Preferred Connection Parameters characteristic
③主机主动下发改变通知(有可能中途随机下发,450ota曾因此引发ota变慢的bug)
④从设备主动申请update,等待主机执行(从机也就只能吹吹枕边风,主机有可能直接拒绝(典型霸道如ios手机,需要满足公式,可参考苹果开发者手册),或者欣然接受,随后通过上面的方法3来具体下发生效的值)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从机申请更新连接参数,实例抓包

2、改变mtu和dle(两者配合)
dle <= 251
mtu <= 512
建议mtu <= (dle - 4)

3、使用2M phy(大于等于5.0版本)
传输速度直接翻倍
秘诀是啥?改变波特率(参考串口通讯,把9600改成115200)
1M phy(强制):1bit长度1us
2M phy(可选):1bit长度0.5us

4、问题来了,这些参数综合起来究竟如何影响数据传输速度?
连接间隔一定是越小越快?
mtu越大越好?
为啥实际数据传输速率达不到官方号称的1M or 2M?

五、ellisys抓包实战

1、准备硬件

硬件包括ellisys,待测设备(蓝牙主机,从机),电源插电,usb线插电脑

2、开启抓包

点击界面record开启盲抓(ellisys很强大)

在这里插入图片描述

3、开启过滤

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、设备广播

在这里插入图片描述

5、操作设备

在这里插入图片描述

6、结束抓包并分析

在这里插入图片描述

7、抓包数据存档

在这里插入图片描述


http://chatgpt.dhexx.cn/article/UeHgKk9a.shtml

相关文章

ESP32开发三_蓝牙开发

蓝牙开发 交流QQ: 1048272975 QQ交流群: 636564526 蓝牙是一种不断创新发展的无线通信技术标准&#xff0c;采用了2.4G ISM频段&#xff0c;在音频传输、数据传输、位置服务、设备组网这些场景有着广泛的应用。 1. 蓝牙概述 蓝牙技术分经典蓝牙(Classic BT)和低…

iOS 蓝牙开发实现文件传输

这是一篇旧文&#xff0c;三年前就写过了&#xff0c;一直没有时间分享出来&#xff0c;最近简单整理了下&#xff0c;希望能帮到有需要的人。   由于我这里没有相关的蓝牙设备&#xff0c;主要用了两个手机&#xff0c;一个作为主设备&#xff0c;一个做为从设备。另外进行蓝…

Android经典蓝牙开发全流程

一、基本介绍 所谓蓝牙(Bluetooth)技术&#xff0c;实际上是一种短距离无线电技术&#xff0c;最初是由爱立信公司公司发明的。技术始于爱立信公司 1994 方案&#xff0c;它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一…

Android - 蓝牙开发

文章目录 科普SIG类型制式选择逻辑链路控制适配协议 (L2CAP)L2CAP的功能 蓝牙框架和 RFCOMM 协议蓝牙安全白名单机制 编程蓝牙权限Classic BluetoothBluetooth Low Energy术语角色 & 职能查找 BLE 设备连接设备上的 GATT 服务器绑定服务蓝牙设置连接到设备连接到 GATT 服务…

Android 蓝牙开发 uuid,Android蓝牙开发之 UUID

UUID&#xff1a;全球唯一标识符 在蓝牙中&#xff0c;每个Service和Characteristic都唯一地由"全球唯一标识符" (UUID)来校验&#xff0c;主要是保证他们的唯一性。 UUID可分为&#xff1a;16位、32位、128 位UUID Bluetooth_Base_UUID&#xff1a;蓝牙UUID基数 UUI…

Android 低功耗蓝牙开发简述

低功耗蓝牙简述 一、什么是低功耗蓝牙&#xff1f;二、怎么做低功耗蓝牙应用&#xff1f;① 之前有没有接触Android蓝牙开发&#xff1f;② 蓝牙设备固件是公司自己的吗&#xff1f;③ 有没有蓝牙固件和蓝牙应用的文档和Demo&#xff1f;④ 具体的业务功能需求明确吗&#xff1…

Android蓝牙开发

题引&#xff1a; 最近项目上涉及与硬件相关的功能&#xff0c;需要通过蓝牙进行消息收发。项目已完成&#xff0c;这里做下记录。 通信步骤&#xff1a; 1.初始化BluetoothAdapter.getDefaultAdapter()获取BluetoothAdapter对象 2.判断蓝牙是否开启bluetoothAdapter.isEnab…

【Android】蓝牙开发——BLE(低功耗蓝牙)(附完整Demo)

目录 目录 前言 一、相关概念介绍 二、实战开发 三、项目演示 四、Demo案例源码地址 五、更新记录 1、2020/12/29 &#xff1a;修改 setupService()中错误 2、2021/05/14 &#xff1a;更新连接方法&#xff08;解决部分蓝牙设备连接失败的问题&#xff09; 3、2022/1…

【Bluetooth开发】蓝牙开发入门

BLE 蓝牙设备在生活中无处不在&#xff0c;但是我们也只是将其作为蓝牙模块进行使用&#xff0c;发送简单的AT命令实现数据收发。 那么&#xff0c;像对于一些复杂的使用场合&#xff1a;“车载蓝牙”、"智能手表"、“蓝牙音箱”等&#xff0c;我们不得不去了解底层…

【Bluetooth蓝牙开发】一、蓝牙开发入门

一、蓝牙开发入门 文章目录 一、蓝牙开发入门 1、蓝牙概念2、蓝牙发展历程3、蓝牙技术概述 3.1 Basic Rate(BR)3.2 Low Energy&#xff08;LE&#xff09; 4、常见蓝牙架构 4.1 SOC蓝牙单芯片方案4.2 SOC蓝牙MCU方案4.3 蓝牙host controller分开方案4.4 使用场景 5、参考文档 …

vs2012做ArcGIS二次开发前期准备

解压ArcGIS 1.双击ESRI 2.点击 一路next&#xff0c;自己选择安装路径&#xff0c;建议放在非系统盘 3.开始菜单-ArcGIS-License Server Administrator 4.点击“stop/停止"&#xff0c;再点击确定 5.将破解文件中的两个文件拷到D:\Program Files (x86)\ArcGIS\License10.…

arcgis 二次开发学习笔记(一):了解二次开发有关的软件及其之间的关系

【废话篇】今天是大三开学的第一天课&#xff0c;终于意识到我口中念念不忘却没付出实际行动的“考研”来了。考研目标现在为止还没有很明确&#xff0c;只是不甘屈于人后。周围太多生活得很辛苦的人&#xff0c;只是不愿意我这一辈子也为了有关qian的小事斤斤计较&#xff0c;…

Arcobjects for java:Arcgis二次开发入门,开发一个基本地图组件

一、目的 因学习需要&#xff0c;使用Java进行Arcgis二次开发。当前对arcgis进行二次开发使用的语言基本是C#&#xff0c;使用Java对Arcgis进行二次开发的很少。于是使用java在idea上进行Arcgis二次开发&#xff0c;给入门的同学做参考&#xff0c;我自己也处于入门阶段&#…

ArcGIS二次开发基础教程(00):基础界面设计

ArcGIS二次开发基础教程(00) : 基础界面设计 (开发环境&#xff1a;VS2010ArcEngine10.2C# &#xff1b;鉴于学习ArcGIS二次开发的同学都有一定的WinForm开发和ArcGIS软件使用基础&#xff0c;故此教程不再对一些基础内容作详细阐述&#xff09; 首先新建一个Windows窗体应用程…

【ArcGIS二次开发】TOCControl右键菜单功能实现

1、添加现有项 ①右击解决方案中的项目&#xff0c;添加TOCControlContextMenu中的LayerSelectable、LayerVisibility、RemoveLayer、ZoomToLayer ②点击菜单栏中的项目&#xff0c;添加引用ESRI.ArcGIS.ADF.Local ③修改RemoveLayer中的命名空间为项目名称EngineMapTest&#…

arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例

[1.rar] - QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究 [qqCHAR.rar] - qq 验证码识别程序 可以叫准确的识别出qq登陆前的验证码 [1.rar] - 本书以Visualc作为开发语言&#xff0c;结合大量实例&#xff0c;详细介绍了利用Arcobjects组件进行GIS二次开发的方法和…

【ArcGIS二次开发】Engine界面搭建

1、新建窗体项目Windows Appplication(Engine) 2、添加menuStrip、statusStrip和ToolbarControl控件&#xff0c;并设置相应的Dock属性为Top和Right 3、用SplitContainer控件把显示区域分成三部分&#xff0c;并设置splitContatiner1的Orientation属性为Horizontal 4、添加TabC…

ArcGIS二次开发基础教程(02):地图导航和鹰眼

ArcGIS二次开发基础教程(02)&#xff1a;地图导航和鹰眼 地图导航&#xff08;主要是调用命令和工具&#xff09; 地图的放缩和漫游 if(axMapControl1.CurrentTool null) {ICommand icc;//地图放大ITool tool new ControlsMapZoomInToolClass();//地图缩小//ITool tool n…

arcgis java 二次开发_arcgis二次开发_cad二次开发_java arcgis二次开发

属性查询是GIS应用不可缺少的重要功能&#xff0c;尤其是在各种业务系统中&#xff0c;根据用户输入相应的查询条件&#xff0c;从属性要素中快速定位到用户感兴趣的要素&#xff0c;为业务应用提供了便利。本文就来聊一聊QGis二次开发中如何实现属性查询功能。 其实这个功能我…

AE+ArcGIS二次开发课程设计(基于C#)

AEArcGIS二次开发课程设计&#xff08;基于C#&#xff09; 1.工作内容2.程序功能介绍3.功能模块介绍3.1 实现【创建TIN】说明3.1.1 功能说明3.1.2 代码实现&#xff08;包含了所有主要的代码&#xff0c;库引用自行导入&#xff09; 3.2 实现【TIN坡度坡向分析】说明3.2.1 功能…