• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266. Блокировка режима записи флеш

nikolz

Well-known member
Добрый день,
удалось обнаружить новые свойства ESP8266.
Если записать прошивку,
при исполнении которой происходит переполнение IRAM,
то загрузка такой прошивки становится последней.
После записи такой прошивки ESP8266 более не выходит в режим программирования.
Возможно кто-нибудь с этим встречался.
Кроме как перепаять чип флеш иного выхода не нашел.
Какие есть идеи?
 

nikolz

Well-known member
проблему решил.
оказалось очень просто.
Этот алгоритм позволит перепрошить любую неудачную прошивку.
---------------------
Надо взять NODEMCU FIRMWARE PROGRAMMER
установить для прошивки новую.
Отключить ESP от UART (отключить питание)
нажать кнопку RESET и удерживая ее
Подключить ESP к UART (включить питание)
нажать в программе кнопку flash
и отпустить RESET.
--------------------
 

Сергей_Ф

Moderator
Команда форума
@nikolz уверены, что просто нажатие и удержание Flash и Reset перед прошивкой не помогало? Вроде это стандартный способ прошивки.
 

nikolz

Well-known member
@nikolz уверены, что просто нажатие и удержание Flash и Reset перед прошивкой не помогало? Вроде это стандартный способ прошивки.
уверен. Так как делал это много раз.
Перед этим превратил в камень модуль ESP12 и две nodemcu.
А данным способом все проснулось с первого раза
------------------------
И еще нехватка IRAM не отслеживается как ошибка в UDK .
Но в сообщении компилятора размер IRAM становится отрицательным.
После того как повесил три модуля и не смог их оживить
посмотрел сообщения и увидел минус.
 

pvvx

Активный участник сообщества
уверен. Так как делал это много раз.
Перед этим превратил в камень модуль ESP12 и две nodemcu.
Принцип объяснить можете?

В IRAM обращается bootLoader.
Он грузит данные из Flash в указанные в заголовках сегментов области.
Ну закатал он из Flash IRAM, да хоть всю и по кругу - и что?
Кеш то отключена при работе BootLoaderа и вся IRAM является просто памятью, но с доступом по адресам кратным 4 байтам (иначе будет/вывалится протектед).

Жмите кнопки лучше. И не забывайте об правильной установке GPIO в режим программирования.
 

nikolz

Well-known member
Принцип объяснить можете?

В IRAM обращается bootLoader.
Он грузит данные из Flash в указанные в заголовках сегментов области.
Ну закатал он из Flash IRAM, да хоть всю и по кругу - и что?
Кеш то отключена при работе BootLoaderа и вся IRAM является просто памятью, но с доступом по адресам кратным 4 байтам (иначе будет/вывалится протектед).

Жмите кнопки лучше. И не забывайте об правильной установке GPIO в режим программирования.
объяснить могу лишь то что указанный способ надежно перепрошивает
так как полностью исключается загрузка чего-либо из флеш
----------------
Почему чип превращается в камень объяснить не могу
Но факт есть.
Причем учитывая что за прошедшие 4 года я наверное не одну тысячу раз перепрошивал различные ESP
такое явление встретил впервые, так как никогда не забивал софт в IRAM выше крыши.
------------------
Кроме того замечу, что самый хлипкий прошивальщик - это прога на питоне которую иcпользует UDK
Самая надежная - это указанная выше
Она циклически долбит ESP пока та не перейдет в режим записи и не запишет
Поэтому в ней можно и многократно сбрасывать и передергивать кабель
Я этой прогой пробиваю все
--------------
Но в указанном случае
я даже поставив в ручном режиме на ESP12 не смог перепрошить
пока не исполнил кульбит указанный выше.
Причем если без него ничего не прошивалось на трех модулях при многократных ресет и в автомате и в ручном режиме
то по данной методике все три модуля прошились с первой попытки.
 

CodeNameHawk

Moderator
Команда форума
nikolz,
Если можете все повторить, (сделать, что бы не прошивалась ), померьте напряжения на выводах, в автоматическом режиме и когда вручную нажимаете.
У меня было, что вывод не принимал нужного уровня в автоматическом режиме, а нажатие кнопки принудительно коротило вывод и только тогда пере прошивалась есп.
 

nikolz

Well-known member
nikolz,
Если можете все повторить, (сделать, что бы не прошивалась ), померьте напряжения на выводах, в автоматическом режиме и когда вручную нажимаете.
У меня было, что вывод не принимал нужного уровня в автоматическом режиме, а нажатие кнопки принудительно коротило вывод и только тогда пере прошивалась есп.
спасибо за предложение
Но такая ситуация исключена
Более того в автомате у wemos нечему коротить там лишь кабель ткнул вытылкнул.
Причем до данной ситуации все писалось и переписывалось раз тысячу
после этой ситуации все пишется и переписывается уже раз десять
ситуация возникла как уже написал впервые за пять лет
и переполнение я сделал впервые за пять лет.
 

CodeNameHawk

Moderator
Команда форума
Более того в автомате у wemos нечему коротить там лишь кабель ткнул вытылкнул.
Это ни причем.
Речь о том, что есп назначает вывод GPIO0 на выход и устанавливает там логическую единицу.
А микросхема программатора не может этот вывод подтянуть к нулю.
 

nikolz

