空包 BLE4PDUType低功耗蓝牙协议总结-苏州安嘉
2023-08-19
1030浏览
空包 BLE4PDUType低功耗蓝牙协议总结-苏州安嘉2、数据包层的数据分解成多包发送的连续包,或者是一个空包。而空包可被从机应答任何数据通道包。以notify命令为例,设备(Server)notify第一个数据包并将MD置1,Client(比如手机)收到这个notify命令后,就知道Server还有数据包要传,此时手机可以继续发一个空包给设备,以让设备把第二个notify命令发过来,详情如下所示。的数据包。

本文基于参考一些博客文章和书籍所做的笔记。 如果觉得不舒服请联系并删除

参考:

《BLE4.0低帧率蓝牙合同摘要》

目录

1. 广播包

1.1、PDU类型

具体定义如下。可以看出,扫描PDU和发起连接PDU都属于广播包

1.2、MAC地址

但是这个标签指定的地址是随机地址还是公共地址呢?消息类型命令中对应的payload有一个6bytes的地址,紧邻厚度,这个标志就是用来标识那些地址类型的

Payload width:该宽度是指PDU中除头部和数据宽度之外的有效负载数据的宽度。 注意这里只使用了6位的宽度,这意味着它的最大宽度只能是64字节。 ,够了吗? 实际上,表2-2中的净荷数据表明,净荷的最大长度为296bits=37Bytes,也就是说,在整个数据包中,链路层真正有效的数据最多为37字节,所以只需要6bits宽度就可以使用。看图2-10可以看到,实际有效数据变成了最大37-6=31字节

2. 数据包

数据报文中有MIC(MessageIntegrityCheck)信息完整性检查。 为了保证数据的正确性,占用了32位或者4个字节,其中涉及到加密操作,用实线表示,也就是没有必要,因为不需要加密才能工作,比如MIC在某些情况下是不需要MIC的:

未加密链路层连接有加密链路连接,发送空包,即有效PDU为空包

注意:这里的最大有效负载数据宽度只有216bits,也就是27个字节,加上4个字节的MIC,也就只有31个字节,那么剩下的6个字节在哪里呢? 事实上,这是在合同规范中规定的。 广播通道中的6个字节是设备地址,数据通道中的最大负载数据包不能超过27个字节。 无论是否有MIC负载,最多只能是27字节(针对ble4.0的解释)

2.1. LLID

linklayerID,对LLPDU进行分类:LLdataPDU和LLcontrolPDU。 也就是说普通数据通道气鞋包含LL数据包和LL控制包两类,

2.1.1、LLDataPDU

链路层的数据通道是用来发送L2CAP数据的,也就是说只要数据是从HOST层向上层发送的。 数据PDU的标识为LLID为01b或10b。

(1) LLID=01b 该数据要么是把L2CAP层的数据分解成连续的数据包分多个数据包发送,要么就是一个空数据包。 对于空包,需要将数据PDU头的宽度字段设置为00000b,并且空包可以由从机对任何数据通道包进行应答。 图2-65显示了通过空中收集的空包

(2)LLID=10b,使得该数据包代表L2CAP层信息的初始包。 事实上,如果L2CAP层的数据可以用一包链路层数据来发送,即不需要分解成多个包来传输,这也是10b Identifier,相当于一包起始包完成数据传输。 对于该LLID,数据PDU头的宽度字段不能为00000b。

2.1.2、LLControlPDU

对于链路层控制,LLID=11b。其有效数据段也分为两个区域

2.2. NESN/SN重传校准机制

NESN和SN各占1位。 SN的全称是sequencenumber,表示当前发送的数据包编号。 NESN,nextexpectedsequencenumber,用于通知对方下一个期望的数据包编号。 Linklayer用SN来通知对方这个包是新的数据包还是重传包,用NESN告诉对方你之前发给我的包已经被收到了(相当于ACK的作用),并且现在期待下一个新的数据包,所以BLE没有专门的ACK包,它通过NESN/SN实现ACK和重传的双重功能。 请参考下表仔细猜测NESN和SN是如何编码来同时完成ACK和重传功能的。

2.3、MD多包发送机制

moredata,用于向对方表明我还有数据包要发送,请继续打开射频窗口接收。 例如NordicnRF51822的一个连接间隔可以发送6个数据包或更多数据包(即一个连接事件包含多个数据包交互),这是通过MD来实现的。 以notify命令为例。 设备(服务器)通知第一个数据包,并将MD设置为1。客户端(如手机)收到通知命令后,就知道服务器还有数据包要传输。 此时,手机可以继续向设备发送空包,以便设备发送第二次通知命令,具体如下。 注:Master为手机(Client),Slave为设备(Server)。

2.4、PayloadLength有效负载宽度

BT4.2之后,均采用Payloadlength8bits来表示厚度。 在这种情况下,最大有效负载大小可以达到251字节(255-MICsize)。 BLE连接建立后,数据长度宽度(默认为27字节)可以动态修改。 此功能称为数据长度扩展 (DLE)。 DLE 通过 Linklayer 命令实现:LL_LENGTH_REQ 和 LL_LENGTH_RSP。 数据长度与蓝牙芯片的射频能力直接相关。 比如Nordic的nRF51822只支持BT4.1 Datalength,因为PHY层早就死了,无法扩展。 不过,Nordic最新的nRF52832和nRF52840都支持DLE,即数据长度最大可达251字节。

2.5、L2CAP长度MTU

L2CAPlength2字节宽度表示前一个信息负载的宽度。 informationpayload的最大宽度不仅受此L2CAPlength数组的约束,还受MTU的限制。 对于BLE4.0来说,最大传输单元(MaximumTransmissionUnit(MTU))为23字节,即信息有效负载的最大数量为23字节。 MTU,MaximumTransmissionUnit,是ATT层和L2CAP层可以交互的最大数据宽度空包,或者说是Client和Server可以交互的最大宽度。 那么如果要发送的数据超过23字节怎么办? 方法是拉直分段发送空包,LL层头中只存在MD标记。 Informationpayload信息是L2CAP的下层ATT的数据包。

综上所述,蓝牙规范定义了两个宽度数组:LLdatalength和L2CAPlength,ATT层还定义了一个MTU来限制ATTPDU的最大宽度。 LLdatalength可以通过LL_LENGTH_REQ和LL_LENGTH_RSP动态改变,MTUsize可以通过上面提到的ExchangeMTURequest和ExchangeMTUResponse改变,而L2CAPlength不能动态改变,也就是说不能超过65535。

2.6、L2CAP通道ID

ChannelID:通道ID。 0x0004、0x0005、0x0006 可选

对于L2CAP层的三个通道,0x0004用于其下层属性契约(ATT),0x0006用于与ATT并行的另一个下层安全管理契约(SMP),0x0005用于低帧率认证通道的固定通道,命令包在这个通道上传输,命令包在这个通道上传输,那么它的下层是谁呢? 数据是谁的以及谁提供数据? 答案是通用访问规范GenericAccessProfile(GAP),但有趣的是GAP没有特定的数据包格式,它只提供数据,而真正的数据包在另一层。

2.7、安全管理器协议(SMP)

用于实现配对和密钥分发,SMP支持以下PDU命令:

3.8 属性协议(ATT)

就是我们经常使用的应用层。 应用数据位于 ATT 命令之前。 ATT 支持以下命令列表:

以上内容均来自网络搜集,如有侵权联系客服删除

图文阅读
 
QQ在线咨询
客服热线
15370006169
客服微信号
stu006