首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为堆/堆栈的STM32F4 FSMC/FMC会导致随机的硬故障。

作为堆/堆栈的STM32F4 FSMC/FMC会导致随机的硬故障。
EN

Stack Overflow用户
提问于 2018-12-05 15:37:11
回答 2查看 2.1K关注 0票数 2

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

问题

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

进一步详细信息

  • SRAM使用FMC银行1和SRAM银行1上的FMC/FSMC外围设备连接,因此内存映射为地址0x60000000。
  • GPIO引脚和FMC配置的所有设置都是在main()执行或创建静态对象之前从启动文件中设置的。
  • SRAM如下所示:CY7C1041GN30
  • 我们将所有16个数据引脚、所有18个地址引脚、BHE、BLE、OE、我们和CE连接到控制器上。所有引脚配置为推拉交替功能,拉起,AF_12 (FMC),非常高速.我们为所有必要的引脚启用时钟,为FMC启用时钟。注意:一开始我们并没有表现出相同的症状。
  • 控制器的时钟速度为168 MHz。
  • 如前所述,内存测试成功运行。
  • 我们使用DMA进行SPI、I2C和ADC数据传输。
  • 我们经常使用中断,包括外部(引脚)中断。
  • 我们使用以下计时设置:
    • AddressSetupTime: 2
    • AddressHoldTime: 4
    • DataSetupTime: 4
    • BusTurnAroundDuration: 1
    • CLKDivision: 2
    • DataLatency: 2

  • 我们将FMC配置为:
    • NSBank FMC_NORSRAM_BANK1
    • DataAddressMux FMC_DATA_ADDRESS_MUX_DISABLE
    • MemoryType FMC_MEMORY_TYPE_SRAM
    • MemoryDataWidth FMC_NORSRAM_MEM_BUS_WIDTH_16
    • BurstAccessMode FMC_BURST_ACCESS_MODE_DISABLE
    • WaitSignalPolarity FMC_WAIT_SIGNAL_POLARITY_LOW
    • WrapMode FMC_WRAP_MODE_DISABLE
    • WaitSignalActive FMC_WAIT_TIMING_BEFORE_WS
    • WriteOperation FMC_WRITE_OPERATION_ENABLE
    • WaitSignal FMC_WAIT_SIGNAL_DISABLE
    • ExtendedMode FMC_EXTENDED_MODE_DISABLE
    • AsynchronousWait FMC_ASYNCHRONOUS_WAIT_DISABLE
    • WriteBurst FMC_WRITE_BURST_DISABLE
    • ContinuousClock FMC_CONTINUOUS_CLOCK_SYNC_ASYNC
    • WriteFifo 0,
    • PageSize %0

关于类似问题的发现

  • 这个问题听起来非常类似于这个errata片条目:"2.3.4损坏从FMC读取的数据“,但是它也表示在我们修改控制器(3)时错误是固定的。

我希望外面的人以前见过这种奇怪的行为,并能帮助我们。经过一个多星期的调试,当CPU访问SRAM时,当中断/DMA访问发生时,我们预计控制器中会出现某种错误(当我们将它用作堆时,会频繁地访问它)。希望你能对这个话题有所了解。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-14 16:51:16

抱歉,没给你回电话,互联网。

是的,我们发现了问题所在(至少在我们的情况下是这样)。问题是,我们使用的J-Link调试器如果挂在我们pcb上的电力电子设备(它是垂直安装的)上,就会产生问题。如果我们引导丝带电缆在顶部(只有数字电子学),误差消失。因此,我们的猜测是,一些来自电子设备的噪音被电缆捕获并直接注入到JTAG端口,从而导致了MCU内部的故障。

票数 1
EN

Stack Overflow用户

发布于 2019-11-13 15:38:45

刚刚从ST得到确认,如果禁用了写fifo,那么STM32F469 FMC中有一个错误可能会导致不正确的值。解决办法是启用fifo。这与F7处理器单张/dm00145382.pdf中的问题相同。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53635776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档