TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-CC26X2R1: ble建立连接后怎样获取MTU的大小?

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部分 

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-CC26X2R1: ble建立连接后怎样获取MTU的大小?
分享到: 更多 (0)