Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Железные вопросы по esp8266", создана пользователем nikolz, 7 окт 2019.

  1. nikolz

    nikolz Гуру

    Сообщения:
    5.047
    Симпатии:
    462
    Добрый день,
    удалось обнаружить новые свойства ESP8266.
    Если записать прошивку,
    при исполнении которой происходит переполнение IRAM,
    то загрузка такой прошивки становится последней.
    После записи такой прошивки ESP8266 более не выходит в режим программирования.
    Возможно кто-нибудь с этим встречался.
    Кроме как перепаять чип флеш иного выхода не нашел.
    Какие есть идеи?
     
  2. nikolz

    nikolz Гуру

    Сообщения:
    5.047
    Симпатии:
    462
    проблему решил.
    оказалось очень просто.
    Этот алгоритм позволит перепрошить любую неудачную прошивку.
    ---------------------
    Надо взять NODEMCU FIRMWARE PROGRAMMER
    установить для прошивки новую.
    Отключить ESP от UART (отключить питание)
    нажать кнопку RESET и удерживая ее
    Подключить ESP к UART (включить питание)
    нажать в программе кнопку flash
    и отпустить RESET.
    --------------------
     
  3. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.210
    Симпатии:
    229
    @nikolz уверены, что просто нажатие и удержание Flash и Reset перед прошивкой не помогало? Вроде это стандартный способ прошивки.
     
  4. nikolz

    nikolz Гуру

    Сообщения:
    5.047
    Симпатии:
    462
    уверен. Так как делал это много раз.
    Перед этим превратил в камень модуль ESP12 и две nodemcu.
    А данным способом все проснулось с первого раза
    ------------------------
    И еще нехватка IRAM не отслеживается как ошибка в UDK .
    Но в сообщении компилятора размер IRAM становится отрицательным.
    После того как повесил три модуля и не смог их оживить
    посмотрел сообщения и увидел минус.
     
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    Принцип объяснить можете?

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

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

    nikolz Гуру

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

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.680
    Симпатии:
    183
    nikolz,
    Если можете все повторить, (сделать, что бы не прошивалась ), померьте напряжения на выводах, в автоматическом режиме и когда вручную нажимаете.
    У меня было, что вывод не принимал нужного уровня в автоматическом режиме, а нажатие кнопки принудительно коротило вывод и только тогда пере прошивалась есп.
     
  8. nikolz

    nikolz Гуру

    Сообщения:
    5.047
    Симпатии:
    462
    спасибо за предложение
    Но такая ситуация исключена
    Более того в автомате у wemos нечему коротить там лишь кабель ткнул вытылкнул.
    Причем до данной ситуации все писалось и переписывалось раз тысячу
    после этой ситуации все пишется и переписывается уже раз десять
    ситуация возникла как уже написал впервые за пять лет
    и переполнение я сделал впервые за пять лет.
     
  9. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.680
    Симпатии:
    183
    Это ни причем.
    Речь о том, что есп назначает вывод GPIO0 на выход и устанавливает там логическую единицу.
    А микросхема программатора не может этот вывод подтянуть к нулю.
     
  10. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.680
    Симпатии:
    183
    Если вы думаете, что все это из за IRAM, то по идеи должно легко повторятся.
     
  11. nikolz

    nikolz Гуру

    Сообщения:
    5.047
    Симпатии:
    462
    мне просто нет интереса это повторять.
    Вы можете эти сделать сами если интересно.
    Делается это так
    Берете любую свою прогу и все функции размещаете в RAM
    при компиляции смотрите остаток IRAM пока он не станет отрицательным
    После этого заливаете эту прошивку и развлекаетесь.
    --------------
    я на это смотрю как на пожар.
    Как потушить знаю, но специально поджигать не буду.
     
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    В Web-свалке, с опцией расширения, используется IRAM c 1.5 раза большим размером за счет уменьшения "кеша". Это равносильно минус 16 кило по вашему. И ничего не происходит - всё работает :p
    Цитата:
    "Для ускорения загрузки и использования 48 килобайт IRAM вместо 32 проект использует специальный дополнительный загрузчик "RapidLoader"."
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    Сколько надо "в минус"? 16 килобайт хватит? :)
     
  14. nikolz

    nikolz Гуру

    Сообщения:
    5.047
    Симпатии:
    462
    у меня было меньше. сделайте байт 1000.
     
  15. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.680
    Симпатии:
    183
    У меня защелкнулась во время заливки, просто перепутал адреса, повторить не удалось.
     
  16. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    Без разницы сколько. Прошивается вдоль и поперек.

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

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

    nikolz Гуру

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

    Вложения:

    • test0_10000.zip
      Размер файла:
      167,8 КБ
      Просмотров:
      2
  18. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    upload_2019-10-10_23-47-27.png
    Сколько раз загружать и запускать?
    5 раз хватит?
     
  19. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    Проверьте, может что-то не так?
    Такой батничек:
    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 на модуле для гарантированного запуска.
     
  20. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.091
    Симпатии:
    1.303
    @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 таковым не является.
     

Поделиться этой страницей