打印
[应用相关]

【转】物联网之蓝牙初识

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
5.2、广播数据包报文结构

BLE 报文结构如下:

1、前导

前导是一个 8 比特的交替序列。他不是 01010101 就是 10101010,取决于接入地址的第 一个比特。若接入地址的第一个比特为 0:01010101 若接入地址的第一个比特为 1:10101010 接收机可以根据前导的无线信号强度来配置自动增益控制。

2、接入地址 接入地址有两种类型:广播接入地址和数据接入地址。广播接入地址:固定为 0x8E89BED6,在广播、扫描、发起连接时使用。数据接入地址:随机值,不同的连接有不同的值。在连接建立之后的两个设备间使用。对于数据信道,数据接入地址是一个随机值。

3、报头 报头的内容取决于该报文是广播报文还是数据报文。广播报文的报头包含 4bit 广播报文类型、2bit 保留位、1bit 发送地址类型和 1bit 接收地址类型。

广播报文类型

内核协议中定义了 7 种类型:

发送地址类型和接收地址类型

发送地址类型和接收地址类型,俗称蓝牙MAC,指示设备使用公共地址(Public Address)还是随机地址 (Random Address)。公共地址和随机地址的长度一样,都包含 6 个字节共 48 位。BLE 设备 至少要拥有这两种地址类型中的一种,也可以同时拥有这两种地址类型。具体见第6章。

4、长度 广播报文:长度域包含 6 个比特,有效值的范围是 6~37。数据报文:长度域包含 5 个比特,有效值的范围是 0~31。

广播报文和和数据报文的长度域有所不同,主要原因是:广播报文除了最多 31 个字节 的数据之外,还必须要包含 6 个字节的广播设备地址。6+31=37,所以需要 6 比特的长度域。

5、 数据(AdvData)

广播和扫描响应的数据格式如下图所示,由有效数据部分和无效数据部分组成。

有效数据部分:包含 N 个 AD Structure,每个 AD Structure 由 Length,AD Type 和 AD Data 组成。对于应用层开发,实际可见或者操作的只是有效数据部分,其格式为:Length:AD Type 和 AD Data 的长度。AD Type:指示 AD Data 数据的含义。AD Data:数据内容。

其中AD Type表示的意义,可以查看SIG标准。https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile





使用特权

评论回复
22
菜鸟的第一步|  楼主 | 2022-5-9 16:47 | 只看该作者
5.3、广播可以包含的数据

参照前一节的数据(AdvData)格式,广播中的有效数据,按SIG规定的添加部分。一般情况下,建议广播包中至少包含:设备名称、Flags、外观和首要服务的 UUID,如果需连接IOS手机的包括MAC地址。内容总长度不得大于31字节。

目前与广播应用较多的,诸如蓝牙传感器,苹果的iBeacon信标,都是设备扫描它,从广播中获取传感器结果等信息。


使用特权

评论回复
23
菜鸟的第一步|  楼主 | 2022-5-9 16:48 | 只看该作者
6、设备地址

BLE 设备地址可以使用公共地址(Public Device Address)或随机地址(Random Device Address)两种地址类型,一个 BLE 至少使用一种地址类型,当然也可以同时具备两种地址类型。公共地址和随机地址的长度一样,都是 48 位(6 个字节)的。BLE 设备地址类型的关系如下图所示。

设备地址一共有如下 4 种类型:

公共地址:从 IEEE 申请(购买),IEEE 保证地址分发的唯一性。

随机静态地址(Static Device Address):自定义,上电初始化完成后不能修改。

随机不可解析私有地址(Non-resolvable private address):定时更新地址,蓝牙内核协议建议 15 分钟更新一次。

随机可解析私有地址(RPA:Resolvable Private Address):通信双方使用共享的身份解析密钥(IRK:Identity Resolving Key),生成和解析可解析私有地址。只有一台设备拥有另一台广播设备的 IRK 时,才能跟踪该广播设备的活动。


使用特权

评论回复
24
菜鸟的第一步|  楼主 | 2022-5-9 16:49 | 只看该作者
6.1、公共地址

公共地址由两部分组成,如下图所示。公共地址由制造商从 IEEE 申请(购买),由 IEEE注册机构为该制造商分配的机构唯一标识符 OUI(Organizationally Unique Identifier)。这个地址是独一无二,不能修改的。

公共地址能明确的指示出设备,同时具有唯一性,但是安全度不够,为了加强隐私保护,蓝牙内核协议中提供了另外一种地址:随机地址,随机地址是随机产生的,不是固定分配的,随机地址又分为多种类型,以适应不同的应用场景对隐私的需求。


使用特权

评论回复
25
菜鸟的第一步|  楼主 | 2022-5-9 16:50 | 只看该作者
6.2、随机静态地址

随机静态地址是随机生成的 48 位地址,随机静态地址必须符合以下要求:

静态地址的最高 2 位有效位必须是 1。

静态地址最高 2 位有效位之外的其余部分不能全为 0。

静态地址最高 2 位有效位之外的其余部分不能全为 1。

一个上电周期内不变。

静态地址的格式如下,共 48 位,最高 2 位是固定的,必须是 1。



使用特权

评论回复
26
菜鸟的第一步|  楼主 | 2022-5-9 16:51 | 只看该作者
6.3、不可解析私有地址

设备生成不可解析私有地址时必须符合以下要求:

地址的最高 2 位有效位必须是 0。

地址最高 2 位有效位之外的其余部分不能全为 0。

地址最高 2 位有效位之外的其余部分不能全为 1。

不可解析私有地址不能和公共地址一样。

不可解析私有地址的格式如下,共 48 位,最高 2 位是固定的,必须是 0。

