在蓝牙低功耗4.0和4.1中,OTA数据包的最大PDU为39字节(带有前同步码,访问地址和CRC的47字节),在版本4.2中增加到257字节。 短数据包的原因是无线电的稳定性,长数据包加热硅和增加额外的电路以保持频率稳定。因此,在BLE 4.1中,最长的数据包是376微秒以避免加热效应。由于数据速率为1Mhz,376微秒是376位= 47字节,因此解释了PDU的大小。但是在版本4.2中,最长的数据包是2120位,所以2.12ms和我读蓝牙经典的3ms数据包足够长,导致问题。所以我的问题是:为什么以及SIG如何成功增加版本4.2中的PDU知道一些半导体公司声称所有版本的硬件都是相同的。什么导致了这个新的PDU长度?
答案 0 :(得分:2)
在4. [01]中,39个字节是广告包达到的最大LL PDU大小(2个字节的头,6个字节的设备地址,31个字节的AD)。 对于数据包,最大PDU大小为33字节(2个标头+ 4个L2CAP + 23个ATT + 4个MIC)。
注意数据通道标头在没有标头的情况下计算PDU大小,因此这使得数据通道有效负载大小最多可达31个字节。这是在4.2中放大的数字(如果不支持加密,则实际最小值为27个字节,因为4字节MIC将永远不会出现在数据包中)。
4.2中定义的新数据通道有效负载大小是协议可以支持的最大可能值,因此它是一个芯片可能支持的值,而不是每个芯片必须>的绝对数据包大小强烈的>支持。
实际数据通道有效负载大小与两个相关无线电之间的LL_LENGTH_REQ和LL_LENGTH_RSP协商。它们可以协商从27到251字节的任何长度(在有效载荷级别)(参见Core_v4.2 6.B.2.4.2.21)。
在BLE规范的第一个版本中,数据包绝对最大大小为27个字节(数据有效负载,没有MIC)。 Spec使用5比特字段用于LL分组大小,该头字节的3个其他比特是RFU。它最终扩展到8位,在4.2中具有完全向后兼容性,但是在头部中没有更多的连续位可用。对我来说,这解释了为什么限制大约是256个字节(由于固定的标头大小不属于字节数而给予或接受):它提供了合理的扩展而不需要更改协议。