Hi guys,
As the subject says: are there any EDC/ECC code experts hanging around
on the list?
I'm working on implementing the 4-byte (32-bit) ECC code Western Digital
used on the WD2010 Winchester HDD Controller IC. This appears to be an
implementation of the ECC scheme explained in section 7.6 of National
Semiconductor's "Disk Interface Design Guide and User's Manual" (appnote
AN-413).
It looks like the ECC scheme is based on running a CRC forwards over the
data to produce a 32-bit CRC, which is used to validate the data in the
same way the 16-bit CRC validates the IDAM. Error correction apparently
operates by running the CRC in reverse using an "inverse polynomial". I
can't see how this could work -- isn't a CRC by its very nature a
one-way operation?
The application note calls this a "Glover 140A0443" code, but doesn't
bother to reference any papers, books or similar on the subject. There's
an example on how to program NSC's controller chips to use the code, but
nothing on the mathematical background behind it. For instance: how does
it work, and why is the maximum correctable error burst 5 bits long?
Does anyone recognise this polynomial?
x^32 + x^28 + x^26 + x^19 + x^17 + x^10 + x^6 + x^2 + 1
aka. x^32 + x^28 + x^26 + x^19 + x^17 + x^10 + x^6 + x^2 + x^0
or: 0x140A0443
It's not a standard CRC32 polynomial (according to Das Wiki), and I
don't *think* it's a Fire code... though I've been looking for the
original paper on those (P. Fire, "A class of multiple-error-correcting
binary codes for non-independent errors". Sylvania Reports RSL-E-2,
Sylvania Reconnaissance Systems, Mountain View, California, 1959) and
haven't had any success -- a few hits on Citeseer, but it appears all
copies of the paper have vanished into thin air.
What I'd really like to find out is more about how this algorithm
works... a model implementation (e.g. in C, Python or similar) would be
extremely useful, but at this point even a basic worked example ("here's
a chunk of data, now watch what happens if we flip some bits, and here's
how we fix it") would be extremely useful...
Thanks,
--
Phil.
classiccmp at philpem.me.uk
http://www.philpem.me.uk/