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.

[参考译文] CC2540:CC2540中的绑定问题

Guru**** 2521600 points
Other Parts Discussed in Thread: CC2540

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/728714/cc2540-problem-with-bonding-in-the-cc2540

器件型号:CC2540

大家好!

我正在使用 CC2540 SOC 开发器件、但绑定时遇到问题。 我的问题是、一开始对 CC2540软件狗开发板进行编程时、它工作正常、但在经过一段时间后、它在配对时遇到问题、我无法再与我的设备配对、请查看以下屏幕截图:

正如您在上面的屏幕快照中看到的、配对过程已开始并运行良好、但在主器件(CC2540)向外设(nrf51822)发送了 SEND_Identity_Information 请求后、似乎它忘记了发送 SEND_Identity_Address_Information、并且在某个时间之后(我已将默认超时值设置为1sec) 连接时间被限制、然后外设开始广播、然后 CC2540尝试自动连接到它、但由于绑定未完成、外设拒绝加密请求。 我曾在这个论坛中描述过这个问题   、  我认为这个问题已经解决、但在一段时间前、这个问题再次发生。 在中、默认超时值为20秒之前、这导致第一次断开连接花费的时间过长、但在此延迟之后、由于中心已发送 SENT_Identity_Address_Information 请求、配对过程已完成、断开连接后、设备会自动相互连接 。 然后、我将 默认超时值更改为1sec、以最大限度地减少延迟、但此后、问题以我在问题第一部分中所述的方式发生。

我不知道如何解决这个问题,有人能给我一个建议吗?

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

    我还上传了 BLE 连接的转储、该文件是由北欧嗅探器捕获的。 请看一下。  由于论坛不允许我上传 pcapng 格式的文件、因此我已将文件后缀更改为 psd。 请更改它、然后将其加载到 Nordic sniffer 应用程序中。

    e2e.ti.com/.../first_5F00_faild_5F00_again_2800_with-1-sec-timeout_2900_.psd

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

    您使用的是哪个版本的 BLE 堆栈?

    您是否还能了解成功配对?

    在超时之前、您是否在配对失败的过程中暂停了程序、以查看程序是否处于某种未知状态并查看调用堆栈?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、感谢您的回答

    我使用的 ble 堆栈版本是1.4.2.2。  当我在连接超时之前暂停应用程序时、我可以看到两种不同的行为。 有时、当我将请求从 PC 发送到 CC2540以执行配对时、IAR 会显示一条消息、提示"可能检测到 iDATA 堆栈溢出"、在这种情况下、我暂停应用时、IAR 会显示 PC 和其他寄存器中的非传感器值。 我附加了这种情况的屏幕截图(unvalid.png)。有时它未显示任何错误、在这种情况下、当我暂停应用 IAR 显示寄存器和其他组件的有效值时、我还附加了来自这种情况的屏幕截图(valid.png)。

    我认为这个问题与闪存和 TI 堆栈保存在闪存中的数据有关、因为如果发生此问题、并且我将固件编程到闪存、器件工作正常、并且我从器件中使用一段时间(例如2周) 问题再次发生并一直存在、直到我对芯片重新编程。 我还捕获了成功连接的嗅探(再次将格式更改为捕获并使用北欧嗅探器)。

    谢谢

    e2e.ti.com/.../when_5F00_working_5F00_good.psd

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

    好的、我的朋友、

    我认为问题与闪存有关。 在我的应用中、有时我会尝试使用 osal SNV 库在 CC2540的闪存中写入一些数据。 写入数据的函数如下所示:

    void name_list_update (void)
    {
    osal_SNV_write (name_list_SNV_ID、sizeof (bonding_fap_t)* gap_bonding_MAX、bond_fap_list);
    } 

    此函数尝试在闪存中写入80字节数据、并且在链路稳定后30秒将调用此函数。 此函数是否会导致问题?? 因为我在这个 froum 中读出、闪存存储器的脏使用可能会导致问题。 我想暗示的是、如果外设的请求已从计算机端应用发送到 CC2540、我的应用只与外设绑定。 每当发送此请求时、我都会调用以下函数来删除所有之前绑定的器件并终止当前链接:

    void remove_all_bond_devices( void )
    {
    uint8 * bonding_addresses;
    uint8 idx;
    uint8 cnt=0;
    GAPBondMgr_GetParameter (GAPBOND_bond_count,&cnT);
    
    
    bonding_addresses =(uint8 *) osal_mem_alloc (cnt * B_ADDR_LEN);
    GAPBondMgr_GetParameter (GAPBOND_Bonded_list、bonding_addresses);
    GAPBondMgr_SetParameter (GAPBOND_ERASE_ALLBONDS、0、NULL);
    用于绑定全部/删除 
    

    能否调用 GAPBondMgr_SetParameter (GAPBOND_ERASE_ALLBONDS、0、NULL);连接之前的函数会导致此问题??

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于 TI 开发人员来说、没有人能帮助我解决这个问题?? 此问题将导致我的项目失败。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alireza、

    我从未见过这个问题、我很难提供真正详细的反馈、因为您显然在尝试自己执行一些管理 SNV 的功能。

    也就是说、在您提供的函数和您提供的说明中、似乎您想要终止所有链接、然后完全删除您的绑定信息、这是正确的吗?

    如果您愿意、可以调用 GAPentralRole_TerminateLink (0xFFFF)、其中0xFFFF 是 connHandle、定义为0xFFFF 时将终止所有连接。 之后、您可以调用 GAPBondMgr_SetParameter (GAPBOND_ERASE_ALLBONDS、0、NULL)来擦除您的所有绑定信息。 通过这种方式、您可以确保您未连接到任何东西、以取代您在所提供的函数中所做的工作、您在该函数中循环浏览所有 idx 以查看是否连接了某个东西。 这是否有助于理解?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于不活动、我将关闭此帖子。 要重新打开此主题、只需发布后续问题。 否则、在从此帖子中无活动30天后、此主题将被锁定。