Part Number:LAUNCHXL-CC26X2R1
ble建立连接后怎样获取MTU的大小?
Galaxy Yue:
您好,
请参考这个link,是一个类似的问题
https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/656744/cc2640r2f-how-to-know-the-mtu-of-current-connection-i-don-t-want-to-change-it
在这个link的示例中,有一个
// Find out what the maximum MTU size is ret = linkDB_GetInfo(node->connHandle, &connInfo);
https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1039643/launchxl-cc26x2r1-ble-multi-role-example-how-to-get-write-response-data
是要更改MTU大小或者测试吞吐量吗?
,
壮壮:
根据注释显示不可用,
,
Galaxy Yue:
过程是:建立连接后,中央设备应发出 Exchange MTU 请求,然后您应该收到包含更新的 MTU 值的 ATT_MTU_UPDATED_EVENT GATT 回调。
,
壮壮:
经过测试苹果手机连接后确实会打印MTU大小
但是安卓手机连接后无打印
我的诉求是设备连接后,可以获取到当前的MTU大小。
,
Galaxy Yue:
没有直接获取的api,需通过上述方式
安卓端有进行其它操作吗?
,
壮壮:
安卓/苹果 均是连接成功后输入配对码
我在GAP_LINK_ESTABLISHED_EVENT事件下面增加如下打印
打印的mtu都是23,但是苹果手机的一段时间后,在ATT_MTU_UPDATED_EVENT更新为251
,
Galaxy Yue:
正常来讲,ATT_MTU_UPDATED_EVENT就是更新的函数,会返回一个更新的,
是安卓不能正常返回吗?
,
壮壮:
使用的手机是红米k30和IQOO Neo3进行测试,MTU均为23,无ATT_MTU_UPDATED_EVENT事件
,
壮壮:
安卓抓包如下, 已经上传抓包文件,是否可以查收?
,
壮壮:
mtu_filtered.bin
mtu_filtered.bin改为mtu_filtered.btt即可查看。
这个是安卓抓包文件
,
Galaxy Yue:
已经收到,格式更改后还未打开成功,正在尝试
,
壮壮:
使用的是EllisysBluetoothAnalyzer_5.0.8242.30829
,
Galaxy Yue:
我这边暂时看不了,流程上来讲是一样的
可以尝试一下CCS调试 看是否中断或者被阻塞
我再看看MTU相关资料
,
壮壮:
经过我的验证安卓没有ATT_MTU_UPDATED_EVENT原因是对应的调试助手没有去更新MTU,因为有的APP可以手动设置MTU,设置后2642触发ATT_MTU_UPDATED_EVENT事件,所以我认为非问题。
2642MTU我设置的251
但是为什么建立连接后MTU都是23 后面更新为251,为什么在协商阶段不直接是251,非要ATT_MTU_UPDATED_EVENT触发后更新MTU大小。这个机制不太理解
,
Galaxy Yue:
在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。
,
壮壮:
Galaxy Yue 说:在BLE连接的初始阶段,主设备和从设备之间会进行协商以确定双方的MTU大小
经过实践苹果和安卓在GAP_LINK_ESTABLISHED_EVENT后的MTU均是23(这个应该就是Exchange MTU Procedure后结果),为什么一开始就没有以支持的最大MTU去协商?这一点还是不太明白
,
Galaxy Yue:
请记住,实际结果最大传输单元 仍必须使用 MTU 交换过程进行协商 GATT_ExchangeMTU。所有连接都将以 23 字节的默认 MTU 开始。
,
Galaxy Yue:
https://dev.ti.com/tirex/content/simplelink_cc13x2_26x2_sdk_5_20_00_52/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gatt.html?highlight=mtu#maximum-transmission-unit-mtu
可以再看一下MTU部分