背景
我们围绕 CC1352P7构建了一个定制模块、该模块具有+14dBm 900MHz 专有射频和+20dBm BLE、使用 DMM 来实现时间片。
(我们创建了 LP_CC1352P7-2配置、请参阅此处: CC1352P7:如何修改 CC1352P7-1开发套件 CCS syscfg、以将 PA 操作切换到(BLE) 2.4频段、而不是 Sub-GHz 频段? -蓝牙论坛- Bluetooth︎ 支持- TI E2E 支持论坛)
我们主要使用6.10.00.29 SDK、但我们尝试过6.41.00.17 SDK 却具有相同的结果。
我们从 Simple Peripheral 项目导出了应用。
我们有一个 Ellisys BLE 嗅探器。
我们打开了异常处理程序、堆栈检查和堆监控器。
我们没有看到任何指示堆栈已熔断或堆损坏的指示器。
问题来了
我们有10多个电路板、可运行我们的应用固件几天。
移动应用会定期进行 BLE 连接(每隔10s)、持续时间为0.5-1.5秒。
固件 一次仅允许连接1个 BLE。
至少1-3个电路板将进入停止发送 BLE 广播的状态、但固件的所有其他功能继续正常运行、包括能够在 Sub-GHz 网络上进行 TX/RX。
我们的应用代码会调用 GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS _USE_MAX_EVENTS、1);每300ms 调用一次。 即使返回成功、也不会发送广告。
我们一直无法在 TI 开发套件上重现、尽管开发套件缺少我们电路板上的某些硬件。
我们无法 通过提高 BLE 或 900MHz 接口的传输速率来更频繁地出现此问题。
BLE 在建立连接后始终停止工作。 GAP_LINK_ENTERMIND_EVENT 绝不会发出信号。
我们已经通过多次实验将问题与自定义应用固件隔离、但即使是基本应用也会出现问题。
问题
哪些已知触发器可以导致 BLE 接口以这种方式停止广播?
是否可以通过提取 BLE 堆栈的状态(寄存器/API 调用)来帮助确定其可能被卡住的方式?
是否有办法在不复位整个微处理器的情况下对 BLE 堆栈进行软复位?