xinpian101 发表于 2025-2-23 15:50

N76E003芯片的片上RAM和片外RAM进行安全性校验

1. 片上RAM校验
片上RAM的地址范围是 0x0000 到 0x00FF,共256字节。其中:

低128字节(0x0000 到 0x007F)可以直接寻址。

高128字节(0x0080 到 0x00FF)需要间接寻址。

前32字节(0x0000 到 0x001F)用于寄存器组,因此校验从第33字节(0x0020)开始。

for (i = 32; i < 256; i++) {
    DBYTE = 0xFF;// 将当前地址写入0xFF
    if (DBYTE != 0xFF) {// 读取并校验是否为0xFF
      // RAM Error
    }
    DBYTE = 0x00;// 将当前地址写入0x00
    if (DBYTE != 0x00) {// 读取并校验是否为0x00
      // RAM Error
    }
}
校验逻辑:
使用 DBYTE[] 宏(定义在 <absacc.h> 中)直接访问片上RAM。

对每个地址依次写入 0xFF 和 0x00,并读取校验。

如果读取的值与写入的值不一致,说明该地址的RAM存在故障。

注意事项:
前32字节(寄存器组)未校验,因为它们是特殊用途区域。

高128字节需要间接寻址,但代码中未体现这一点,可能需要额外处理。

2. 片外RAM校验
片外RAM的地址范围是 0x0000 到 0x02FF,共768字节。片外RAM通过 MOVX 指令访问,代码中使用 XBYTE[] 宏来操作。

代码分析:
for (i = 0; i < 768; i++) {
    XBYTE = 0xFF;// 将当前地址写入0xFF
    if (XBYTE != 0xFF) {// 读取并校验是否为0xFF
      // XRAM Error
    }
    XBYTE = 0x00;// 将当前地址写入0x00
    if (XBYTE != 0x00) {// 读取并校验是否为0x00
      // XRAM Error
    }
}
校验逻辑:
使用 XBYTE[] 宏(定义在 <absacc.h> 中)访问片外RAM。

对每个地址依次写入 0xFF 和 0x00,并读取校验。

如果读取的值与写入的值不一致,说明该地址的片外RAM存在故障。

注意事项:
片外RAM的地址范围是 0x0000 到 0x02FF,共768字节。

片外RAM的访问速度通常比片上RAM慢,校验时可能需要考虑时序问题。

3. 代码的改进建议
片上RAM的高128字节处理:

高128字节需要间接寻址,代码中未体现这一点。可以增加对高128字节的间接寻址支持。

错误处理:

当前代码在检测到错误时仅注释了 // RAM Error 或 // XRAM Error,建议增加具体的错误处理逻辑,例如记录错误地址或触发系统复位。

性能优化:

如果RAM较大,校验时间可能较长。可以考虑分段校验或使用更高效的算法。

寄存器组的保护:

校验片上RAM时,前32字节是寄存器组,直接操作可能影响系统状态。建议在操作前保存寄存器状态,操作后恢复。

片外RAM的时序问题:

片外RAM的访问可能涉及外部总线时序,建议在操作前确保总线配置正确。

4. 总结
这段代码实现了对N76E003芯片的片上RAM和片外RAM的基本校验,能够检测RAM的读写故障。然而,代码在以下方面可以进一步改进:

支持高128字节的间接寻址。

增加错误处理逻辑。

优化性能并保护寄存器组。

确保片外RAM的访问时序正确。

通过这些改进,可以提高代码的鲁棒性和实用性。

页: [1]
查看完整版本: N76E003芯片的片上RAM和片外RAM进行安全性校验