这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

peripheral_mtu_update

问答:

问:想更新 ATT 的 MTU , 需要怎么操作?

答:想把 ATT MTU 更新为 X 字节,需要以下步骤:

1, 设置 CONFIG_BT_L2CAP_TX_MTU 最小值为 x

2, 设置 CONFIG_BT_BUF_ACL_RX_SIZE 最小值为 x + L2CAP header(4字节)

3, 设置 CONFIG_BT_BUF_ACL_RX_SIZE 最小值为 X + L2CAP header + SDU length 字段的长度 (6 字节) 如果配置了 CONFIG_BT_EATT.

同时还要确认对方设备支持相同的 MTU 值。

问:仅仅需要发送大数据包,不需要接收大数据包。还有必要设置 CONFIG_BT_BUF_ACL_RX_SIZE?

答:是的,The Bluetooth specification [1] 强制使用对等的 ATT MTU.

功能概述

本示例演示了两个 BLE 设备之间如何交换 ATT MTU 功能。使用较大的 ATT MTU 有助于 收发大的数据包,以此来提高吞吐率。

为了能够发送大的数据包,server 和 client 需要更新各自的 MTU 并选择双方中的较小值来使用。 MTU 是一个非负值,尽管双方的收发可以使用不同的值,但是作为 server 端的 MTU 值应该大于 或者等于 client 端的 MTU。

需要注意的是,在 HOST 协议栈中,除非使用 L2CAP 动态通道,否则 SDUS 是不会被分片的。 在 APPLICATION 中如果发送的数据包大于 TX 的 MTU 值,需要自行分包发送。

Diagram of the MTUs and their corresponding Kconfig symbols

Diagram of the MTUs and their corresponding Kconfig symbols

环境要求

  • 支持 BLE 功能的开发板

编译和烧录

示例位置:examples/bluetooth/peripheral_mtu_update

编译、烧录等操作请参考:快速入门

运行结果

  1. 成功运行将输出如下日志

I/bt_hci_core     [0.058] Identity: 28:6D:CE:01:02:03 (public)
I/bt_hci_core     [0.064] HCI: version 4.2 (0x08) revision 0x0709, manufacturer 0x070c
I/bt_hci_core     [0.072] LMP: version 4.2 (0x08) subver 0x0709
I/perip_mtu_update [0.710] Updated MTU: TX: 23 RX: 23 bytes
I/perip_mtu_update [14.494] Updated MTU: TX: 23 RX: 23 bytes

参考文档

备注

本示例需要和 中央设备 MTU 更新示例 协同工作