5 广播信道PDU 广播信道包括主要广播信道和次要广播信道,在这些信道中可以传输广播数据、扫描数据、发起连接数据和扩展广播数据。 广播信道中的传输的数据PDU结构如下: 字段 | Header | Payload | 长度 | 2 octets | 1 - 255 octets |
其中Header字段的结构如下:
字段 | PDU Type | RFU | ChSel | TxAdd | RxAdd | Length | 长度 | 4 bits | 1 bit | 1 bit | 1 bit | 1 bit | 8 bits |
PDU Type:PDU数据的类型,具体而言就是不同的广播数据。- RFU:For Future Use,即暂时不用。
- ChSel:信道选择。
- TxAdd:发送数据的设备地址类型,如果该位是0表示public address,1表示random address。
- RxAdd:接收数据的设备地址类型,如果该位是0表示public address,1表示random address。
- Length:Payload的长度。有效范围为1 – 255字节。
5.1 广播PDU
其中,AUX缩写表示辅助(Auxiliary),EXT缩写表示扩展(Extend)。 5.2 扫描PDU
PDU类型 | Payload内容 | SCAN_REQ | 扫描设备地址,广播设备地址 | SCAN_RSP | 广播设备地址,扫描响应数据 | AUX_SCAN_REQ | 扫描设备地址,广播设备地址 | AUX_SCAN_RSP | 广播设备地址,Aux指针,发送功率等级,ACAD,广播数据 | 5.3 连接PDU PDU类型 | Payload内容 | CONNECT_IND | 发起设备地址,广播设备地址,LLData | AUX_CONNECT_REQ | 发起设备地址,广播设备地址,LLData | AUX_CONNECT_RSP | 广播设备地址,目标设备地址 |
其中LLData包含了建立连接需要用到的参数信息,如下:
字段 | AA | CRCInit | WinSize | WinOffset | Interval | Latency | Timeout | ChM | Hop | SCA | 长度 | 4 octets | 3 octets | 1 octet | 2 octets | 2 octets | 2 octets | 2 octets | 5 octets | 5bits | 3bits |
- AA:链路层的访问地址。
- CRCInit:校验运算的初值,由链路层随机生成。
- WinSize:建立连接时的连接窗口。
- WinOffset:建立连接时的连接窗口偏移量。
- Interval:连接间隔。
- Latency:从设备的握手潜伏期。
- Timeout:从设备断开的超时时间。
- ChM:信道占用图。该参数共40bit,第1位表示信道0,第2位表示信道1,以此类推。前37个比特位代表37个数据信道,如果对应的信道曾经被使用过,则设置1,否则设置0。
- Hop:跳频算法的增量,它的范围是5-16。
- SCA:睡眠时钟精度(Sleep Clock Accuracy)。SCA的取值与睡眠时钟精度的关系如下表:
SCA | 睡眠时钟精度 | 0 | 250ppm – 500ppm | 1 | 150ppm – 250ppm | 2 | 100ppm – 150ppm | 3 | 75ppm – 100ppm | 4 | 50ppm – 75ppm | 5 | 30ppm – 50ppm | 6 | 20ppm – 30ppm | 7 | 0 – 20ppm |
5.4 扩展广播PDU扩展广播是BLE 5新增的广播类型,这里将他们单独提取出来如下: - ADV_EXT_IND
- AUX_ADV_IND
- AUX_SCAN_RSP
- AUX_SYNC_IND
- AUX_CHAIN_IND
- AUX_CONNECT_RSP
这些PDU具有相同的数据结构: 字段 | Extended Header Length | AdvMode | Extended Header | AdvData | 长度 | 6 bits | 2 bits | 0 – 63 octets | 0 – 254 octets |
- Extended Header Length:Extended Header字段的长度,它的有效范围是0到63。
- AdvMode:广播事件发生时该设备所处的模式,它与各种模式的对应关系如下:
AdvMode | 模式 | 00b | Non-connectable + non-scannable | 01b | Connectable + non-scannable | 10b | Non-connectable + scannable | Extended Header:扩展协议头,其结构如下:
字段 | Extended Header Flags | AdvA | TargetA | RFU | AdvData Info(ADI) | AuxPtr | SyncInfo | TxPower | ACAD | 长度 | 1 octet | 6 octet | 6 octets | 1 octet | 2 octets | 3 octets | 18 octet2 | 1 octet | varies |
- 各字段含义:
- Extended Header Flags:扩展协议头各个字段的开关标志位。该字段有8个比特位,前7位分别对应AdvA、TargetA、RFU、ADI、AuxPtr、SyncInfo、TxPower,如果置1表示包含该字段,如果置0表示不包含。第8个比特位不与ACAD字段关联,暂不使用。
- AdvA:广播设备地址。
- TargetA:扫描设备或发起设备地址。
- ADI:广播数据信息。该字段分两部分:DID(Advertising Data ID)和SID(Advertising Set ID),如果一个广播包由多个子包组成,那么这些子包的SID相同,DID不同,如果DID也相同,则说明该包内容与前包内容一样。
- AuxPtr:辅助广播包的指针(Auxiliary Pointer)。它告诉链路层下一个辅助广播包的信道号和时间偏移。
- SyncInfo:周期广播包信息。‘
- TxPower:设备输出功率。
- ACAD:额外的广播数据(Additional Controller Advertising Data)。它能包含少量的广播数据,可以配合普通广播包使用。
- AdvData:扩展广播数据,单个PDU可达255字节。
6. 数据信道PDU数据信道PDU结构如下: 字段 | Header | Payload | MIC(Optional) | 长度 | 2 octets | 0 – 251 octets | 4 octets |
Header:协议头。其结构如下:
字段 | LLID | NESN | SN | MD | RFU | Length | 长度 | 2 bits | 1 bit | 1 bit | 1 bit | 3 bits | 8 bits |
- 其字段含义如下:
- LLID:链路ID(Link Layer ID),用以区分该PDU是一个数据还是控制命令。当LLID=11b,表示该PDU是一个控制命令。
- NESN:下一个期望的PDU序号(Next Expected Sequence Number)。
- SN:当前PDU序号(Sequence Number)。SN与NESN合作,可以推测出该PDU是一个新数据,还是对上一个老数据的重传,从而实现流程控制。
- MD:数据未完(More Data),表示后续还有数据片段。
- Length:Payload+MIC的总长度,有效范围为0-255字节。
- Payload:装载L2CAP层数据包或链路层控制命令。对于数据包,最大Payload长度为251字节。L2CAP数据可能被分段,如果当前Payload是L2CAP数据包的开头或结尾片段,则LLID=10b,否则LLID=01b。
- MIC:完整性检测(Message Integrity Check)。用于确认加密的Payload是否完整有效。当Payload不加密或者Payload长度为0时,MIC字段不存在。
如果传输链路层可控制命令,则将控制命令装载在Payload字段中。 控制命令的结构如下: | Opcode | CtrData | 长度 | 1 octet | 0 – 26 octets |
- Opcode:操作码,代表不同的控制命令。
- CtrData:控制参数。
链路层的所有控制命令如下:
上述26个控制命令,可以分为以下几类: - 加密:包括加密开始、暂停。
- 连接控制:包括连接参数更新,连接终止,PING。
- 信息交换:包括链路层功能交换,物理层信息交换,版本信息,信道图信息。
- 扩展功能:物理层更新,包长度更新。
- 杂项:错误响应、命令拒绝。
|