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.

[参考译文] CC2340R5:CC2340R5 中央器件仅接收 21 个字节 (18+3)、而监听器显示来自 BLE 5.0 外设的 26 个字节

Guru**** 2811295 points

Other Parts Discussed in Thread: CC2340R5

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1624115/cc2340r5-cc2340r5-central-receives-only-21-bytes-18-3-while-sniffer-shows-26-bytes-from-ble-5-0-peripheral

器件型号: CC2340R5

尊敬的团队:

我的客户在上遇到了潜在的 BLE 堆栈问题 CC2340R5 中央运行 。 逻辑高电平 BLE 5.0 外设(Realtek 解决方案) 、CC2340R5 始终收到 截断的 ATT 数据 对于大于的数据包 21 字节 、而监听器显示外围设备实际传输完整的有效负载。

1) 环境

  • 中心: ti CC2340R5 (中心角色)
  • 外设: BLE 5.0 设备(Realtek 解决方案)
  • 经测试的 SDK/BLE 栈版本:
    • SimpleLink 低功耗 F3 SDK 9.11.00.18
    • SimpleLink 低功耗 F3 SDK 9.12.00.19

    两个版本都重现了相同的问题。

 

2) 问题描述

CC2340R5 连接到 BLE 5.0 外设后、我们发送 A 写入、无响应 命令。 外设随后会发回数据包(例如,通过通知/指示或其他 ATT 数据路径)。

  • 预期: 接收 总共 26 个字节 (包括 3 字节 ATT 标头)
  • CC2340R5 上的实际值: 仅接收 总共 21 个字节 (18 字节有效载荷+ 3 字节标头)
  • 监听器捕获: 外设确实发送的数据 总共 26 个字节 (完整数据)

3) 附加观察(关键点)

我们验证了这一点 每当外设发送大于 21 字节的数据包时 、CC2340R5 始终接收 21 个字节 (即截断)。
但是、当连接到时 BLE 4.0 外设 (1M PHY) CC2340R5 可以接收到 21 个字节 接地平面。

 

请帮助检查可能的原因。
谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您联系我们! 您能否确认在 CC2340R5 端设置的 MTU 大小?

    此致、

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ti_ble_config.h 中的 MAX_PDU_SIZE 为 251、监听器中的交换 PDU 大小为 247。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    您有任何更新或建议吗?

    我们对此 BLE IC 的项目进度和功能感到担忧。

    THX。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否与我分享您所引用的监听器日志,以及您用来读取您的特征的代码片段?

    如果使用 GATT_ReadCharValue、则此函数仅返回 长度最多 (ATT_MTU - 1) 个八位位组。 如果由于某种原因 MTU 交换未成功、则该函数将始终读取到大约 21 个字节、这是默认的 MTU 值。

    此致、
    Lea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外、要检查 MTU 交换是否成功、您可以将 BLEAPPUTIL_ATT_MTU_UPDATE_EVENT 添加到 GATT 事件处理程序的 EventMask 中。 如果工程基于 basic_ble、则此 GATT 处理程序应位于名为 dataGATTHandler 的变量中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lea:

    我的工程来自 basic_ble 示例代码、可以  在 app_data.c 中接收到 ATT_MTU_UPDATE_EVENT

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否修改了 basic_ble 代码中的任何内容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lea:

    我们添加了工程要求:外设模式、中央模式、主要连接到主 IC 的 SPI 接口。
    需要 您的帮助以查看我们的编码更改?
    - app_peripheral.c
    - app_data.c
    - menu_doGattWriteCB.TXT --> GATT 在此 API 中写入、然后在 app_data.c 中回调(与此问题直接相关)

    e2e.ti.com/.../app_5F00_peripheral.ce2e.ti.com/.../app_5F00_data.ce2e.ti.com/.../Menu_5F00_doGattWriteCB.TXT

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lea:  

    希望您表现出色。

    感谢您对我们发现的 BLE 互操作性问题的支持 CC2340R5 处于中心角色

    这一项目的年工作量很大 所以他们很关心日程安排的影响。

    非常感谢您帮助我们深入了解并指导我们快速解决问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、迈克!

    我认为问题来自  data.c 下 GATT_eventhandler 的 ATT_Handle_Value_Noti 案例
    gattMsg->msg 对象的类型是 gattMsg_t、它是联合体类型。 这意味着不是一个非常大的对象,而是联合体中最大结构的大小,并且知道正确的类型是必不可少的。

    在您的示例中、您正在读取 UNION 的 readRsp 成员、而您应该 改为读取 handleValueNoti、因为您正在筛选 ATT_handle_Value_Noti 消息。 因此、您在 attReadRsp_t 中读取、而不是在 attHandleValueNoti_t 中读取

    这两个结构之间的区别是,当 attReadRsp_t 的 len 成员位于偏移 0 时,偏移 0 处的成员是句柄。 这意味着您正在将通知句柄作为数据的长度进行读取。

    请将您的代码更改为使用:

    Uint16_t len  = gattMsg->msg.handleValueNoti.len;
    Uint8_t *data  = gattMsg->msg.handleValueNoti.pValue;  

    看看它是否起作用。

    此致、
    Lea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lea:  

    感谢您的及时支持。

    我已联系卢克测试代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lea:

    谢谢你。

    现在就开始工作了!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴听到! 如果您有另一个类似问题、请随时创建另一个主题。

    祝你度过美好的一天!