IEC 60730-1 H.2.19.7对 RAM 和 CPU 要求,除通用的March C 和March X 测试方法外,还有一种测试方法,如walkpat。基本原理(32bit 4byte )
对该地址写入0x00000001,再读取出来,与数据0x00000001,做对比,如果不相等代表内存故障,进入报警模式。
对该地址写入0x00000002,再读取出来,与数据0x00000002,做对比,如果不相等代表内存故障,进入报警模式。
对该地址写入0x00000004,再读取出来,与数据0x00000004,做对比,如果不相等代表内存故障,进入报警模式。
......
对每一位单独写1后,再读取判断,全部完成后,再反过来进行判断,即
对该地址写入0xffffffff,再读取出来,与数据0xffffffff,做对比,如果不相等代表内存故障,进入报警模式。
对该地址写入0xfffffffe,再读取出来,与数据0xfffffffe,做对比,如果不相等代表内存故障,进入报警模式。
对该地址写入0xfffffffd,再读取出来,与数据0xfffffffd,做对比,如果不相等代表内存故障,进入报警模式。
每一个32位的内存需要处理
参考汇编代码如下:
/* r0 - used to set address. */
Walkpat_Test_Write:
// LDR R6,[R0]
Walkpat_Test_Write0:
LDR R2,=0x00000000
STR R2,[R0]
LDR R3,[R0]
CMP R2,R3
BEQ Walkpat_Read0
MOVS R7, #ERROR_STATUS
BX LR
Walkpat_Read0:
LDR R2,=0x00000001
RAMLoopStart1:
STR R2,[R0]
LDR R3,[R0]
CMP R2,R3
BNE Walkpat_Test_FAIL
LSLS R2,R2,#1
CMP R2,#0
BNE RAMLoopStart1
LDR R2,=0xFFFFFFFF
STR R2,[R0]
LDR R3,[R0]
CMP R2,R3
BNE Walkpat_Test_FAIL
LDR R2,=0x00000001
RAMLoopStart2:
MVNS R3,R2
STR R3,[R0]
LDR R3,[R0]
MVNS R3,R3
CMP R2,R3
BNE Walkpat_Test_FAIL
LSLS R2,R2,#1
CMP R2,#0
BNE RAMLoopStart2
LDR R2,=0xFFFFFFFF
STR R2,[R0]
ADDS R0,R0,#4
CMP R0, R1
BLT Walkpat_Test_Write0
Walkpat_Test_OK:
MOVS R7, #OK_STATUS
BX LR
Walkpat_Test_FAIL:
MOVS R7, #ERROR_STATUS
BX LR
|