工程师笔记 | STM32H7 RAMECC功能及应用

发布者:guqian999最新更新时间:2023-02-06 来源: zhihu关键字:STM32H7  系统故障 手机看文章 扫描二维码
随时随地手机看文章

概览

现代电子系统中,由于“软”错误引起的系统故障比永久性硬件失效引起的系统故障要更多。“软”错误是指可以恢复的故障或者失效。这一类错误容易发生在寄存器,RAM等上面,由于受到电磁干扰或者封装材料中的α粒子,宇宙射线等的影响而造成位值翻转。针对这个问题,可以在硬件上加奇偶校验,ECC电路来进行检测。


STM32H7系列MCU的Flash,SRAM和CACHE都支持ECC的功能。在本文中,主要介绍SRAM ECC这部分功能以及应用中的注意事项。


RAMECC外设

在STM32H7系列MCU中,有一个叫RAMECC的外设,它是一个RAM ECC Monitor。RAMECC提供了一个接口给应用程序来检测当前RAM的ECC状态,以及当发生ECC错误后执行相应的恢复或者报错程序。


STM32H7的RAM ECC支持纠正单比特的错误和检测双比特的错误。对于AXI SRAM和TCM RAM,每64位数据附加8位ECC码;其他的32位总线的SRAM,每32位数据附加7位ECC码。


在对SRAM进行写操作的时候,硬件自动计算并保存ECC的值,在对SRAM进行读操作或者非对齐的写操作(读-改-写)的时候会自动进行校验,并且出错的地址和数据可以通过寄存器读出。


STM32H7的RAM ECC功能的实现可以分成两个部分:RAM ECC Controller和RAM ECC Monitor单元,如下图所示。

  • 关于ECC Controller

STM32H7的SRAM分成AXI SRAM,SRAM1,SRAM2,SRAM3,SRAM4,数据TCM RAM,指令TCM RAM和备份SRAM等几块。每个RAM块分别对应一个ECC Controller。


ECC Controller始终处于使能状态。它负责ECC代码的计算存储,比较和错误检测,可以完成单比特错误纠正和双比特错误检测的功能。


关于ECC Monitor

STM32H7一共有三个ECC Monitor,各负责一个域。ECC Monitor接收来自ECC Controller的诊断事件,并根据寄存器的配置产生对应的中断信号。


ECC Controller与ECC Monitor之间的映射关系见下图。例如D1的RAMECC Monitor单元,一共有5个通道,每个通道对应一个SRAM块的ECC controller。每个通道都有自己的一组寄存器,图中的Address offset就是寄存器组的偏移地址。如果要打开AXI SRAM的ECC Monitor单元,使得当检测到AXI SRAM的ECC错误时产生对应的中断,就需要操作AXI SRAM对应的寄存器组。


  • FAR和FDR寄存器

RAMECC支持单比特ECC错误中断,双比特ECC错误中断和非对齐写操作(Byte Write)引起的ECC中断。在RAMECC的IER和CR寄存器中可以分别配置和使能这些中断。在SR寄存器中可以查看这些中断的状态。这几个寄存器的操作都一目了然,这里想说明的是另外两个寄存器:出错地址寄存器FAR和出错数据寄存器FDR。


使能了CR寄存器里的ECCELEN位后,当ECC错误(单比特/双比特错误)发生后,出错的地址和数据就会被锁定到FAR和FDR寄存器里。


FAR寄存器里保存的是相对地址。实际出错地址的计算公式如下:

实际的出错地址= SRAM的起始地址 + FAR寄存器的值 * N(N=4或者8)。


FDR寄存器有两个,对于64位总线的SRAM数据,FDRL寄存器保存低4字节的数据,FDRH保存高4字节的数据。对于32位总线的SRAM数据,数据保存在FDRL寄存器中,FDRH的值为0。


我们可以看下面两个例子:


例子1:使能AXI-SRAM对应的Monitor功能(如何使能请参考STM32H7CUBE库中的RAMECC_ErrorCount例程)。上电后AXI-SRAM先不初始化,然后直接进行读操作就会触发ECC错误。这时候我们在调试状态下查看FAR和FDR的值,见下图。

这里因为AXI-SRAM是64位总线接口,所以计算实际出错地址时,N的值是8。

例子2:使能SRAM1(0X30000000)对应的Monitor功能。上电后不进行初始,然后直接进行读操作就会触发ECC错误。这时候我们在调试状态下查看FAR和FDR的值,如下图。


因为SRAM1是32位总线接口,所以这时N的值是4。


在应用中如何正确使用RAM ECC

在使用支持ECC的RAM时,一定要注意的是要对RAM进行初始化,否则就可能会报ECC错误。就像我们在上一节的实验中做的那样,通过不初始化的做法,我们可以模拟出ECC错误。在AN5342中给出了建议的初始化步骤。


对于单比特的ECC错误可以在读出的过程中自动纠正,但仅仅只是读出的数据是正确的,为了防止错误累积,导致从单比特的错误变成双比特的错误,可以在检测到单比特错误后,将正确的值写回到SRAM中去。这里有两种方式,一种如果原本SRAM中保存的值在Flash有备份,那么直接将Flash中的值再次写到SRAM中去;或者利用前面提到的FAR和FDR寄存器将正确的值写回SRAM中。


通过周期性的ECC检测来主动发现SRAM的故障也是提高系统可靠性的方法。ECC检测可以通过读SRAM的值来进行。检测不需要一次性完成,可以在系统空闲时,分段的对SRAM进行检测。请参考AN5342了解更多的细节。

关键字:STM32H7  系统故障 引用地址:工程师笔记 | STM32H7 RAMECC功能及应用

上一篇:Crypto算法库使用技巧 —— 基于STM32 AES GCM应用提示
下一篇:工程师笔记 | STM32内置硬件功能安全属性

推荐阅读最新更新时间:2024-11-12 18:36

智能停车场系统故障维护常识
  智能停车场系统可以实现对车辆进出的有效管理,解决车辆乱停乱放的问题,有利于交通疏导,杜绝票款流失,确保停车场收费的可靠性以及稳定性,节省车主的大量时间、人力和财力,使停车场收费管理进入智能化的水平,向用户提供一个安全、高效舒适、便利的停车环境。   在停车场系统安装中我们要注意的技巧很多。同时在使用的时候如果方法不当,设备也会容易出现故障。所以我们在智能停车场管理系统安装上和使用上注意到位,可以延智能停车场系统使用寿命,不容易坏。解决停车场系统容易出现的故障及维护办法:   1、通讯不通   ①原因:485通讯线路断路、短路或接错;(较常见)   处理方法:检查通讯线路,检查接线,确认通讯线路无断路、短路或接错得情况。
[嵌入式]
意法半导体推出550 MHz的STM32H7系列新品
意法半导体日前推出STM32H723、STM32H733、STM32H725、STM32H735和STM32H730系列产品。第一个运行在550 MHz的STM32H7系列,也是首款集成了5M采样率的12位模数转换器。第一个拥有64kb的一级缓存(数据和指令分别为32kb)。尽管性能有了显著的提升,但尺寸仍然很小。新产品的CoreMark评分可达2778,或1177 DMIPS。然而,由于拥有高达1MB的闪存和564KB的RAM,它们的内存配置处于产品组合的中间位置。原因是,新的STM32H7s的目标是工业自动化,在控制的芯片面积的情况下拥有更高性能。 支持图形处理 正如我们所料,图形用户界面的兴起标志着新十年的开始。工业
[单片机]
意法半导体推出550 MHz的<font color='red'>STM32H7</font>系列新品
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved