在linux下如何给DDR 从起始地址0x05877000到终止地址0x3ffff000循环写入0x55 0xAA后再从起始地址0x05877000开始读取刚才写入的数据到终止地址0x3ffff000读取完毕,然后比较写入和读取的数据是否相同,按照百分比显示写入读取的数据相同的数据占总数据比例是多少,然后输出计算出来的百分比,如果数据相同率达到100%则再输出PASE,小于100%则输出fail
时间: 2024-02-12 22:09:58 浏览: 131
这是一个比较复杂的问题,需要分步骤来回答,下面是具体操作:
1. 给DDR循环写入0x55 0xAA
可以使用dd命令来实现往DDR中写入数据,具体命令如下:
```
dd if=/dev/zero of=/dev/mem bs=1 count=1 seek=$((0x05877000)) conv=notrunc
```
该命令将/dev/zero中的数据写入DDR的起始地址0x05877000,bs表示每次写入的字节数,count表示写入的次数,seek表示偏移量,notrunc表示不截断文件,保留原有数据。
循环写入0x55 0xAA的命令如下:
```
dd if=/dev/zero bs=1 count=$((0x3ffff000-0x05877000+1)) | tr "\000" "\125" | tr "\001" "\252" | dd of=/dev/mem bs=1 seek=$((0x05877000)) conv=notrunc
```
该命令使用/dev/zero中的数据循环写入0x55 0xAA到DDR中,bs表示每次写入的字节数,count表示写入的次数,tr命令将0x00替换为0x55,将0x01替换为0xAA,dd命令将替换后的数据写入DDR中,seek表示偏移量,notrunc表示不截断文件,保留原有数据。
2. 从DDR中读取数据并比较
可以使用hexdump命令来读取DDR中的数据,具体命令如下:
```
hexdump -v -e '1/4 "%08x\n"' -s 0x05877000 -n $((0x3ffff000-0x05877000+1)) /dev/mem > data.txt
```
该命令将DDR中的数据读取到data.txt文件中,-v表示输出所有数据,-e表示指定格式,-s表示偏移量,-n表示读取的字节数。
读取数据后,可以写一个脚本来比较写入和读取的数据是否相同,并计算出相同数据的百分比,具体实现可以参考下面的代码:
```
#!/bin/bash
# 计算数据总长度
total_len=$((0x3ffff000-0x05877000+1))
# 读取写入的数据
dd if=/dev/mem bs=1 count=$total_len skip=$((0x05877000)) > write_data.bin
# 读取从DDR中读取的数据
hexdump -v -e '1/4 "%08x\n"' -s 0x05877000 -n $total_len /dev/mem > read_data.txt
# 计算相同数据的长度
diff_len=$(diff write_data.bin read_data.txt | grep "^<" | wc -c)
# 计算相同数据的百分比
percent=$(echo "scale=2; $diff_len/$total_len*100" | bc)
# 输出百分比
echo "相同数据占总数据的百分比:$percent%"
# 判断是否达到100%
if [ $(echo "$percent == 100" | bc) -eq 1 ]; then
echo "PASS"
else
echo "FAIL"
fi
```
以上脚本会将写入的数据和从DDR中读取的数据进行比较,计算出相同数据的百分比,并判断是否达到100%。如果相同数据占总数据的百分比为100%,则输出“PASS”,否则输出“FAIL”。
阅读全文