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.

[参考译文] CC2640R2F:GATT 写入错误

Guru**** 2589275 points
Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/602211/cc2640r2f-gatt-write-error

器件型号:CC2640R2F

您好!

我使用的是 在两  个 CC2640R2F Launchpad 上运行的示例项目 ble5_multi_role 项目和 ble5_simple_peripheral 项目、multi_role 充当客户端、而外设充当服务器。

我的 SDK 版本是  1.35.00.33。

连接后、我使用 Launchpad 上的键对外设上的特征执行读取/写入操作。

但是、当我尝试自动执行此过程时、在某些情况下会失败。

例如、我尝试在发现特征后立即执行写入、即:

if ((pMsg->method =ATT_READ_BY_TYPE_RSP)&&
(pMsg->msg.readByTypeRsp.numPairs >0)

//存储句柄
discInfo[connIndex].charHdl = build_uint16 (pMsg->msg.readByTypeRsp.pDataList[0]、
pMsg->msg.readByTypeRsp.pDataList[1]);

//在此处执行写入操作
MR_doGattRw (0);//无其他连接,因此索引为0

写入尝试失败、 我在外设侧看不到任何更改。

但是、如果我在同一个位置启动时钟、即

if ((pMsg->method =ATT_READ_BY_TYPE_RSP)&&
(pMsg->msg.readByTypeRsp.numPairs >0)

//存储句柄
discInfo[connIndex].charHdl = build_uint16 (pMsg->msg.readByTypeRsp.pDataList[0]、
pMsg->msg.readByTypeRsp.pDataList[1]);

Util_startClock (testingClock);

延时5秒、然后在超时时执行写入、写入将完成。

我试验了几个延迟值、即1s、2s 和5s。 我发现写入成功的时间为2秒和5秒、但失败的时间为1秒。

 发生什么事了?

 

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

    此问题只应在正在进行另一个 ATT 操作时发生。 如果您查看返回状态、它会说什么?

    您应该希望在 GATT_Write 发布时返回成功。 您所使用的延迟可能会允许 ATT 事务完成、从而允许另一个事务。

    您可以执行的操作与在 longrange_central 和 throughput _central 的 GitHub 示例上执行的操作类似、是发布事件供应用程序处理和发送写入。 如果不成功、请释放资源并重新发布事件、直到成功。

    我希望这对您有所帮助、

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

    你好,Rebel,

    是的、这很有效。 谢谢。

    但这不是一个非常糟糕的 API 吗? 理想情况下、BLE 堆栈应负责缓冲任何挂起的写入、而不是发送即时错误。

    谢谢、

    Addarsh  

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

    然后堆栈的 RAM 使用将失控! (至少这是我认为会发生的情况)

    由于蓝牙规范、大多数属性需要以一种或另一种方式进行确认才能发送另一种属性。

    这使得蓝牙能够可靠而不会丢弃数据包。

    此致、
    反叛分子