我们目前正在评估使用STM32F439BI微控制器在我们的平台上使用外部SRAM进行C/C++堆存储。
问题
使用SRAM作为堆的存储将导致随机的硬故障,这是由总线错误/imprecice总线错误引起的。在不将堆放置在SRAM的情况下,内存测试在整个SRAM上成功运行(8位/16位和32位访问)。连接调试器时,我可以在发生硬故障之前观察到这些错误。最常见的情况是从SRAM读取一个单词,CPU寄存器填充以下格式的地址: 0x-1F3-1F3 (-通常是'0',有时是'A‘或'6')。模式'1F3‘仍然存在。如果再次读取相同的地址,则在正确的值下面再读几行( 0x60000000空格中的其他地址)。如果我在程序的早期某个断点停止程序并执行几行,我会更频繁地得到这些错误。
进一步详细信息
关于类似问题的发现
我希望外面的人以前见过这种奇怪的行为,并能帮助我们。经过一个多星期的调试,当CPU访问SRAM时,当中断/DMA访问发生时,我们预计控制器中会出现某种错误(当我们将它用作堆时,会频繁地访问它)。希望你能对这个话题有所了解。
发布于 2019-11-14 16:51:16
抱歉,没给你回电话,互联网。
是的,我们发现了问题所在(至少在我们的情况下是这样)。问题是,我们使用的J-Link调试器如果挂在我们pcb上的电力电子设备(它是垂直安装的)上,就会产生问题。如果我们引导丝带电缆在顶部(只有数字电子学),误差消失。因此,我们的猜测是,一些来自电子设备的噪音被电缆捕获并直接注入到JTAG端口,从而导致了MCU内部的故障。
发布于 2019-11-13 15:38:45
刚刚从ST得到确认,如果禁用了写fifo,那么STM32F469 FMC中有一个错误可能会导致不正确的值。解决办法是启用fifo。这与F7处理器单张/dm00145382.pdf中的问题相同。
https://stackoverflow.com/questions/53635776
复制相似问题