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

CC2642R: CC2642R: GATT_ExchangeMTU更改MTU失败

Part Number:CC2642ROther Parts Discussed in Thread:SYSCONFIG

SDK版本:simplelink_cc13xx_cc26xx_sdk_7_10_00_98(最新版本)

硬件:自制最小系统板5287.原理图 蓝牙模块-CC2642_V1.3.pdf

现象:

使用TI的simple_central和simple_peripheral测试,主机扫描到从机,建立连接后,会调用GATT_ExchangeMTU更新MTU:

static void SimpleCentral_startSvcDiscovery(void)
{

    bStatus_t status;
    attExchangeMTUReq_t req;

    // Initialize cached handles
    svcStartHdl = svcEndHdl = 0;

    discState = BLE_DISC_STATE_MTU;

    // Discover GATT Server's Rx MTU size
    req.clientRxMTU = scMaxPduSize – L2CAP_HDR_SIZE;
    // ATT MTU size should be set to the minimum of the Client Rx MTU
    // and Server Rx MTU values
    //VOID GATT_ExchangeMTU(scConnHandle, &req, selfEntity);
    status = GATT_ExchangeMTU(simpleBLEConnHandle, &req, selfEntity);
    if(status == 0){
        sprintf(printbuf,"Request was queued successfully.\r\n");
    }else{
        sprintf(printbuf,"Error:status=%d.\r\n",status);
    }
    PRINT_LOG;

}

 SimpleCentral_processGATTMsg(gattMsgEvent_t *pMsg)函数中收到ATT_MTU_UPDATED_EVENT情况非常少见,大部分情况是收不到,在收不到ATT_MTU_UPDATED_EVENT的情况下,连接会自动断开。

GATT_ExchangeMTU()函数的返回状态是0,即成功,我尝试更新的 ATT MTU 大小的值是65,这是工程默认可改MTU的最大值。

simple_peripheral用手机连接改MTU每次都是正常的。此问题应该与simple_peripheral无关。

Alex Zhang:

您好,已经跟进您的问题,这需要一些时间谢谢。

,

Alex Zhang:

函数是否调用simple_central.c文件中的GATT_MSG_EVENT?

您这边是否只有其主板存在此问题?

,

Nick Yao:

GATT_MSG_EVENT是肯定调用了的。

我并不能确定问题出在哪里。

我这边早期的一个实现同样central功能的项目,使用CC2640R2芯片,SDK版本simplelink_cc2640r2_sdk_1_40_00_45,其并没有此类问题。

,

Alex Zhang:

您好,已经跟进您这边的问题,这需要一些时间,谢谢

,

Alex Zhang:

我需要知道的是,GATT_MSG_EVENT是否是由GATT_Exchange_MTU函数触发的?

安全连接BLE功能是否已启用?

最好在BLE5-Stack > GATT > MTU部分查看用户指南,以确切了解MTU大小的工作原理。

https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gatt.html

这里是链接。

,

Nick Yao:

您好,

1.GATT_ExchangeMTU()会触发GATT_MSG_EVENT。我碰到的问题是,有时候,在连接建立之后,central调用GATT_ExchangeMTU(),SimpleCentral_processGATTMsg会在大约30秒后,收到一个ATT_EXCHANGE_MTU_RSP,然后连接就断开了(SimpleCentral_processGapMsg收到了GAP_LINK_TERMINATED_EVENT)。

2.在哪里查看安全连接BLE功能是否已启用?

3.MTU大小的工作原理已认真阅读并了解。

,

Alex Zhang:

您好,您的问题我已经跟进,这需要一些时间,谢谢。

,

Alex Zhang:

sysconfig中设置的值最大PDU大小值是多少? (BLE>General configuration)

在ATT_EXCHANGE_MTU_RSP事件中,MTU的值是多少?

您也可以在sysconfig中检查安全连接。

,

Nick Yao:

sysconfig中主、从机的Max size of PDU(bytes)都是69.

ATT_EXCHANGE_MTU_RSP事件中,我在central中SimpleCentral_processGATTMsg函数内加入了以下代码来打印:

当失败时,打印ATT_EXCHANGE_MTU_RSP,MTU Size: 0

当成功是,打印ATT_EXCHANGE_MTU_RSP,MTU Size: 65

,

Alex Zhang:

您好,已经跟进您的问题,这需要一些时间谢谢。

,

Alex Zhang:

您的意思是该功能成功通过,但不是每次都成功通过?

当该功能导致断开设备时,您是否有上下文?

,

Nick Yao:

是的,不是每次都成功。

请问您需要哪些上下文,我可以在代码中添加打印。

,

Alex Zhang:

您好,您的问题我已经跟进,预计下周一回复您,谢谢

,

Alex Zhang:

您在同一连接中多次尝试更改MTU大小?

默认的MTU大小是多少?

为什么他您需要将其更改为65?

Nick Yao 说:当成功是,打印ATT_EXCHANGE_MTU_RSP,MTU Size: 65

这是他们在连接后做的第一件事吗?

两个主板都是您这边的主板?还是说一个是您定制的另一是ti官方的?

你们是否尝试更改代码中的GATT_ExchangeMTU本地化,例如在计时器结束时触发函数?

蓝牙低能耗跟踪应有助于了解此问题如何重现以及实际发生的情况。

,

Nick Yao:

我在同一次连接中只更改一次MTU大小。

默认的MTU大小是23,

我现在需要一次传输超23个字节所以需要更改MTU。

2个主板都是我们自己设计。

连接后第一时间不会马上更改MTU而是启动一个定时器,定时6秒,时间到才去更改。

我想知道您测试过、遇到过这个情况吗

,

Alex Zhang:

您好,我这边已经跟进您的问题,有更新我会及时联系您,谢谢

,

Alex Zhang:

您好,工程师那边回复到:

有关信息,处理此线程的工程师今天由于美国假期而不在办公室。 请耐心等待,因为我可能错过了讨论中的一些细节。

如果尚未完成,我建议使用蓝牙嗅探器收集蓝牙跟踪数据,并比较在工作和非工作情况下交换的数据包的内容。

如果您需要帮助进行分析,请分享您这边跟踪到的蓝牙数据。

,

Nick Yao:

您好,请问蓝牙嗅探器是什么,我没有使用过此类设备。

,

Alex Zhang:

我这边给您提供链接 https://software-dl.ti.com/lprf/packet_sniffer_2/docs/user_guide/html/introduction.html

您可以查看如上文档链接这是如何使用LaunchPad, 配合SmartRF Packet Sniffer 2+Wireshark来作为sniffer去对设备进行抓包。

赞(0)
未经允许不得转载:TI中文支持网 » CC2642R: CC2642R: GATT_ExchangeMTU更改MTU失败
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1