一、开发环境及工具
-
nRF5 SDK v15.3.0
-
IAR For ARM V7.80.4 / Keil uVision5(MDK-ARM) V5.33
-
Bluetooth Core Specification V4.2 / V5.x
-
此工程源码下载路径 : https://gitee.com/amx/nrf52xx-project
-
参考好文链接(部分内容从其中摘取):
https://www.cnblogs.com/someone-device/p/12213388.html
https://blog.youkuaiyun.com/zhoutaopower/article/details/95104632
http://www.wowotech.net/sort/bluetooth
https://blog.youkuaiyun.com/Hh20161314/article/details/104501877
https://blog.youkuaiyun.com/qq_36347513/article/details/104264490
二、nRF52系列Bluetooth 5.x特性

三、广播信道
- 在蓝牙核心规范V4.2中,广播信道使用37/38/39三个通道,其余37个是数据通道:

四、数据结构
- BLE数据包结构:preamble(前导码/报头)、access address(接入地址)、PDU(数据包)、CRC(校验码)

-
PDU分为两类,广播类型PDU和数据类型PDU
-
广播(Advertising)是一种单向的发送机制。想要被搜索到的设备可以以20毫秒到 10秒钟的时间间隔发送一段数据包。使用的时间间隔越短,电池消耗的越快,但设 备被发现的速度也就会快。数据包长度最多47个字节,由以下部分组成:
- 1 byte preamble(1字节做报头) - 4 byte access address(4字节做地址) - 39 bytes advertising channel PDU(39个字节用于PDU数据包) - 3 bytes CRC(3个字节用于CRC数据校验) -
下图是广播通道PDU分解:

- 对于广告通信信道,地址部分永远都是0x8E89BED6
- 对于其它数据信道,地址部分由不同的连接决定
- PDU数据也拥有自己的数据报头: (2个字节:声明有效载荷数据的长度和类型——设备是否支持连接等等)和有效载荷数据(最多37个字节)
- 有效载荷数据中的头6个字节是设备的MAC地址,所以实际信息数据最高可占31个字节

- 在Header中PDU Type分下面7种(四个广播类型的PDU、两个扫描类型的PDU、一个发起连接PDU):

-
在Header中Length: PDU的长度,6 bits,有效范围 6-37 octets
-
Header成员间的关系:


- Payload部分分解(ADV_IND类型):

可以看到,AdvData由一个个AD Structure组成,每个AD Structure包含3个部分:
- AD length:AD Type 和AD Data的长度
- AD Type:AD Data的数据含义
- AD Data:AD Type所指示的数据
结合函数ble_advdata_encode(),对理解AD Structure会有更深的印象:
ret_code_t ble_advdata_encode(ble_advdata_t const * const p_advdata,
uint8_t * const p_encoded_data,
uint16_t * const p_len);
在ble_gap.h中定义的AD Type类型:
/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format
* @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm
* @{ */
#define BLE_GAP_AD_TYPE_FLAGS

本文详细介绍了nRF52系列蓝牙5.x的广播信道配置、数据包结构,包括广播信道的37/38/39通道,PDU的组成、类型和长度,以及如何利用ADStructure构建AdvertisingData和ScanResponse。还提供了代码配置示例,展示了如何设置广告参数和创建扫描响应。
最低0.47元/天 解锁文章
894

被折叠的 条评论
为什么被折叠?



