随着自动电子控制系统扩展到许多不同的应用,其可靠性和安全性的要求成为系统设计中的重要因素。家用电器IEC60730安全标准的提出要求制造商设计确保产品安全可靠运行的自动电子控制装置。为此,瑞萨提供以IEC60730合规性为基础开发的示例软件,其也可以在任何系统中用作瑞萨MCU的自检测试。所提供的软件例程将在复位后和程序执行期间使用,用户可以灵活地将这些例程集成到整个系统的设计中。
自检程序主要包括以下这些测试内容:
1CPU测试
CPU测试以下寄存器:R0->R15、ISP、USP、INTB、PC、PSW、BPC、BPSW、FINTV、FPSW和ACC。
CPU测试分为多个函数,可单独执行;如若执行时间允许的话,可以使用单个函数依次运行所有测试。CPU测试按以下顺序执行:
1)测试通用寄存器R0到R15
有以下两种方式可以选择:
如果需要检测通用寄存器的耦合错误,则执行以下函数:
CPU_Test_GPRsCouplingPartA
CPU_Test_GPRsCouplingPartB
如果不需要检测通用寄存器的耦合错误,则执行以下函数:
CPU_Test_GeneralA
CPU_Test_GeneralB
2)测试控制寄存器ISP、USP、INTB、PSW、BPC、BPSW、FINTV和FPSW
执行以下函数:
CPU_Test_Control
3)测试ACC寄存器
执行以下函数:
CPU_Test_Accumulator
4)测试程序计数器(PC)寄存器
执行以下函数:
CPU_Test_PC
如果检测到错误,CPU测试将跳转到错误处理函数。
2RAM测试
March测试被公认为是测试RAM的有效方法。March测试由March元素的有限序列组成,而March元素是在继续到下一个单元之前应用于存储器阵列中的每个单元的有限操作序列。一般来说,算法包含的March元素越多,其故障覆盖率就越好,但代价是执行时间较慢。
1)March C
March C算法由6个元素组成,共10次操作。
I. 将全零写入数组
II.从最低地址开始,读0,写1,数组逐位递增
III. 从最低地址开始,读1,写0,数组逐位递增
IV. 从最高地址开始,读0,写1,数组逐位递减
V. 从最高地址开始,读1,写0,数组逐位递减
VI.从数组中读取全零
可检测到以下故障:
· 固定故障SAF
某个单元或行的值被固定,SA0固定为0,SA1固定为1
· 转换故障TF
某个单元或行无法从0变化为1或从1变化为0
· 耦合故障CF
对一个单元的写操作会更改第二个单元的内容
· 地址解码器故障AF
影响地址解码器的任何错误/对特定地址,不会访问任何单元/某个地址永远不会被访问/对特定地址,可以同时访问多个单元/某个单元可由多个地址访问
2)March X
March X算法由4个元素组成,共6次操作。
I. 将全零写入数组
II.从最低地址开始,读0,写1,数组逐位递增
III. 从最高地址开始,读1,写0,数组逐位递减
V. 从数组中读取全零
可检测到以下故障:
· 固定故障SAF
· 转换故障TF
· 翻转耦合故障CF(对一个单元的写操作会翻转第二个单元的内容)
· 地址解码器故障AF
3)March X (Word-Oriented Memory version)
March X (Word-Oriented Memory version) (WOM) 算法是根据March X算法分两步创建的。首先,标准March X从使用单个位数据模式转换为使用等于存储器访问宽度的数据模式。在此阶段,主要测试字间故障,包括地址解码器故障。第二阶段是添加另外两个March元素。第一个使用高/低位交替数据模式,第二个使用相反的数据模式。添加这些元素是为了检测字内耦合故障。
March X (WOM) 算法由6个元素组成,共10次操作。
I. 将全零写入数组
II.从最低地址开始,读0,写1,数组逐字递增
III. 从最高地址开始,读1,写0,数组逐字递减
IV. 从最低地址开始,读0,写h’AA,数组逐字递增
V. 从最高地址开始,读h’AA,写h’55,数组逐字递减
VI.从数组中读取所有h’55
由于算法的本身具有破坏性(它们不保留当前RAM值),但瑞萨所提供的测试函数提供了非破坏性选项,以便可以保留内存内容。这是通过在运行实际算法之前将内存复制到提供的缓冲区,然后在测试结束时再从缓冲区恢复内存来实现的。API包括一个用于自动测试缓冲区以及RAM测试区域的选项。而正在测试的RAM区域在测试期间是不能用于其他任何用途。这使得用于堆栈的RAM测试变得特别困难。为了解决这个问题,API包含了可用于测试堆栈的函数。
3ROM测试
ROM/Flash存储器测试使用CRC。CRC是一种故障/错误控制技术,生成单个字或者校验和来表示存储器的内容。
ROM测试可以通过为ROM内容生成CRC值并保存来实现。在内存自检期间,使用相同的CRC算法生成CRC值,并将其与保存的CRC值进行比较。该技术可识别一位错误和高比例的多位错误。
瑞萨电子工具链自动将CRC插入ROM,该值可以直接与计算值进行比较。例如,RX62T包含一个CRC模块,该模块支持CRC16-CCITT。使用该软件驱动CRC模块会生成以下16位CRC16-CCITT:
· 多项式 = 0x1021(x16 + x12 + x5 + 1)
· 宽度 = 16位
· 初始值 = 0xFFFF
· 对输出CRC执行与h’FFFF的异或
由于ROM测试是需要与参考CRC值进行比较,可以用瑞萨RX标准工具链来计算CRC值并在用户指定的位置将其添加到构建的mot文件中,其设置的方法如下图1所示。
图1 添加参考CRC
4Watchdog测试
看门狗用来检测程序执行的异常。如果程序没有按预期运行,软件将不会按要求刷新看门狗,因此会检测到错误。如果看门狗超时,会产生内部复位。测试程序中提供一个在复位后使用的函数来确定看门狗是否导致了复位。
自检测试可以分成上电检测和周期检测。上电检测是重启后只运行一次的测试。周期测试是在正常程序执行过程中定期运行的测试。如何安排周期测试具体取决于客户的应用程序的结构。
以下是以RX62T为例加入自检程序的示例。上电检测的流程图如图2所示,上电后顺序检测CPU、RAM、ROM和IWDT。周期检测的流程图如图3所示,周期执行CPU检测、RAM缓冲区检测、剩余RAM区域测检测、堆栈Stack检测和CRC检测。如需进一步了解自检程序,可通过下方网址或二维码进入瑞萨官网下载例程。
IEC60730 Self Test Code for RX62T Group MCU - Sample Code(需注册/登陆瑞萨电子官网)
图2 上电检测流程图
图3 周期检测流程图
全部0条评论
快来发表一下你的评论吧 !