Alexander Sholohov wrote:
Hello,
Could someone help me understand the algorithm used
for data integrity check on ST251 MFM drive.
I have ST251 drive and an Adaptec controller. Also I
have ability to view recorded data in raw format.
On the track I see ID field block protected by CCITT
CRC16. And the data block protected by some 32-bit
ECC. This is definitely not a CRC32. The algorithm in
general looks like shift register for polynomial
multiplication with polynomial equal to
x32+x28+x26+x19+x17+x10+x6+x2+1 .
It's a polynomial code not unlike a CRC. (Note that a CRC
works as an error-correcting code, but aren't as good at
burst error detection/correction as codes designed for that
purpose.) It could be a BCH code. Older disk subsystems
on "big iron" used Fire code, but I'm not aware of that
even having been used on small Winchester drives.
http://en.wikipedia.org/wiki/Polynomial_code
http://en.wikipedia.org/wiki/BCH_code
Modern drives use Reed-Solomon code, which is a specific
case of a BCH code, but they use multiple interleaved
code blocks for each disk block. Interleave greatly
enhances the detection and correction capabilities.
Eric