使用 Android BLE,我是否需要在读回字节数据时或仅在写入时请求较大的 MTU?
With Android BLE, do I need to request a large MTU when reading byte data back, or only when writing?
我知道在 Android 中,将数据写入 Characterisitc 的 MTU 大约为 23 字节(使用了 3 个字节,因此您有大约 20 个字节可用)并且您可以请求更高的 MTU(最多512) 允许您 write/send 向蓝牙设备发送更大的数据包。
但是,读取特征数据时是否也需要这样做?
阅读和通知都更新?
如果说,我有一个特性,可以以 123 字节的块发送数据,但我最多只需要向它发送 2 个字节,我需要协商一个大的 MTU 吗?
我可以推荐你阅读蓝牙核心标准中的 ATT 和 GATT 章节。这些解释了协议。
默认情况下 Android 不会协商比默认值(23 字节)更大的 MTU。您可以通过调用 requestMtu
函数自行完成。
Android 当 MTU 不够大且 reading/writing 值以传输整个值时,
Android 在后台自动使用“写入长特征值”和“读取长特征值”。然而,这些过程非常低效,因为它们需要多次往返。读取操作也不是原子的。
通知和指示没有任何具有多次往返的“长”变体,因此这些将被截断以适应 MTU。
我知道在 Android 中,将数据写入 Characterisitc 的 MTU 大约为 23 字节(使用了 3 个字节,因此您有大约 20 个字节可用)并且您可以请求更高的 MTU(最多512) 允许您 write/send 向蓝牙设备发送更大的数据包。
但是,读取特征数据时是否也需要这样做?
阅读和通知都更新?
如果说,我有一个特性,可以以 123 字节的块发送数据,但我最多只需要向它发送 2 个字节,我需要协商一个大的 MTU 吗?
我可以推荐你阅读蓝牙核心标准中的 ATT 和 GATT 章节。这些解释了协议。
默认情况下 Android 不会协商比默认值(23 字节)更大的 MTU。您可以通过调用 requestMtu
函数自行完成。
Android 当 MTU 不够大且 reading/writing 值以传输整个值时,
Android 在后台自动使用“写入长特征值”和“读取长特征值”。然而,这些过程非常低效,因为它们需要多次往返。读取操作也不是原子的。
通知和指示没有任何具有多次往返的“长”变体,因此这些将被截断以适应 MTU。