为啥有响应与无响应的 MTU 不同?
Posted
技术标签:
【中文标题】为啥有响应与无响应的 MTU 不同?【英文标题】:Why is the MTU different for With Response vs Without Response?为什么有响应与无响应的 MTU 不同? 【发布时间】:2020-08-24 20:57:32 【问题描述】:在 ios 上,当我请求 MTU 时,.withoutResponse
与 .withResponse
的值不同。我意识到它可能会有所不同,因为函数需要该参数,但为什么会有所不同?
这是在设备上(BLE 4.2):
(lldb) po peripheral.maximumWriteValueLength(for: .withoutResponse)
182
(lldb) po peripheral.maximumWriteValueLength(for: .withResponse)
512
在另一台设备 (BLE 5) 上,我得到:
(lldb) po peripheral.maximumWriteValueLength(for: .withoutResponse)
509
(lldb) po peripheral.maximumWriteValueLength(for: .withResponse)
512
【问题讨论】:
【参考方案1】:无响应写入与 MTU 直接相关。 (MTU - 3)。
当您使用writeWithResponse
时,iOS 可以执行写入响应(最大值长度为 MTU - 3)或“写入长特征值”,它使用多个 ATT 事务来写入值。在后一种情况下,唯一的限制因素是特征值的最大长度,标准设置为 512 字节。
【讨论】:
谢谢!你有我可以阅读更多内容的参考吗? (或 BLE 规范中的部分)具体指定“响应”有何不同。 只需阅读 GATT 章节,例如第 4.9.4 节。以上是关于为啥有响应与无响应的 MTU 不同?的主要内容,如果未能解决你的问题,请参考以下文章
当我的程序“无响应”时,为啥我的paintBox Canvas 被擦除了?
为啥在 Jupyter 笔记本中调用 cv2.imshow() 时出现无响应窗口