蓝牙LE的最大包长度?

时间:2016-08-12 08:47:55

标签: bluetooth-lowenergy

我想知道蓝牙低功耗的最大数据包长度是多少。对于example here

,如果经常说,则为20字节限制
  

“BLE允许您传输最大值为20个字节。”

     

“你是对的,BLE规范不允许写操作超过20个字节。”

但是,阅读蓝牙核心规范,我们可以看到ATT_MTU值写入了2个字节,这意味着它最多可以达到65 535个字节。

这背后的真相是什么?

1 个答案:

答案 0 :(得分:22)

规格总是正确的!

在蓝牙4.0中,引入了BLE,最大有效载荷为33字节(不包括访问地址和CRC字段)。协议栈中的每一层都采用了它的剪切:

  • 包头的2个字节(类型和长度),
  • 4字节用于MIC(启用加密时),
  • L2CAP报头的4个字节(信道ID和数据包长度),
  • ATT协议剩下23个字节,这是ATT协议的默认和最小MTU。

使用ATT写入请求(或通知),命令类型和属性ID使用3个字节, 20个字节用于属性数据

在ATT级别,可以通过两种方式扩大此限制:

  • 在L2CAP级别使用碎片:

    L2CAP将分割27个字节片段的ATT PDU(第一个片段为23个)。

    缺点:

    • 双方需要记忆,
    • 由于某些实现可能会丢失数据包,因此可靠性较低(即使规范没有谈到L2CAP级别的数据包丢失,也会发生这种情况)
  • 使用蓝牙4.2中引入的数据包长度扩展:

    无线电级别最多251个字节(MIC为255),因此属性数据可用242个字节。

    缺点:

    • 还是新的,需要硬件支持,所以没有在任何地方实施(即使宣布BLE 4.2支持),

    • 播放时间较长的数据包会有更多被卡住的机会,因此更长的数据包意味着更多的重传。

如果使用这两种方法,L2CAP可能会使用更大的片段。

无论ATT PDU的低级别分裂如何,属性值长度限制为512乘3.F 3.2.9。