不可解析私有地址相当于周期性改变的随机静态地址,不可解析私有地址一直在变化,并且该地址是个随机数,没有提供任何可解析的信息,因此,很难通过跟踪地址来跟踪设备,所以具有很高的安全性。但是因为地址一直变化,在隐私上“敌我”不分,实际应用中使用的不多。


使用特权

评论回复
27
菜鸟的第一步|  楼主 | 2022-5-9 16:51 | 只看该作者
6.4、可解析私有地址

设备生成可解析私有地址时必须符合以下要求:

地址的最高 2 位有效位必须是 0 和 1。

Prand 中地址最高 2 位有效位之外的其余部分不能全为 0。

Prand 中地址最高 2 位有效位之外的其余部分不能全为 1。

不可解析私有地址不能和公共地址一样。

不可解析私有地址的格式如下,共 48 位,最高 2 位是固定的,必须是 01。


使用特权

评论回复
28
菜鸟的第一步|  楼主 | 2022-5-9 16:52 | 只看该作者
7、MTU交换

蓝牙 4.2 之前,BLE 的 MTU(Maximum Transmission Unit,最大传输单元)为 23 个字节,这 23 个字节中包含了 1 个字节的操作码(op code)和 2 个字节的属性句柄(attribute handle),因此一次最多传输 20 个字节。从蓝牙 4.2 开始,BLE 支持长包传输,MTU 扩展到了 247 个字节,除去 op code 和 attribute handle,一次可传输的最大长度为 244 个字节。两种 MTU 存在,那么客户端和服务器是如何知道使用什么样的 MTU 的?客户端和服务器是通过协商来交换各自支持的 MTU 的长度的,这个过程称为 MTU 交换(Exchange MTU),通过 MTU 交换,客户端和服务器具备了自适应 MTU 的功能,但是注册每个建立的连接只能在连接建立时交换一次,而不能实时通过 MTU 交换协商数据传输长度。


使用特权

评论回复
29
菜鸟的第一步|  楼主 | 2022-5-9 16:53 | 只看该作者
8、DFU固件更新

产品交付后,使用中可能发现隐藏的BUG 或者需要增加新功能,重新召回产品使用编程器更新软件,对成本是个考验,最好的方式使用空中升级,DFU(Device Firmware Upgrade)固件更新就是非接触解决软件版本升级的问题。

一般芯片SDK都提供了完整的DFU方案,支持对 SD、Bootloader 或 APP 升级,DFU 的核心是Bootloader,接收新固件、更新应用程序。


使用特权

评论回复
30
菜鸟的第一步|  楼主 | 2022-5-9 16:53 | 只看该作者
9、开发套路
  • 基于SDK的蓝牙设备端开发,一般是先熟悉API,主要包括蓝牙开启、关闭,设置广播内容、间隔,设备名称和MAC,发起扫描请求,连接请求,新建服务(物联网产品一般都是GATT低功耗设备)以及接收事件回调(如连接成功事件、断开事件)、广播扫描结果。
  • 再针对应用场景,本机是作为客户端主动发起蓝牙连接,还是提供蓝牙服务等待外设连接。
  • 如果是客户端,开启蓝牙扫描周围广播,找到合适的发起连接,再使用对应的UUID进行通信交互;有些简单的BLE传感器,不需要连接,只需解析广播数据即可获取有效信息。特别说明,蓝牙扫描比较耗电。
  • 如果是服务端,开启蓝牙建立服务,一般都是自定义服务ID和其下多个属性UUID,属性UUID配置支持读或者写或者通知。其广播内容参考标准格式定义,总长不得大于31字节,一般得包含MAC,否则IOS APP开发人员有意见,然后等待外部蓝牙来连接。
  • 蓝牙连接后,为保证数据安全,一般使用AES128加密通信,不过BLE蓝牙单次传输数据包长度有限,效率不高。
  • 调试时使用手机APP对接,个人一般使用Android版 nRF Connect.apk,功能全面;调试时也使用IOS手机看看效果,尤其关注MAC地址类型(第6章)的影响,IOS的开发比较特别。

使用特权

评论回复
31
菜鸟的第一步|  楼主 | 2022-5-9 16:54 | 只看该作者
10、参考文章

本文主要参考 艾克姆科技的蓝牙低功耗开发指南。

文中提到的物联网可以读读  物联网之移动通讯的演化史

关于AES加密算法可参考 嵌入式算法6---AES加密/解密算法


使用特权

评论回复
32
Jacquetry| | 2022-10-5 21:36 | 只看该作者
这么长,能不能只讲干货啊

使用特权

评论回复
33
Pulitzer| | 2022-10-7 07:21 | 只看该作者

LSI、LSE是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源使用

使用特权

评论回复
34
Uriah| | 2022-10-7 14:22 | 只看该作者

串口马上正常中断接收

使用特权

评论回复
35
Bblythe| | 2022-10-7 17:21 | 只看该作者

make_youtiao()执行完后,控制转回到调用函数中

使用特权

评论回复
36
Pulitzer| | 2023-6-1 07:21 | 只看该作者

只有一块PCB,其上有一个12MHz的晶体

使用特权

评论回复
37
公羊子丹| | 2023-6-1 08:24 | 只看该作者

GPIO口被复用为AD输入脚做相关AD检测

使用特权

评论回复
38
公羊子丹| | 2023-6-1 09:17 | 只看该作者

超过变量128后必须使用compact模式编译

使用特权

评论回复
39
Wordsworth| | 2023-6-1 10:20 | 只看该作者

当PWM频率较高时,频繁的中断将影响程序运行的效率

使用特权

评论回复
40
Uriah| | 2023-6-1 11:23 | 只看该作者

核心模块被封装成了一个函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则