SRAM ECC功能以及应用中的注意事项

发布者:智慧启迪最新更新时间:2024-05-07 来源: elecfans关键字:SRAM  MCU 手机看文章 扫描二维码
随时随地手机看文章

现代电子系统中,由于“软”错误引起的系统故障比永久性硬件失效引起的系统故障要更多。“软”错误是指可以恢复的故障或者失效。这一类错误容易发生在寄存器,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单元,如下图所示。

a2250f42-fb94-11eb-9bcf-12bb97331649.png

关于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对应的寄存器组。

a530b858-fb94-11eb-9bcf-12bb97331649.png

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了解更多的细节。

关键字:SRAM  MCU 引用地址:SRAM ECC功能以及应用中的注意事项

上一篇:操作BASEPRI特殊功能寄存器时无效解决方法(上)
下一篇:CH340G设计的一键下载电路原理解析

推荐阅读最新更新时间:2024-11-06 16:43

东芝推出用于智能电表电能计算和通信的单片微控制器
东京—东芝公司(TOKYO:6502)面向智能电表推出一款新的单片微控制器“TMPM411F20XBG”,成为其基于ARM® Cortex®-M4F核的微控制器TX04系列阵容的最新成员。样品出货即日启动。 典型的智能电表控制器包括1个测量电流和电压的电能计算装置、1个收发外部设备数据的通信控制装置,以及1个将信息输出至显示器的显示装置。 新产品整合了2个Cortex®-M4F核,从而可在单个芯片上独立控制测量和通信装置,并减少板卡占用空间。 此外,还搭载了网络通信—AES、SHA和ESG—所需的安全功能。同时还部署了电源故障时的篡改检测和中断检测,功耗超低。 东芝一直致力于开发微控制器,以支持和推动全球电气公用设
[单片机]
51单片机-----------四向交通灯
一 实验目的: 实验4:运用AT89C51芯片实现四向交通灯: (1) 掌握C语言编程单片机控制程序的方法。 (2) 掌握使用Keil4软件编写、编译、调试程序的方法。 (3) 掌握使用Proteus软件绘制电路原理图、硬件仿真和程序调试。 (4) 理解和掌握共阴极数码管的显示原理和编码(记忆)。 (5) 熟悉使用51单片机I/O端口实现对外部用电器和电路的控制。 二、实验硬件和软件: 计算机1台、并安装Proteus8.6软件和Keil4软件。 Proteus8.6中会运用的部件:7SEG-MPX2-CC、AT89C51、BUTTON、LED-GREENREDYELLOW、RESPACK-8d 三、试验任务: 1.
[单片机]
51<font color='red'>单片机</font>-----------四向交通灯
和FPGA说再见!TI全新MCU软件在工业系统中实现亚微秒级电流
  德州仪器 (TI)日前宣布推出DesignDRIVE快速电流环路(Fast Current Loop)软件,使C2000™ 微控制器(MCU)成为业界首款电流环路性能低于1微秒的器件。下面就随工业控制小编一起来了解一下相关内容吧。 TI的C2000™ MCU产品组合与DesignDRIVE软件共同提供了片上系统(SOC)功能,并简化了驱动控制系统的开发。新型DesignDRIVE快速电流环路软件不仅在性能上优于传统基于MCU的电流环路解决方案,同时还能通过取消通常用于外部电流环路控制的现场可编程门阵列(FPGA)来简化设计。快速电流环路软件是C2000 controlSUITE™ 软件的免费更新版。如需了解更多信息,敬请访问
[工业控制]
MCU/SoC芯片出货量增长 纳思达预计上半年净利4- 5亿元
7月6日,纳思达发布上半年业绩预告称,公司预计2021年上半年实现归属于上市公司股东的净利润分别为4亿元-5亿元,同比增长11.45%-39.31%,上年同期盈利为3.59亿元。 关于业绩增长的主要原因,纳思达表示,在后疫情时代,公司积极把握市场机遇,对核心业务与产品进行针对性调整,重点布局新产品与市场,切实推进2021年既定的各业务模块经营计划落地。本报告期内,公司打印机业务硬件销量与收入企稳回升,芯片与通用打印耗材业务收入同比增长,其中,打印机主控芯片、通用MCU、物联网SoC安全芯片出货量增长趋势良好,通用打印耗材芯片与通用打印耗材销量去年同期因家用需求大幅增长,本期销量有所回落。 另外,本报告期内,纳思达预计公司所购买
[手机便携]
<font color='red'>MCU</font>/SoC芯片出货量增长 纳思达预计上半年净利4- 5亿元
单片机程序跑飞现象及解决--看门狗电路
1、程序跑飞现象 随着单片机在能源领域中的广泛应用,单片机的抗干扰问题越来越突出,煤矿井下环境一般比较恶劣,这便会为单片机控制系统带来各种干扰,以致系统不能正常工作。单片机应用系统的抗干扰性能主要取决于硬件的抗干扰设计,但软件抗干扰设计作为硬件抗干扰的完善和补充,作用也非常重要,因为大量的干扰通常并不能影响系统内硬件的运作,却常会使系统的软件无法正常运行,单片机应用的一个突出问题,便是单片机运行过程中经常出现的程序跑飞现象。 在单片机系统中,因为干扰的原因,在非预期的情况下,使得程序计数器PC 的值发生随机的变化,从而使得程序的流向指向不确定区域,这便是程序的跑飞。程序跑飞后或者会使指令的地址码和操作码发生改变,PC 把操作数当作
[单片机]
<font color='red'>单片机</font>程序跑飞现象及解决--看门狗电路
单片机程序的无限循环问题
有如下单片机程序,功能是通过串行口向外发送字符0、1、2、3、4、5、6、7、8、9,波特率:9600,无校验位,8位数据位,1位停止位。 #include reg52.h void Send(char signal) //数据发送函数 { SBUF=signal; while(TI==0); TI=0; } void main(void) //主函数 { int i; char a ={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //字符表 TMOD=0x
[单片机]
51单片机串口收发字符串源程序
想要通过串口控制led,但是串口每次中断只能发送一个字符,这样在控制的时候不太容易清楚各个命令是控制哪一部分,所以参考网上的资料,写了个简单的字符串收发函数。本程序的功能是:电脑串口助手发送数据给单片机,单片机接收后返回给电脑,在发送的时候,需要空两格再输入想要传送的内容,不然的话传输的数据会丢失,因为这个情况不影响串口控制LED,所以就没管了。 单片机源程序如下: #include reg52.h typedef unsigned char uchar; typedef unsigned int uint; sbit led=P2^0; void Usart_Init() { TMOD=0X20; PCON=0X80; S
[单片机]
51<font color='red'>单片机</font>串口收发字符串源程序
单片机P0口用作通用I/O口输出数据时应注意什么?
P0口用作通用I/O口输出数据时应注意什么? 答: P0口与其它端口不同,它的输出级无上拉电阻。当把它用作通用I/O口时,输出级是开漏电路,故用其输出去驱动NMOS输入时外接上拉电阻,这时每一位输出可以驱动4个LS型TTL负载。用作输入时,应先向端口锁存器写1。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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