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:将外设限制为仅连接一个专用中央器件。

Guru**** 2589280 points
Other Parts Discussed in Thread: CC2340R5, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1371396/cc2340r5-limit-peripheral-to-connect-to-only-one-dedicated-central

器件型号:CC2340R5
主题中讨论的其他器件: SysConfig

工具与软件:

配置为外设的 CC2340R5只需将其连接到一个专用中央设备(我当前使用 Android 手机作为中央设备)。

我正在探索防止 CC2340R5连接到其他中央设备的方法。

找到几个选项(不确定哪一个是最好的):

  1. 直接广播-尝试配置 CC2340R5 syscfg 以直接广播并设置我的 Android bdaddr。  
    结果:CC2340R5在 Android 手机扫描阶段不可见。
  2. 白名单-无法找到合适的示例(不同的芯片、具有不同 API 的旧栈、找到的示例适用于集中器而不是外设)。
  3. 接受列表-找不到合适的示例。 (HCI API 文档建议我们可以从接受列表中添加移除项)。


    如果有用、当前的 CC2340R5使用公共广播模式。 绑定功能是"无显示、无输入设备"。


     以上哪种解决方案可能符合我们的要求?
    如果可能、请分享指向相关实现/syscfg 配置示例的链接。

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

    您好!

    可以在 SysConfig 中使用接受列表本地化"Advertisement Parameters"下的"Filter Policy"

    可以使用 HCI_LE_AddAcceptListCmd  命令将设备地址添加到接受列表。

    我希望这对您有所帮助、
    Tanguy

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

    您好!

    仍然无法正常工作。
    我还反转了 BLE 地址的字节顺序。

    使用堆栈版本:f3 74_40_00_64

    谢谢!
    Oren

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

    您好、Oren、

    希望你们做得好。 感谢您的观看。 我相信您的中央设备是智能手机。 默认情况下、智能手机使用 RPA 地址模式、每隔几秒更改一次广播地址、这可能是我们无法接受广播的原因。

    您是否具备第二个 LaunchPad? 作为快速测试、我想执行相同的过程、但这次中心器件是另一个 CC2340R5器件。

    此致、

    1月

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

    您好、Jan:

    感谢您提供信息。 我创建了一个设置、其中另一个 CC2340R5作为中央器件、
    使用"Simple ble project"并将 central 的 syscfg 配置为公有地址模式。
    在外设侧、我更改了 syscfg 广播参数:

    更新 对等地址  从 aa:aa:aa:aa:aa:aa 到 central 的 BLE 地址。
    更新标志  旧事件属性选项  最终目的  可连接定向。

    在使用该设置的情况下、直接广播将正常运行。

    尚未通过此设置测试 HCI 命令。

    关于闪存:
    我需要将地址保存在专用区域的内部闪存中。
    如何为用户数据创建专用闪存区域?  
    我曾尝试使用在0x7c000处写入和读取的 NVS 示例。
    这个示例可行、但是 这些值稍后会被其他代码覆盖。
    我猜是 osal_nv 函数。
    是否可以将闪存分成几个预定义区域?
    一个用于 OSAL_NV、另一个用于用户数据?

    谢谢!
    Oren

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

    您好、Oren、

    很高兴看到它现在在你身边工作! 您应该能够在运行时使用 NVS 来存储任何感兴趣的数据。 在 BLE 示例中、已经定义了一个用于绑定信息的 NVS 区域。 此区域不能用于用户数据。 您必须通过 SysConfig 定义一个额外区域并将数据放在该区域中。 NVSinternal 示例应是有用的参考。

    此致、

    1月

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

    您好 Jan:

    谢谢!

    关于 NVS:
    我使用另一个大小为一个扇区0x800的 NVS 区域创建、该区域的地址低于已定义区域(即用于绑定信息的 NVS)。 它似乎起作用。

    最后一件事:
    我将添加看门狗计时器(WDT)。

    放置在空闲挂钩函数中的 Watchdog_clear()。
    上电时、它似乎至少进入一次、但随后会停止、WDT 到期并触发复位。
    此行为会持续循环下去。
    WDT 设置为相对较长的时间20秒。  

    1/ TI CC2340R5 + BLE 堆栈 F3 7.40.00.64 + FreeRTOS +低功耗设计的最佳 WDT 实践是什么? 建议在何处放置清晰的看门狗功能?
     
    2/对于 CC2340R5 - WDT 是否会在睡眠/低功耗模式/待机策略期间继续运行?
    (似乎有些芯片 WDT 时钟会停止、有些芯片仍然有效)。

    我怀疑上电后有两个选项可以解释我们看到的内容:
    2.1空闲任务耗尽->无 WDT 清除->触发了 RESET。
    2.2进入睡眠-> WDT 在睡眠/低功耗期间保持运行->触发复位。
     
    此致、
    Oren

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

    您好、Oren、

    看门狗应该能够在待机模式下运行。 应该可以向空闲循环中添加看门狗刷新、但根据您的应用、在其他地方添加看门狗刷新也是合理的。 最佳位置将取决于您的应用。 如表8-3功率模板所述、WDT 可以在工作、空闲和待机模式下运行:

    我认为、要让 WDT 在待机模式下运行、必须这样进行配置。

    我还建议参考 SDK 中包括的看门狗示例、因为这里显示了如何在应用中使用看门狗。

    此致、

    1月

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

    您好、Jan:

    谢谢!

    1/
    关于 TI 示例:它非常基本、由一个主线程构建、一个循环带有 watchdog_clear()。
    我想是否存在看门狗示例+ TI FreeRTOS 示例?

    2/
    我们使用 FreeRTOS +低功耗睡眠配置。 (例如、当操作系统没有任何操作时、它会进入睡眠状态)、因此没有空闲循环。
     
    3/
    此外、由于看门狗会在 CC2340R5处于待机模式时运行、并且我们直到用户按下按钮才会唤醒、  
    是否也可以在待机模式期间配置看门狗睡眠、并在器件唤醒后重新运行看门狗睡眠?

    4/
    BLE 堆栈如何防止自身挂起?
    BLE 堆栈是否有某种挂钩或专用位置来放置 Watchdog Clear()?

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

    您好!

    1/
    关于 TI 示例:它非常基本、由一个主线程构建、一个循环带有 watchdog_clear()。
    我想知道是否存在看门狗示例+ TI FreeRTOS 示例?[/QUOT]

    目前、这是已实现看门狗的唯一示例。 但是、您可以通过使用看门狗示例作为参考、将看门狗添加到 SDK 中的任何其他示例中。

    [报价 userid="601292" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1371396/cc2340r5-limit-peripheral-to-connect-to-only-one-dedicated-central/5289469 #5289469"]我们使用的是 FreeRTOS +低功耗睡眠配置。 (例如、当操作系统没有任何操作时、它将进入休眠状态)、因此没有空闲循环。

    理解,如果项目永远不会进入空闲循环,那么你需要添加一个周期性任务或一些逻辑,调用 WATCHDOG_CLEAR()函数在程序执行期间,以避免重置设备。

    此外、由于看门狗在 CC2340R5处于待机模式时运行、而且我们直到用户按下按钮才唤醒、  
    是否也可以在待机模式下配置看门狗睡眠并在器件唤醒时重新运行看门狗睡眠?[/QUOT]

    您可以利用电源驱动程序中的电源通知功能。 这可用作器件更改电源状态时的回调/通知。 有关这方面的信息可在以下位置找到: https://dev.ti.com/tirex/content/simplelink_lowpower_f3_sdk_8_10_01_02/docs/drivers/doxygen/html/_power_8h.html

    BLE 堆栈如何防止自身挂起?
    BLE 堆栈是否有某种挂钩或专用位置来放置 Watchdog Clear ()?[/QUOT]

    我不认为 BLE5-Stack 线程会自动自行清除看门狗。 应添加单独的任务、逻辑或周期事件以清除看门狗(如果使用看门狗)。 BLE5-Stack 确实可以针对问题提供一些保护、以确保能够继续运行(例如、如果排队的可处理数据包过多、则 API 函数将返回 blePending、直到队列清除而非挂起)。 但是、如果发生严重问题、BLE5-Stack 预计会在 ICall_abort 中挂起。

    此致、

    1月

    [/quote]