STM32F4 FSMC/FMC SRAM as Heap/Stack 导致随机硬故障

STM32F4 FSMC/FMC SRAM as Heap/Stack results in random hardfaults

我们目前正在评估使用 STM32F439BI 微控制器在我们的平台上使用外部 SRAM C/C++ 堆存储。

问题

使用 SRAM 作为堆存储会导致 buserrors/imprecice 总线错误引发的随机硬故障。 在不将堆放在 SRAM 上的情况下,内存测试 运行 在整个 SRAM 上成功(8 bit/16 位和 32 位访问)。 连接调试器 我有时可以在硬故障发生之前观察到这些错误。大多数情况下,从 SRAM 中读取一个字并且 CPU 寄存器填充以下格式的地址:0x-1F3-1F3(- 通常为“0”,有时为 'A' 或“6”) . “1F3”模式仍然存在。如果再次读取相同的地址,则再向下读取一些行会读取正确的值(0x60000000 space 中的其他地址)。 如果我在程序早期的某个断点处停止程序并执行几行,我会更频繁地遇到这些错误。

更多详情

类似问题的发现

我希望有人以前见过这种奇怪的行为并且可以帮助我们。经过一个多星期的调试,当 interrupts/DMA 访问发生而 CPU 访问 SRAM(当我们将其用作堆时,访问非常频繁)时,我们预计控制器会出现某种错误。希望您能阐明这个话题。

刚从 ST 得到确认,STM32F469 FMC 中存在一个错误,如果禁用写入 fifo,可能会导致错误的值。解决方法是启用 fifo。这与此 F7 处理器 https://www.st.com/resource/en/errata_sheet/dm00145382.pdf

中的问题相同

抱歉没有回复你,互联网。

是的,我们发现了问题所在(至少在我们的案例中)。问题是,如果我们使用的 J-Link 调试器悬挂在我们 pcb 上的电力电子设备上方(它是垂直安装的),则会引起问题。如果我们将带状电缆从顶部引出(仅限数字电子设备),错误就会消失。所以我们的猜测是,来自电子设备的一些噪声被电缆捕获并直接注入 JTAG 端口,导致 MCU 内部出现故障。