Какое выбрать кодирование с исправлением одиночных ошибок и обнаружением прочих?
хочется хранить короткие записи (скажем 32 бита) в NOR flash, очень хочется иметь исправление одиночных ошибок и надёжное обнаружение всех прочих. добавлять хочется целое число байт.
от чего защищаемся:
1. маловероятная битовая ошибка;
2. вполне вероятная ошибка "записалась фигня" (отключение питания в момент записи, программный сбой, да что угодно).
что приходит в голову:
минимум нужно добавить 6 бит для возможности исправления одиночной ошибки - код Хэмминга (63, 57).
итого в этом байте остаётся 2 бита, это слишком мало для чего-то осмысленного. поэтому добавляем ещё байт - получаем 10 бит, в которых вполне можно хранить CRC.
получается, что если у нас есть случайный набор бит вместо данных, то вероятность совпадения CRC не больше 0.1% - не так мало, конечно, но уже неплохо.
нормальная это схема или ерунда?
меня смущает, что и CRC, и Hamming Code основаны на Hamming Distance, разумно ли их совместное использование?
jcmvbkbc, Записываем данные, проверяем и назначаем любой с верными данными (вдруг ошибка при записи) - мастером.
При чтении - сверяем со slave: если есть ошибка - данные в этом бите будут разные.
добавлю, что и для обнаружения ошибок raid 1 "не фонтан": разные байты в реальной жизни встречаются с разной вероятностью, 00 или FF, например, чаще остальных, поэтом вероятность необнаружения ошибки в "левых" данных слишком велика.
коды Рида-Соломона - классная вещь, конечно, но они для исправления более массовых ошибок, чем ошибки в одном бите, поэтому и длина, и вычислительная сложность у них выше, чем у кодов Хэмминга.