Well-known member
Если вы думаете, что все это из за IRAM, то по идеи должно легко повторятся.
мне просто нет интереса это повторять.
Вы можете эти сделать сами если интересно.
Делается это так
Берете любую свою прогу и все функции размещаете в RAM
при компиляции смотрите остаток IRAM пока он не станет отрицательным
После этого заливаете эту прошивку и развлекаетесь.
--------------
я на это смотрю как на пожар.
Как потушить знаю, но специально поджигать не буду.
 

pvvx

Активный участник сообщества
мне просто нет интереса это повторять.
Вы можете эти сделать сами если интересно.
Делается это так
Берете любую свою прогу и все функции размещаете в RAM
при компиляции смотрите остаток IRAM пока он не станет отрицательным
После этого заливаете эту прошивку и развлекаетесь.
В Web-свалке, с опцией расширения, используется IRAM c 1.5 раза большим размером за счет уменьшения "кеша". Это равносильно минус 16 кило по вашему. И ничего не происходит - всё работает :p
Цитата:
"Для ускорения загрузки и использования 48 килобайт IRAM вместо 32 проект использует специальный дополнительный загрузчик "RapidLoader"."
 

pvvx

Активный участник сообщества
Сколько надо "в минус"? 16 килобайт хватит? :)
 

CodeNameHawk

Moderator
Команда форума
У меня защелкнулась во время заливки, просто перепутал адреса, повторить не удалось.
 

pvvx

Активный участник сообщества
у меня было меньше. сделайте байт 1000.
Без разницы сколько. Прошивается вдоль и поперек.

Очередные выдумки nikolz по невнимательности.

Тут на форуме более десятка сообщений - "Не работает" и выяснившейся причине - переполнение IRAM кодом. Забыли атрибут FLASH для процедур...
 

nikolz

Well-known member
Без разницы сколько. Прошивается вдоль и поперек.

Очередные выдумки nikolz по невнимательности.

Тут на форуме более десятка сообщений - "Не работает" и выяснившейся причине - переполнение IRAM кодом. Забыли атрибут FLASH для процедур...
выкладываю прошивку две части грузить с 0 и 10000
для Wemos, режим автомат
делать так:
загрузите первый раз
запустите
После этого делаем следующие эксперименты:
1) попытаемся загрузить из UDK что-нибудь
--------------------
2) загрузить что-то NODEMCU FIRMFARE PROGRAMMER
-------------------
3) загрузить что-то ESP8266 DOWNLOAD TOOL
----------------
Успехов
 

Вложения

pvvx

Активный участник сообщества
выкладываю прошивку две части грузить с 0 и 10000
для Wemos, режим автомат
делать так:
загрузите первый раз
запустите
После этого делаем следующие эксперименты:
1) попытаемся загрузить из UDK что-нибудь
--------------------
2) загрузить что-то NODEMCU FIRMFARE PROGRAMMER
-------------------
3) загрузить что-то ESP8266 DOWNLOAD TOOL
----------------
Успехов
upload_2019-10-10_23-47-27.png
Сколько раз загружать и запускать?
5 раз хватит?
 

pvvx

Активный участник сообщества
Проверьте, может что-то не так?
Такой батничек:
C:\Espressif\utils\ESP8266\esptool.exe -p COM7 -b 230400 write_flash -ff 80m -fm qio -fs 4m 0x00000 eagle.flash.bin
C:\Espressif\utils\ESP8266\esptool.exe -p COM7 -b 230400 write_flash -ff 80m -fm qio -fs 4m 0x10000 eagle.irom0text.bin
Тыркал десяток раз. Между тырканиями жал Reset на модуле для гарантированного запуска.
 

pvvx

Активный участник сообщества
@nikolz - блокировка записи Flash делается не так и зависит от типа Flash.
Например, берем док GD25Q32C DATASHEET.
Читаем:
BP4, BP3, BP2, BP1, BP0 bits.
The Block Protect (BP4, BP3, BP2, BP1, and BP0) bits are non-volatile. They define the size of the area to be software protected against Program and Erase commands. These bits are written with the Write Status Register (WRSR) command. When the Block Protect (BP4, BP3, BP2, BP1, BP0) bits are set to 1, the relevant memory area (as defined in Table1).becomes protected against Page Program (PP), Sector Erase (SE) and Block Erase (BE) commands. The Block Protect (BP4, BP3, BP2, BP1, and BP0) bits can be written provided that the Hardware Protected mode has not been set. The Chip Erase (CE) command is executed, if the Block Protect (BP2, BP1, and BP0) bits are 0 and CMP=0 or the Block Protect (BP2, BP1, and BP0) bits are 1 and CMP=1.

Авто-перевод:
Биты защиты блока (BP4, BP3, BP2, BP1 и BP0) являются энергонезависимыми. Они определяют размер области, которая должна быть защищена программным обеспечением от команд Program и Erase. Эти биты записываются с помощью команды Write Status Register (WRSR).
Когда биты защиты блока (BP4, BP3, BP2, BP1, BP0) установлены в 1, соответствующая область памяти (как определено в таблице 1) становится защищенной от программы страницы (PP), стирания сектора (SE) и стирания блока (BE) команды. Биты защиты блока (BP4, BP3, BP2, BP1 и BP0) могут быть записаны при условии, что не был установлен аппаратно защищенный режим.
Команда Chip Erase (CE) выполняется, если биты защиты блока (BP2, BP1 и BP0) равны 0 и CMP = 0 или биты защиты блока (BP2, BP1 и BP0) равны 1 и CMP = 1.
Но и это не поможет нормальному прошивальщику :p

NODEMCU FIRMWARE PROGRAMMER таковым не является.
 
Сверху Снизу