| #!/bin/sh |
| # |
| # Testcase for nand2bin and bin2nand. Generate testdata and inject |
| # biterrors. Convert data back and compare with original data. |
| # |
| # Conversion: |
| # bin -> bin2nand -> mif -> nand2bin -> img |
| # |
| |
| inject_biterror=./scripts/inject_biterror.pl |
| |
| pagesize=2048 |
| oobsize=64 |
| |
| # Create test data |
| dd if=/dev/urandom of=testblock.bin bs=131072 count=1 |
| |
| echo "Test conversion without bitflips ..." |
| |
| echo -n "Convert bin to mif ... " |
| bin2nand --pagesize=${pagesize} -o testblock.mif testblock.bin |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo -n "Convert mif to bin ... " |
| nand2bin --pagesize=${pagesize} -o testblock.img testblock.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo -n "Comparing data ... " |
| diff testblock.bin testblock.img |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo "Test conversion with uncorrectable ECC erors ..." |
| echo -n "Inject biterror at offset $ioffs ... " |
| ${inject_biterror} --offset=0 --bitmask=0x81 \ |
| --input=testblock.mif \ |
| --output=testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo "Convert mif to bin ... " |
| rm testblock.img |
| nand2bin --correct-ecc --pagesize=${pagesize} -o testblock.img \ |
| testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo -n "Comparing data, must fail due to uncorrectable ECC ... " |
| diff testblock.bin testblock.img |
| if [ $? -ne "0" ]; then |
| echo "ok" # Must fail! |
| else |
| echo "failed!" |
| exit 1 |
| fi |
| |
| echo "Test bitflips in data ... " |
| for offs in `seq 0 255` ; do |
| |
| cp testblock.mif testblock_bitflip.mif |
| |
| for xoffs in 0 256 512 768 ; do |
| let ioffs=$offs+$xoffs |
| |
| cp testblock_bitflip.mif testblock_bitflip_tmp.mif |
| echo -n "Inject biterror at offset $ioffs ... " |
| ${inject_biterror} --offset=${ioffs} --bitmask=0x01 \ |
| --input=testblock_bitflip_tmp.mif \ |
| --output=testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| done |
| |
| echo "Convert mif to bin ... " |
| rm testblock.img |
| nand2bin --correct-ecc --pagesize=${pagesize} -o testblock.img \ |
| testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo -n "Comparing data ... " |
| diff testblock.bin testblock.img |
| if [ $? -ne "0" ]; then |
| hexdump testblock.bin > testblock.bin.txt |
| hexdump testblock.img > testblock.img.txt |
| echo "Use tkdiff testblock.bin.txt testblock.img.txt to compare" |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| # Without correction |
| echo "Convert mif to bin ... " |
| rm testblock.img |
| nand2bin --pagesize=${pagesize} -o testblock.img \ |
| testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo -n "Comparing data must differ, correction is disabled ... " |
| diff testblock.bin testblock.img |
| if [ $? -ne "0" ]; then |
| echo "ok" # must fail |
| else |
| echo "failed!" |
| exit 1 |
| fi |
| done |
| |
| echo "Test bitflips in OOB data ... " |
| for offs in `seq 0 $oobsize` ; do |
| |
| let ioffs=$pagesize+$offs |
| |
| echo -n "Inject biterror at offset $ioffs ... " |
| ${inject_biterror} --offset=${ioffs} --bitmask=0x01 \ |
| --input=testblock.mif \ |
| --output=testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo "Convert mif to bin ... " |
| rm testblock.img |
| nand2bin --correct-ecc --pagesize=${pagesize} -o testblock.img \ |
| testblock_bitflip.mif |
| if [ $? -ne "0" ]; then |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| |
| echo -n "Comparing data ... " |
| diff testblock.bin testblock.img |
| if [ $? -ne "0" ]; then |
| hexdump testblock.bin > testblock.bin.txt |
| hexdump testblock.img > testblock.img.txt |
| echo "Use tkdiff testblock.bin.txt testblock.img.txt to compare" |
| echo "failed!" |
| exit 1 |
| else |
| echo "ok" |
| fi |
| done |
| |