我想知道蓝牙低功耗的最大数据包长度是多少。对于example here
,如果经常说,则为20字节限制“BLE允许您传输最大值为20个字节。”
“你是对的,BLE规范不允许写操作超过20个字节。”
但是,阅读蓝牙核心规范,我们可以看到ATT_MTU值写入了2个字节,这意味着它最多可以达到65 535个字节。
这背后的真相是什么?
答案 0 :(得分:22)
规格总是正确的!
在蓝牙4.0中,引入了BLE,最大有效载荷为33字节(不包括访问地址和CRC字段)。协议栈中的每一层都采用了它的剪切:
使用ATT写入请求(或通知),命令类型和属性ID使用3个字节, 20个字节用于属性数据。
在ATT级别,可以通过两种方式扩大此限制:
在L2CAP级别使用碎片:
L2CAP将分割27个字节片段的ATT PDU(第一个片段为23个)。
缺点:
使用蓝牙4.2中引入的数据包长度扩展:
无线电级别最多251个字节(MIC为255),因此属性数据可用242个字节。
缺点:
还是新的,需要硬件支持,所以没有在任何地方实施(即使宣布BLE 4.2支持),
播放时间较长的数据包会有更多被卡住的机会,因此更长的数据包意味着更多的重传。
如果使用这两种方法,L2CAP可能会使用更大的片段。
无论ATT PDU的低级别分裂如何,属性值长度限制为512乘3.F 3.2.9。