I just looked up a datasheet for those DiskOnChip devices. A complication is that they appear to use 10-bit symbols in the RS code, rather than 8-bit. I think that must be to accommodate a 512-byte disk block (as payload) and the parity symbols within a single RS block. The error correction capacity quoted is consistent with 4 parity symbols being added, but these are stored in 6 bytes according to the external interface, which is roughly consistent with them being 10-bit symbols - though they could have been packed into just 5 bytes, instead.
The code I'm writing will not directly handle 10-bit symbols, only 8-bit ones. However, it should be possible to take the algorithms as described by my implementation and adapt them to a larger code, once it's finished. Hopefully my explanations are sufficient to enable you to do that.
The datasheet does explain that using the RS code for correcting errors, as opposed to verifying that none exist, is a comparatively rare operation, which is why it was relegated to software routines. The DoC device itself will compare the recomputed RS parity symbols against those stored, and return correct data when that verification succeeds (and still mostly correct data when it fails). So the devices should be useful even without a 10-bit RS decoder, and you can overlay an 8-bit RS scheme over it if that seems easier, ignoring the built-in support.
Forward Error Correction - any implementations, ever?
Re: Forward Error Correction - any implementations, ever?
I've actually just been playing with Convolutional Coding, in an Amateur Radio 'weak signal mode' context-- the basic technique that /replaced/ Reed-Solomon on the Voyager space probes (mid-way into the mission!)
The encoder is very very easy-- input bits are logically shifted through several registers, the parity of each register is calculated after each bit, and those parity bits are the output. Additional robustness in practice includes bit-interleaving the output, and sometimes pre-processing the input with the likes of Golay code (another relatively simple encoding). There's a digital mode in Amateur Radio called "WSPR" where encoders exist for the Atmel/Arduino cpus.
Decoding is a little more involved, using the Viterbi algorithm, but it's one of those elegant algorithms that's not grossly over-complicated (unlike erasure-style FEC). An 8-bitter could handle it, certainly.
The encoder is very very easy-- input bits are logically shifted through several registers, the parity of each register is calculated after each bit, and those parity bits are the output. Additional robustness in practice includes bit-interleaving the output, and sometimes pre-processing the input with the likes of Golay code (another relatively simple encoding). There's a digital mode in Amateur Radio called "WSPR" where encoders exist for the Atmel/Arduino cpus.
Decoding is a little more involved, using the Viterbi algorithm, but it's one of those elegant algorithms that's not grossly over-complicated (unlike erasure-style FEC). An 8-bitter could handle it, certainly.
Re: Forward Error Correction - any implementations, ever?
It certainly could, but it's relatively difficult to make a worthwhile convolutional code with low storage overhead. So the Golay and convolutional codes are well suited to communications, but the Hamming and RS codes are better for use in storage applications.