How to test ecc correction code?
holland at loser.net
Fri Dec 10 15:01:54 EST 2004
We're developing for a Samsung S3C2410 based system (currently running
linux 2.6.10-rc3-bk2) and are using the internal hardware error
correction code from the cpu's nand controller (3 byte ecc for a 512
byte page). I "think" I've written some code to correct errors but am a
tad stumped as to how to test it.
I had initially tried to read a block of data (including oob) using
nanddump, then erase the block, change a single bit in the first page
of my dumped data and re-write it to flash using nandwrite (specifying
-o as I include oob data). However, the first call to write the OOB
data in page 0 will fail.
At the shell level I'm doing:
# get the block of data with oob
nanddump -a 0 -l 16384 /dev/mtd3 > /tmp/nand
# some magic to flip a bit in the first byte of /tmp namd
# erase the block
flash_erase /dev/mtd3 0 1
#re-write with bad bit
nandwrite -s 0 -o /dev/mtd3 /tmp/nand
The call to nandwrite when it attempts to write the oob data for the
first page (the ioctl(fd, MEMWRITEOOB) it returns an I/O Error.
Am I doing this correctly? Is there a better way to do this? Do any
tools for this exist?
Thanks for any help!
More information about the linux-mtd