【问题标题】:With Android BLE, do I need to request a large MTU when reading byte data back, or only when writing?使用 Android BLE,我需要在读回字节数据时请求大 MTU,还是仅在写入时才需要?
【发布时间】:2020-11-11 12:56:07
【问题描述】:

我了解在 Android 中,用于将数据写入 Characterisitc 的 MTU 约为 23 个字节(使用了 3 个字节,因此您有大约 20 个字节可用),您可以请求更高的 MTU(最高 512)以允许您向蓝牙设备写入/发送更大的数据包。

但是,当读取特征数据时,您是否也需要这样做?

阅读和通知更新?

如果说,我有一个以 123 字节块发送数据的特性,但我最多只需要向它发送 2 个字节,我是否需要协商一个大的 MTU?

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy


    【解决方案1】:

    我可以建议您阅读蓝牙核心标准中的 ATT 和 GATT 章节。这些解释了协议。

    默认情况下,Android 不会协商大于默认值(23 字节)的 MTU。不过,您可以通过调用 requestMtu 函数自行完成。

    当 MTU 不够大时,Android 在后台自动使用“写入长特征值”和“读取长特征值”以传输整个值。然而,这些过程非常低效,因为它们需要多次往返。读取操作也不是原子的。

    Notifications 和 Indications 没有任何“Long”变体具有多次往返,因此它们将被截断以适应 MTU。

    【讨论】:

    • 感谢您的回复。我会在某个时候尝试挖掘这些章节。我知道 requestMtu 调用可以请求更大的 MTU(可能不起作用,但应该返回当前的 MTU) - 但是 Android 文档严重暗示这只需要写入特性。我不知道我是否需要这样做只是为了阅读。 Android 文档从来都不是最好的。在我当前的测试中,我请求更大的 MTU,并且我有一个特征以字节 [124] 块向我发送数据(读取),这一切看起来都很好,但我不知道是否这只是我测试的手机。
    • 这是否意味着“也许”手机会处理它,但我应该请求至少 127 MTU(124 + 标头)字节,即使只是为了读取?
    • Android BLE 文档毫无用处,因为它几乎没有说任何有用的东西。我想我的回答已经涵盖了您的后续问题。基本上,如果您想要更好的性能并且通知很大,则应该增加 MTU。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2019-10-24
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多