您好!
我们在调试 CC2564MODN 和 运行 BTPS 4.0.2.2的 STM32L476RG 的硬故障错误时遇到困难。 CC2564MODN 和 STM32L476RG 通过 UART 进行通信。
详细信息:
- 器件芯片组:4.1
- BTPS 版本:4.0.2.2
- 项目类型:6.
- 固件版本:7.35
我们有一个 EMC 认证软件、可在具有 BLED112软件狗的 PC 上运行。 该软件狗 通过 BLE 连接到 CC2564、并发送串行命令(基于 SPPLE 演示)以创建流量、 而 CC2564 会尽快(16ms)发送有关另一标准服务的通知。 在这些条件下进行大约1h 的测试后、STM32L476RG 会陷入硬件故障、而调用栈会指示它正在 Bluetopia 回调中运行、我们没有蓝牙回调的源。 我们更频繁地看到来自两侧的高 BT 流量和 BT 流量的硬故障。
调用栈指示它发生在 HCITR_COMDataCallback_UART 中、根据 汇编和寄存器的值、它发生在调用 HCILL_ReceiveBytes 之前。 STM32的寄存器 R6始终包含一个 RAM 地址(0x20001800)、该地址位于映射文件中映射的值之外(STM32的堆栈和堆之外以及 Bluetopia 的堆之外)、而 R4和 R5始终指向 Bluetopia 堆中的相同地址。 很难提取任何信息、因为我们不知道 HCITR_COMDataCallback_UART 和 HCILL_ReceiveBytes 的作用是什么、它是随机发生的(不使用任何特定的 BLE 命令)。
正如其他文章中建议的那样、我们增加了堆大小(Bluetopia 的堆= BTPS_MEMORY_buffer_size)、并且仍然发生错误。 我试图减小堆大小、只是为了查看它是否会使它变得更快、但实际上并没有。
我们将 STM32的堆栈大小增加到 BTPS 内核中定义的最大堆栈大小(在我们的情况下、堆栈大小从0x800增加到0x8000 = BTPS_configuration_PAN_disping_thread_stack_size)。 硬故障依然发生,地方也一样。
堆栈应该有多大? 硬件故障似乎是由 HCITR_COMDataCallback_UART 期间以及 HCILL_ReceiveBytes...之前的错误 RAM 地址引起的。 这两者之间在 Bluetopia 中做了什么?
谢谢你
