Я тоже в своё время озаботился данной проблемой - что будет с флешью (в частности с сегментом А или В, предназначенным для пользовательских данных), если стирать её раз в минуту в течение, скажем, пары лет. Расчёт простой: 60(минут)*24(часа)*365(дней)=525600 циклов. И это за 1 год. Многовато для флеши!
Вывод: Нужно либо писать реже (остановился на 5 минутах), либо писать не на одно место, а заполнять сегмент последовательно. Тем более что писать надо было всего 3 слова.
Алгоритм следующий: При чтении по порядку перебираем данные с начала сегмента, пока не упрёмся в FF. (Кстати говоря, мои данные обязательно содержали нулевые биты). Далее считываем предыдущие N байт и размещаем в нужные переменные.
При записи то же самое, доходим до FF, только не читаем, а пишем данные дальше начиная с текущего места. Если дошли до конца сегмента - стираем его и пишем с начала.
//********************************
В результате - количество циклов стирания/записи уменьшается в 128/N раз. В моём случае - в 21.33 раза.
Если использовать кодовые сегменты, то они длиннее в 2 раза, можно стирать в 2 раза реже.
Для контроля можно использовать CRC, контрольную сумму, или школьный пример - код Хэмминга (находит двойные ошибки в 12-разрядных словах и исправляет одинарные, избыточность - 1,5) А я однажды писал диплом, в котором использовал код, гарантированно исправляющий любые 3 ошибки в 24-битном слове (при избыточности 2)
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|