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-Q1:解决列表问题

Guru**** 663810 points
Other Parts Discussed in Thread: CC2640R2F-Q1, CC2640, CC2640R2F
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1213095/cc2640r2f-q1-resolving-list-issue

器件型号:CC2640R2F-Q1
主题中讨论的其他器件: CC2640CC2640R2F

您好!

我公司基于 CC2640R2F-Q1芯片开发了小型器件。 器件已在大规模生产(SOP 后)。

在过去几周、我们的客户检测到两种情况、即我们的器件无法正常工作。 情况如下:

  • 客户触发的与音响主机配对过程(BLE)
  • 客户触发断开连接
  • 客户想要重新连接

发生此处问题、即我们的器件忽略连接指示数据包。 在客户端 BT 控制器报告错误连接未能建立(0x3E)

  • 客户关闭/打开设备电源。 此后、器件正常工作、重新连接正常工作。

 

根据我们的分析、我们可以肯定地看到、我们的器件无法正常工作。 我们关注代码(BLE 堆栈)、并得出如下结论:

  • 在配对过程中、已将客户的设备正确添加到白名单功能 GapBondMgrAddBond、 因为在复位后、我们没有丢失该器件
  • 我们看到、下一步是、 客户的设备应添加到解析 BT 控制器列表中
  • 我们在想、这个过程是在没有成功的情况下结束的、因为我们的器件忽略连接指示数据包
  • 器件帮助复位、因为在初始化期间、器件将白名单与解析列表功能同步 GAPBondMgr_syncResolvingList

我们向功能中添加了许多额外的调试 GapBondMgrAddBond 确切地说在哪里发生了问题。 但最大的问题是、我们不能重现这个问题。 经过两年的试验、我们只发现了这一现象2次。

客户也不能重现此情况。 我们仅设有 BLE 嗅探器。 目前、我们正在研究重现场景

 

 问题:我们没有很多数据输入,但也许只是基于这种信息,可以说更多关于这种问题。

或者可能德州仪器的一些人遇到这样零星的问题???

         

