EdigE
← ЛЕНТА

Трассоискатель Amprobe оживили после смерти нескольких битов NAND

В последовательной консоли передатчика Amprobe AT-7000-T появилась почти издевательская строка: «No valid boot image found!». Питание уже поднялось, процессор дошёл до загрузчика, NAND отвечала на чтение. Прибор за несколько тысяч фунтов остановился в точке, где железо ещё живо, а код, которому оно должно доверять, уже нет.

Микросхему 128 MB NAND в корпусе TSOP-48 выпаяли и прочитали внешним программатором. Сам по себе дамп не выглядел очевидно испорченным: в нём были данные, структура образа сохранялась. Ответ дал второй, рабочий узел того же комплекта. Сравнение областей загрузчика обнаружило несколько отличающихся битов. После исправления этих байтов и записи образа обратно передатчик прошёл проверку, загрузил Linux 2.6 и снова заработал.

Этот ремонт ценен не только счастливым финалом. Обычная цепочка поиска неисправности у мёртвого прибора начинается с входного питания, стабилизаторов, сброса, тактирования и шин процессора. Здесь осциллограф и UART быстро отсеяли большую часть этой цепочки. Вместо замены исправных узлов диагностика пошла по следу сообщения загрузчика: журнал UART, чтение NAND, сравнение бинарных образов.

Память прочиталась, но загрузчик ей не поверил

### Память прочиталась, но загрузчик ей не поверил

«Память читается» ещё не означает, что её содержимое годится для запуска системы. Загрузчик ищет сигнатуру, контрольные данные и допустимый образ в ожидаемых блоках. Один изменившийся бит в поле, которое участвует в проверке, способен сделать весь образ недействительным. Процессор не обязан пытаться запуститься вопреки этой ошибке: для измерительного прибора безопаснее остановиться, чем выполнять случайно повреждённый код.

Raw NAND нельзя считать вечным хранилищем прошивки

Наблюдаемый факт в этой истории — различающиеся биты в загрузочной области и успешное восстановление после их исправления. Утечка заряда из ячеек NAND за годы хранения остаётся наиболее правдоподобным объяснением, но не доказанной причиной. Для строгого вывода потребовались бы данные ECC и служебной области, повторные чтения при разных условиях, анализ распределения порогов либо замена кристалла с длительной проверкой. Логические различия в дампе сами по себе ещё не называют механизм деградации.

Кадр журнала загрузки из видео Buy it Fix it; опубликован Hackaday

### Raw NAND нельзя считать вечным хранилищем прошивки

Ремонт вернул прибор, но не отменил вопрос о замене NAND

NAND хранит заряд в ячейках, а контроллер различает логические состояния по порогам. Старение, температура, история записи и хранения сужают запас между этими порогами. Поэтому raw NAND без надёжной коррекции ошибок и резервной загрузочной копии — плохое место для единственного экземпляра bootloader, особенно в устройстве, которое годами лежит выключенным.

В AT-7000 восстановление получилось благодаря редкой роскоши: рядом оказался исправный экземпляр, с которым можно было сравнить дамп. В полевых условиях такой донор обычно отсутствует. Для долговечного прибора нужны как минимум проверяемые резервные образы, режим восстановления через внешний интерфейс и документированная возможность перепрошивки. В зависимости от объёма и архитектуры системы полезнее выбрать SPI NOR, FRAM или накопитель с управляемой коррекцией ошибок. Цена такой памяти часто несопоставима со стоимостью сервисного тупика, где за диагностику просят £70, а за попытку ремонта называют сумму от £600.

### Ремонт вернул прибор, но не отменил вопрос о замене NAND

Исправленная микросхема вновь загрузила систему, однако это ещё не гарантирует многолетнюю стабильность. Если исходная NAND действительно потеряла запас по удержанию заряда, слабые ячейки могут проявиться снова. Надёжный постоянный ремонт подразумевает запись проверенного образа в новую совместимую микросхему и повторную проверку загрузки.

История Amprobe оставляет очень конкретный след для ремонта измерительного железа: если устройство включается, но не идёт дальше ранней загрузки, UART способен оказаться полезнее очередной проверки стабилизатора. Иногда прибор ломается не потому, что электроны перестали течь по плате. Они продолжают течь; нескольких электронов просто уже не хватает внутри ячеек памяти, чтобы загрузчик признал собственную прошивку настоящей.