参考:
Zynq EDAC Driver - Xilinx Wiki - Confluence
Zynq UltraScale+ MPSoC - 64-bit DDR access with ECC - Xilinx Wiki - Confluence
这几个参考文档已经说的很清楚了
1.硬件
硬件上ps_ddr_dq[0:63]正常接ddr,ps_ddr_dq[64:71]接的ddr专门用于保存ecc校验值。
2.软件
在ps中开启ecc
在petalinux中使用能ecc驱动,并使能ecc测试
3.验证
3.1可纠正错误
// 使能可纠正错误测试
echo "CE" > /sys/devices/system/edac/mc/mc0/inject_data_poison
// 设置要注入错误的物理地址
echo 0xC0000000 > /sys/devices/system/edac/mc/mc0/inject_data_error
// 读要测试的地址中的数据,物理地址0xC0000000映射到系统的地址是0x840000000
devmem 0x840000000
// 向测试的地址写数据,写的时候同时会注入错误
devmem 0x840000000 32 0x12345
// 读数据,可以看到读出的和写入的是一样的,表明错误被纠正
devmem 0x840000000
// 查看发生了多少次可纠正错误
cat /sys/devices/system/edac/mc/mc0/ce_count
// 查看出错中断的次数
cat /proc/interrupts | grep fd070000.memory-controller
3.2不可纠正错误
// 使能不可纠正错误测试
echo "UE" > /sys/devices/system/edac/mc/mc0/inject_data_poison
// 设置要注入错误的物理地址
echo 0xC0000000 > /sys/devices/system/edac/mc/mc0/inject_data_error
// 读要测试的地址中的数据,物理地址0xC0000000映射到系统的地址是0x840000000
devmem 0x840000000
// 向测试的地址写数据,写的时候同时会注入错误
devmem 0x840000000 32 0x12345
// 读数据,可以看到读不出数据,表示校验不通过
devmem 0x840000000
// 查看发生了多少次不可纠正错误
cat /sys/devices/system/edac/mc/mc0/ue_count
// 查看出错中断的次数
cat /proc/interrupts | grep fd070000.memory-controller