Новые ревизии ESP8266 не умеют писать в SPI Flash


На фото справа — виновник торжества, микросхема PUYA P25Q80

Китайские поставщики начали использовать микросхему flash-памяти производства PUYA. Это привело к поломке драйверов SPIFFS, которые обычно используюся для сохранения настроек в модулях ESP8266. Пострадали многие проекты. Решения пока нет.

Сегодня утром я начал с рутинной операции по прошиванию очередной партии модулей ввода-вывода IO-Node. Сердцем устройства является модуль ESP-07. Ничего не предвещало беды.

Первый модуль прошился, запустился, пустил в веб-интерфейс. Два релейных выхода и дискретные входа заработали сразу. Однако при попытке поиска подключенных 1-wire датчиков температуры произошло нечто странное. IO-Node отрапортовал о том, что найден один датчик и завис.

Причем он завис так, что даже после перезагрузки не мигал статусный светодиод. Сказать, что я был удивлен, значит ничего не сказать. Перепрошивка тоже не помогла.

Подумав, что попался сбойный модуль ESP-07, я взялся за прошивку следующей платы. Каково же было мое удивление, когда и следующая плата вела себя точно так же. Очевидно, что это не было совпадение.

Начав отлаживать код прошивки, я обнаружил что не работает SPIFFS — драйвер файловой системы, который мы используем для хранения настроек.

Поиск в гугле показал, что это весьма новая проблема, которая появилась буквально в начале января. Обсужения есть тут и тут.

Суть проблемы в том, что китайцы стали применять новую микросхему флеш-памяти PUYA P25Q80 (см. первую фото). Эта микросхема работает не совсем так, как предыдущие микросхемы производства Winbond и прочие.

Что именно происходит еще не до конца понятно. Высказывается мнение, что при попытке записи части блока памяти микросхема переходит в аварийное состояние. В то время, как при записи всего блока сразу она работает корректно.

Кстати, если в SPIFFS поместить данные при первичной прошивке модуля ESP, то данные из него читаются корректно. Ошибки происходят только при записи в память из кода прошивки. Но это критическая проблема, т.к. теперь невозможно сохранения пользовательских настроек.

Что делать?

На текущий момент мы, как и другие пользователи ESP8266, заменяем PUYA на микросхемы производства Winbond. С ними такой проблемы нет. И ожидаем развития ситуации — вдруг появится программный патч. В долгосрочной перспективе мы или выпустим свой модуль или разведем все эти микросхемы на нашей «материнской» плате что бы держать эту ситуацию под контролем.

Неудобно, что при покупке модулей неизвестно что вам продадут — микросхема скрыта под метеллическим экраном и визуально недоступна.