BLE 堆栈:simplelink_cc2640r2_sdk_3_30_00_20

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

    您好、Pawel:

    0x3E -未建立连接最常见的影响是睡眠时钟精度(SCA)未适当设定为电路板上所使用的32kHz 晶振这一事实。 您正在使用的 LF 晶振的 ppm 值是多少、并且您是否要在应用的任何位置设置 SCA?

    有关更多信息、请参阅以下内容的第12.5.4节:

    https://www.ti.com/lit/an/swra640g/swra640g.pdf

    以及以下文档:

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_6_40_00_13/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/custom-hardware-cc13xx_cc26xx-ble.html#clock-accuracies-and-bluetooth-le

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

     您好、Evan:

    我们发现了问题。 它是可重复的100%、并且可能您可以重现这些。

    但对于 BLE 堆栈的德州仪器代码、还是有疑问

     

    场景如下:

    • 请将10台中央设备与 CC2640配对。 Central 必须启用 LE Privacy。
    • 请配对十一台设备。

     

    所看到的内容。 请复查功能 GapBondMgrAddBond

    停止  静态 uint8_t GapBondMgrAddBond (gapBondRec_t * pBondRec、gapAuthCompleteEvent_t * pPkt)

     1)代码检查、如果绑定列表中已存储此类设备。 否

    尝试在绑定列表中查找空位置。 绑定列表已满,因此删除拳头条目。 行为是可以的

     

    //首先看一下我们是否已有此器件的绑定
    bondIdx = gapBondMgrFindAddr (pBondRec->publicAddr);
    if (bondIdx >= GAP_Bondings_MAX)

    bondIdx = gapBondMgrFindEmpty();
    }

     2)将信息写入绑定列表。确定

     

    gapBondCharCfg_t charCfg[GAP_CHAR_CFG_MAX];

    //保存主要信息
    void osal_SNV_write (mainRecordNvID (bondIdx)、sizeof (gapBondRec_t)、pBondRec);

    //主信息保存后,即可更新 LRU 表。
    gapBondMgrUpdateLruBondList(BondIdx);

    //在特征配置条目中写出 FF 以进行覆盖
    //可能已存储的任何以前的绑定数据
    void osal_memset (charCfg、0xFF、sizeof (charCfg));

    void osal_SNV_write (gattCfgNvID (bondIdx)、sizeof (charCfg)、charCfg);

    ///更新 Bond RAM Shadow 只是与新添加的 bond 条目
    void osal_memcpy (&(bonds[bondIdx])、pBondRec、sizeof (gapBondRec_t);

     

    3)将设备添加到解析列表。 这里我们有错误(HCI error code0x07)、正在解析列表已满。 不正常。

    #if defined (BLE_V42_features)&&(BLE_V42_features 和 privacy_1_2_CFG)
    如果(pPkt->pIdentityInfo)

    //将设备添加到解析列表
    if (gapState == GAP_STATE_IDLE)

    HCI_LE_AddDeviceToResolvingListCmd ((pPkt->pIdentityInfo->addrType &
    MASK_ADDRTYPE_ID)、
    pPkt->pIdentityInfo->BD_addr,
    pPkt->pIdentityInfo->irk,
    null);

    为什么我们在此处没有与绑定列表中类似的 mehanism、我们正在为下一个器件做什么???

    它导致该设备在绑定列表中、但不在解析列表中。  因此客户设备无法重新连接。

    我们的意见是,这段代码应该被修复,或者应该在配对过程中对解析列表进行三重同步。

     

     

    例如、我们已解决在该函数上添加此类行后的问题。 在将设备添加到解析列表之前、请 为新设备执行置入操作。

    gapBondRec_t tmpRec;

    if ((osal_SNV_read (mainRecordNvID (bondIdx)、sizeof (gapBondRec_t)、&tmpRec)==Success)&&(osal_isbufset (tmpRec.publicAddr、0xFF、B_ADDR_LEN)=false))

    HCI_LE_RemoveDeviceFromResolvingListCmd ((tmpRec.publicAddrType &
    MASK_ADDRTYPE_ID)、
    tmpRec.publicAddr);
    }

     

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

    Pawel,

    很抱歉耽误你的时间。 我的团队中有人会为您研究这项功能。 不过、关于您的消息、您似乎添加了您认为可解决问题的代码。 您是否会问该代码是否是有效的解决方案? 此外、您所使用的 SDK 是较旧的 SDK、我认为最新的是 SDK 5.40、因此我们将审查两者之间解决的问题、看看是否有适用的问题。  

    Evan

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

    您好、Evan:

    老实说,让我感兴趣,如果我们忽略了一些东西,那么 SDK 的这个机制是可以的(也许我们没有看到目的,为什么它是这样实现的), . 例如、我们也可以 通过在配对(连接期间)或直接断开连接后对解析列表进行三角同步来管理这一点。 例如、 在断开连接期间、白名单将启动同步化。

    但在我们看来,它将是优雅:)修复这个功能。 是的、我们使用的是旧 SDK、因为该器件是旧的、已经投入生产、并且我们在 SOP 后一年才使用。 除了该问题、BLE 堆栈运行正常。 说实话、我是在这个阶段(系列生产)避免此类更改(新的 BLE 堆栈)。

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

    您好、Evan:

    是否有人使用解决列表检查了此问题? 很长一段时间没有答案。

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

    尊敬的 Tadeusz:

    感谢您的耐心。 我已经能够在我的工作台上重现您的问题。

    您能否提供 Pawel 最初提供的解决方案代码存放位置的源代码/屏幕截图? 我同意这将是一个简洁的解决方案,我希望确保我确切地验证一下你们是如何实施的。

    再次感谢您、
    Joe

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

    Joseph、您好、请查看此 SDK 补丁。 希望它对您有所帮助。

    diff --git a/source/ti/blestack/profiles/roles/gapbondmgr.c b/source/ti/blestack/profiles/roles/gapbondmgr.c
    index 01c7843..5904463 100644
    --- a/source/ti/blestack/profiles/roles/gapbondmgr.c
    +++ b/source/ti/blestack/profiles/roles/gapbondmgr.c
    @@ -1963,6 +1963,12 @@ static uint8_t gapBondMgrAddBond(gapBondRec_t *pBondRec, gapAuthCompleteEvent_t
         if (pAuthEvt == NULL)
         {
           gapBondCharCfg_t charCfg[GAP_CHAR_CFG_MAX];
    +      gapBondRec_t tmpRec;
    +
    +      if ((osal_snv_read(mainRecordNvID(bondIdx), sizeof (gapBondRec_t), &tmpRec) == SUCCESS)
    +            && (osal_isbufset(tmpRec.publicAddr, 0xFF, B_ADDR_LEN) == FALSE)) {
    +        HCI_LE_RemoveDeviceFromResolvingListCmd((tmpRec.publicAddrType & MASK_ADDRTYPE_ID), tmpRec.publicAddr);
    +      }
     
           // Save the main information
           VOID osal_snv_write(mainRecordNvID(bondIdx), sizeof (gapBondRec_t), pBondRec);
    

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

    尊敬的 Tadaussz:

    感谢您提供此内容。 您是否也能够在您的工作台上验证此修复?

    此致!
    Joe

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

    您好、Joe!

    是的、我们已经对其进行了测试、但只有在这样的确切情况下、它看起来是可以的。

    但是、我认为我们也应该在禁用隐私选项和/或可能更改更多选项的情况下对其进行测试、因为该特定选项导致了这个问题。

    因此、我们只需确保它能够正常工作、而不会产生副作用

    BR、Taddy

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

    尊敬的 Tadeusz:

    我们的专家认为您实施此解决方案的方法不存在任何问题。 在您最终进行进一步验证之前、它看起来是一个可行的解决方案。

    我仍在努力在我的工作台上验证修复;一旦有了、我会给您回复。

    此致!
    Joe

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

    您好、Joe、

    感谢您提供的信息。 所以,我们将应用这个解决方案,但我们也等待结果"从你的工作台";)

    BR、Taddy

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

    尊敬的 Tadeusz:

    在将10个不同的器件 ID 连接到 CC2640R2F 之后、我成功地配对并连接了第11个器件。

    您的解决方案似乎有效、我们的专家认为您的方法没有问题。 请告知我们在测试其他事例时是否再次出现此问题。

    此致!
    Joe

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

    您好、Joe!

    感谢您的答复。 到目前为止、我们尚未遇到此修复的任何问题、但我们仍在测试中。

    Br、Tadeusz