EEPROM

Jun 18, 2013 14:28

Электроники пост. Висит у меня на кухне телек филипс. Все бы ничего, но в один прекрасный день поменяли частоты всех каналов, а их больше 40. Ну не вопрос - перенастроим. Тут-то и началось веселье. Настраиваешь частоту канала, сохраняешь, переключаешь туда-сюда, а там уже совсем другое - частота не сохраняется. Еще хуже то, что при этом слетает какой-нибудь другой канал. Долго я возился, аж достало, но стандартными средствами через меню сделать похоже было ничего нельзя, просто из-за ошибки/недоработанности в прошивке. Очевидно что-то криво пишется/читается в EEPROM. Надоело это все, разобрал телек, нашел микросхему EEPROM, разумеется серии 24CXX. Сделал программатор из говна и палок. Считал и сохранил на всякий случай содержимое памяти и записал FF всюду. Запаял обратно в телевизор, включаю - "Введите код доступа". Ага, ладно. Выпаял еще раз, на этот раз записал 00, запаял - на этот раз никаких кодов доступа. Запустил автопоиск каналов, после чего вручную настроил все нужные каналы, на этот раз без косяков. Ради интереса и на всякий случай после настройки сохранил все, что там было в памяти. Сравнение того что было и того что стало, показало, что в некоторых областях памяти была явная каша и явно то, чего там не должно было быть. Очевидно в один (или не один) прекрасный (или ужасный) момент что-то не туда записалось.
И ведь действительно, 24CXX память, которая используется повсеместно не предполагает сама по себе никакой защиты. Достаточно один раз одному битику в адресе неправильно передаться (это совсем не сложно, учитывая мое скептическое отношение к I2C) и кусок данных в памяти будет поврежден.

Из этого примера, можно сделать ряд выводов для разработчиков:

1)В идеале использовать протоколы с защитой от неправильной передачи данных - начиная от проверки четности, кончая хэшами. Это сразу решит почти все проблемы потенциальных ошибок при передаче данных, но это сложное решение.

2)Если уж используется всякая простая и дешевая память типа 24СХХ, то нужно в прошивке предусматривать возможность неправильной передачи данных. Как - вопрос отдельный. Можно, например, хранить резервную копию данных в оперативке или даже поставить вторую микросхему. Но не стоит тупо писать данные, в надежде, что все запишется без ошибок.

3)Ну и последнее, пожалуй самое-самое важное. Даже если что-то записалось один раз криво, то должны быть явные или неявные средства перезаписать это нормально. Так, чтобы не приходилось это делать с помощью паяльника. В данном конкретном случае, один (или не один) раз криво записанные данные каким-то образом из-за криворукости разработчиков особенностей работы прошивки не давали записать поверх правильные данные штатным способом. Такого быть не должно. В идеале проверять целостность памяти и если она нарушена - пытаться исправить по возможности или, если это невозможно - просто привести ее в исходное, заводское состояние.

П.С. Впрочем телевизор - не ракета, ему можно и сломаться.


Ремонт, Идиоты, Электроника

Previous post Next post
Up