链路层数据包格式汇总(一)
Hello,我是无赖的猴子,一个蓝牙爱好者,分享蓝牙相关的知识,关注我,学习蓝牙:
蓝牙文章链接直达: 👇
1.profile层(待更新)
2.属性协议层(ATT)(待更新)
4.通用访问协议层(GAP)(待更新)
5.通用属性协议层(GATT)(待更新)
11.蓝牙应用
数据包格式
链路层数据包格式由前导帧(Preamble)、接入地址AA(Access-Address)、PDU(Protocol Data Unit)、校验码(CRC),外加可选的恒定音调扩展数据包CTE(Constant Tone Extension)构成。
- 根据物理层(PHY)数据的不同,前导帧的长度也各不相同,在PHY为1 MPHY或2MPHY时,前导帧的长度为1和2字节。
前导帧的字节序取决于AA的最低位,AA最低位为1时,前导帧以101010…排列,即为0xAA,而最低位为0时,就是0x55。
前导帧用于区别PHY速率的不同,用以告知物理层所需要用到的增益。 - 4字节的AA地址在37、38、39广播信道固定为0b10001110_10001001_10111110_11010110 (0x8E89BED6)。其它信道或数据包根据其协议产生AA地址。
- CRC检验码用于数据冗余错误检查.
- 可选的CTE包用于蓝牙AOA/AOD精准定位。
PDU格式
而其中PDU则是上一层封装过的包数据,它由协议头(Header)+数据荷载(Payload)构成。
图2.5就是header的帧格式,header由PDU Type、信道选择算法2标志位(ChSel)、发送与接收地址类别(TxAdd、RxAdd),长度。
PDU Type
PDU Type根据其类型的不同,将数据包分为了广播类、连接类、扩展广播类等,下图是详细的分类:
ChSel信道选择算法2
ChSel是为了选择不同信道让信号传输更加顺畅,不产生拥堵,下面是整体架构:
TxAdd、RxAdd
两者则代表地址类别,当为0时代表公共地址,为1时代表静态地址。
广播信道pdu
广播PDU
ADV_IND、ADV_NONCONN_IND 、ADV_SCAN_IND
ADV_DIRECT_IND
扫描PDU
SCAN_REQ ,AUX_SCAN_REQ
扫描请求PDU
扩展广播扫描请求PDU
SCAN_RSP
扫描响应PDU
连接
CONNECT_IND
连接请求PDU和AUX_CONNECT_REQ 扩展广播连接请求PDU
连接信道数据包包含初始化地址、广播地址和链路层数据。
链路层数据又包含接入地址(Access Address)、CRCInit、传输窗口大小(WinSize)、传输窗口偏移(WinOffset)、 连接间隔(Interval)、从机延时(Lantency)、连接超时(Timeout)、信道图(ChM)、调频算法(Hop)、中心设备最差睡眠时钟参数。
CRC校验码用于冗余错误检查,传输窗口大小用于计算传输窗口大小,transmitWindowSize = WinSize * 1.25 ms。传输窗口是用于告知广播者在窗口内准备连接。传输窗口偏移则指示广播者在多久后打开连接。连接间隔定义了设备每次交互事件的时间。从机延时可设置为忽略多少个连接事件。连接超时规定了连接的时间范围,5字节的信道图指示37个信道哪些是可用,哪些是不可用的,方便设备跳频。跳频算法取值范围在5-16之间,按照蓝牙规定的跳频算法进行跳频操作:
这里的hopincrenment即上述跳频算法hop值。
中心设备最差睡眠时钟参数可通知设备的时钟精度,精度更高,通信更稳定,响应更及时
扩展广播
扩展广播数据包包含长度、广播模式、扩展广播头、广播数据包组成。
AdvMode
不同的value值代表了不同的广播模式
扩展广播头包含了flags、广播地址、目标地址、扩展CTE信息、广播数据、辅助数据包指针、同步信息、发射功率和附加控制器广播信息。
falg中不同的位代表了其他变量是否存在,具体如下:
AdvA和TargetA代表地址,CTEInfo用于蓝牙精准定位技术AOA/AOD,CTEInfo包含CTETime和CTEType,CTETime是以8 µs为单位的值,指示音频扩展时间。CTETime范围在2-20间,即在16~160µs间。
CTEType则定义了音频扩展类别,值为0时发射角AOA,值为1时是入射角AOD(切换时间为1 µs)定义如下:
ADI(AdvDataInfo)中DID表示是否是上个广播副本,SID表明同一设备的不同广播。
辅助数据包指针(AuxPtr)指向了第二信道的扩展数据在何时何地出现,Channel Index指明扩展数据在那个信道出现,CA代表晶振时钟精度,Offset Units为偏移单位,值为0代表30 µs,值为1是300 µs。最后一个PHY指明PHY,000代表1M PHY,001代表2MPHY,010代表 coded PHY。
SyncInfo field是同步包窗口偏移信息,Offset Units:同步广播单位,0为30us;1为300us。如果同步包窗口偏移量小于245,700µs,则 Offset Units设置为0,Interval:1.25ms为单位,不得小于7.5ms
Chm表明当前哪些信道可用,哪些不可用,别名为信道图。
Txpower是发射功率,单位为dB。ACAD是附加控制器广播信息。ACAD(Additional Controller Advertising Data)是附加控制器广播信息。ACAD在Audio中会传输BIG信息。
这样扩展广播数据包结构就结束了(不得不说真的长)。
接下来说说扩展广播的一些具体pdu
ADV_EXT_IND 扩展广播主信道PDU
ADV_EXT_IND采用扩展广播格式要求,ADV_EXT_IND中对不同数据格式,某些字段会不存在,如下图所示:其中M代表必须支持,X代表不支持,C.1代表可选参数、O代表支持。
AUX_ADV_IND
扩展广播次要信道PDU,
AUX_SYNC_IND
周期广播使用
AUX_CHAIN_IND
额外数据包,通常用于多广播包
AUX_SYNC_SUBEVENT_IND
用于PAWR(带响应的周期广播)
AUX_SYNC_SUBEVENT_RSP
AUX_SCAN_RSP
扩展广播扫描响应PDU
AUX_CONNECT_RSP
扩展广播连接响应PDU
数据信道PDU详情见这里
关注公众号《嵌入式大丙哥》,回复蓝牙,获取最新蓝牙咨询和嵌入式资料。