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.

[参考译文] CC2650:动态更改 bdaddr

Guru**** 2589265 points
Other Parts Discussed in Thread: CC2650, CC2640R2F, CC2640, BLE-STACK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/601790/cc2650-changing-bdaddr-on-the-fly

器件型号:CC2650
Thread 中讨论的其他器件: CC2640R2FCC2640BLE-STACK

发送每个广播包后、我将尝试更改 CC2650的 bdaddr。 目标是在使用手机进行扫描时从同一芯片中看到多个 BLE 器件。 我不需要连接到它们、只需接收 AD 数据包。 我的一个问题是、如果我足够快地更改 bdaddr、手机就会检测到多个设备。 是否有办法通过命令或手动更新 AD 数据包来实现此目的?

我已经能够使用 HCI_EXT_SetBDADDRCmd ()来更改地址,但此命令仅在器件复位后处于待机模式时有效。

我需要这样做的原因是、我的公司生产了数千个使用 CC2650的设备、我的任务是模拟存在多个设备(>1000)的环境、并研究这对我们的手机扫描应用程序的影响。 为此测试订购和编程1000个器件不是一个选项、因此我正在寻找一个软件解决方案。

我有一个 Cypress BLE 模块可以即时执行此操作、但我希望找到一种使用 CC2650的方法、因为这是我们的产品实际使用的。

如果有任何见解,将不胜感激。

谢谢!

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

    这可以通过 BLE-Stack 实现。 您使用的是 CC2640R2F 还是 CC2640/CC2650?

    最简单的方法是在启用在下一个 ADV 数据包之前过期的 ADV 后启动计时器。 然后使用 GAPRole Set 参数 API 来停止 ADV、更改上述 API 的 bdaddr、然后重新启动 ADV。 冲洗、清洗、重复。

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢快速响应 JXS。

    我使用的是 CC2650。
    当您说 BLE 堆栈可以实现这一点时、您是否意味着它必须在堆栈项目中完成、而不是在应用中完成? 我将在修改后的零项目中测试这一点、以进行重新参考。
    我还没有研究过如何使用计时器、但当我将应用设置为在广播中生成事件时完成、并尝试那里的命令(这在主应用程序循环中):
    IF (pEvt->EVENT_FLAG & SBP_ADV_CB_EVT)

    bStatus_t disable = GAPRole_SetParameter (GAPROLE_ADV_NONCONN_ENABLED、sizeof (uint8_t)、&advertDisable);
    hciStatus_t writeAddr = HCI_EXT_SetBDADDRCmd (bleAddress);
    bStatus_t enable = GAPRole_SetParameter (GAPROLE_ADV_NONCONN_ENABLED、sizeof (uint8_t)、&advertEnable);

    写入地址返回0x00、启用和禁用返回0x12 (bleIncorrectMode)。

    这是否起作用、还是应该进入堆栈并使用计时器? 如果是这样、您是否可以让我在堆栈项目中启用/禁用广播?

    再次感谢、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    明白了!
    不完全确定我所做的是使其正常工作、但我将 bleAddress 缓冲区从 uint8_t 固定为 uint8、并将广播模式设置为可连接而不是非可连接。
    感谢你的帮助。

    谢谢、
    Callum