ble建立连接后怎样获取MTU的大小?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
请参考这个link,是一个类似的问题
在这个link的示例中,有一个
// Find out what the maximum MTU size is
ret = linkDB_GetInfo(node->connHandle, &connInfo);
是要更改MTU大小或者测试吞吐量吗?
过程是:建立连接后,中央设备应发出 Exchange MTU 请求,然后您应该收到包含更新的 MTU 值的 ATT_MTU_UPDATED_EVENT GATT 回调。
在BLE连接的初始阶段,主设备和从设备之间会进行协商以确定双方的MTU大小。MTU大小的协商是通过Exchange MTU Procedure来完成的。
根据BLE规范,主设备首先发送一个MTU请求给从设备,请求中指定了主设备希望使用的MTU大小。然后从设备可以选择接受或拒绝该请求,并回复一个MTU响应。如果从设备接受了请求,那么双方将使用从设备回复的MTU大小作为最终确定的MTU。
一旦建立连接后,主设备可以通过发送ATT_MTU_UPDATE_REQUEST来请求更新MTU大小。这个请求中指定了主设备希望的新的MTU大小,例如251字节。然后从设备可以选择接受或拒绝该请求,并回复一个ATT_MTU_UPDATED_EVENT来通知主设备MTU的更新结果。
因此,MTU的协商过程实际上是一个双方协商的过程,取决于从设备的能力和主设备的请求。如果从设备无法支持主设备请求的较大MTU大小,那么最终的MTU可能会小于主设备请求的值。而在连接建立后,主设备可以通过请求更新MTU大小来尝试扩大MTU。
在BLE连接的初始阶段,主设备和从设备之间会进行协商以确定双方的MTU大小
经过实践苹果和安卓在GAP_LINK_ESTABLISHED_EVENT后的MTU均是23(这个应该就是Exchange MTU Procedure后结果),为什么一开始就没有以支持的最大MTU去协商?这一点还是不太明白