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

esptool.py: A fatal error occurred: Timed out waiting for packet header

vicus

New member
Всем привет!
ESP8266-01, пытаюсь залить прошивку NodeMCU утилитой esptool.py под линухом так:
$ ./esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x00000 ../nodemcu-master-8-modules-2016-11-13-09-20-34-integer.bin
esptool.py v1.3-dev
Connecting...
Auto-detected Flash size: 8m
Running Cesanta flasher stub...
Flash params set to 0x0020
Writing 389120 @ 0x0... 3072 (0 %)

A fatal error occurred: Timed out waiting for packet header
$
При этом, такой результат не всегда. Бывает, что процесс обрывается еще раньше. Иногда на ошибке
"Failed to connect to ESP8266"

Использую USB-TTL конвертер PL2303. Внешний источник питания на 3.3В, 1А, надежный. Пробовал заменять на батарейки (2 x 1.5v) - результат одинаковый.
По схеме включения:
GPIO0 притянут резистором к GND
GPIO2 и CHPD притянуты резисторами к VCC.

Сам ESP модуль живой, - команды типа AT+GMR выполняются успешно в ESPlorer. Через ESPlorer командой AT+CIUPDATE успешно обновил SDK до 1.5.4:
AT+GMR
AT version:1.1.0.0(May 11 2016 18:09:56)
SDK version:1.5.4(baaeaebb)
Ai-Thinker Technology Co. Ltd.
May 28 2016 10:42:12
OK


Chip ID: 0x00cbbf36
flash_id: Manufacturer: e0, Device: 4014

Помогите разобраться с проблемой. Куда копать?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Сделайте нормальное питание модулю.
При описанных симптомах у питомца, такое происходит, когда питание идет через резистор, т.е. с просадкой. esptool при этом часто просто "виснет" на каком-то %. Возможно потом выходит по тайм-ауту, но зависит от версии esptool.py...
 
Последнее редактирование:

vicus

New member
Сделайте нормальное питание модулю.
При описанных симптомах у питомца, такое происходит, когда питание идет через резистор, т.е. с просадкой. esptool при этом часто просто "виснет" на каком-то %. Возможно потом выходит по тайм-ауту, но зависит от версии esptool.py...
Питание нормальное у модуля. Питание - это то о чем я подумал сразу. Как я сказал выше - сейчас модуль запитан от стационарного стабилизированного блока питания на 3.3В, 1А. Просадки напряжения при включении нет. Но раньше пробовал и по другому запитывать (от батареек, и от USB-TTL конвертера), - результат такой же.
Визуально похоже как раз на то, что "виснет" не esptool, а esp-модуль. А именно, когда возникает ошибка "Timed out waiting for packet header" - то пока после этого не передернеш питание на модуле, - постоянно выдает ошибку "Failed to connect to ESP8266" на всех последующих, даже простых, операциях, типа получения chip_id.
И еще уточню... У меня всегда виснет на 0%. Очень редко на 1%. Еще ни разу не смог прошить успешно.
 
Последнее редактирование:

pvvx

Активный участник сообщества
И еще уточню... У меня всегда виснет на 0%. Очень редко на 1%. Еще ни разу не смог прошить успешно.
Значит смотрите амплитуду сигнала TX от адаптера. Не стоит превышать 3.3В. Гляньте и как там с другими ногами для авто переключения в режим программирования. Если не поможет, то придется глядеть пропайку чипа на модуле...
И осторожнее с "прошивку NodeMCU" - она не знает, что у вас ESP-01 и делает вывод в GPIO15, который припаян в модуле на gnd. Как итог - возможный выход из строя чипа, от перегрева выхода...
 

vicus

New member
Гляньте и как там с другими ногами для авто переключения в режим программирования.
Не совсем понял, что имеется в виду? Ноги стоят так:
GPIO0 притянут резистором к GND.
GPIO2 и CHPD притянуты резисторами к VCC.
Именно так выставлены ноги при включении питания. Или они должны быть по другому выставлены при подаче питания, а после подачи нужно переключить?
И осторожнее с "прошивку NodeMCU" - она не знает, что у вас ESP-01 и делает вывод в GPIO15
Ого... спасибо что предупредили. А как лечить? Может есть где-то готовая NodeMCU адаптированная под ESP-01?
 

pvvx

Активный участник сообщества
Не совсем понял, что имеется в виду? Ноги стоят так:
GPIO0 притянут резистором к GND.
GPIO2 и CHPD притянуты резисторами к VCC.
Именно так выставлены ноги при включении питания. Или они должны быть по другому выставлены при подаче питания, а после подачи нужно переключить?
Ничего не надо переключать. Значения с входов для типа загрузки защелкиваются по фронту RESET.
Ого... спасибо что предупредили. А как лечить? Может есть где-то готовая NodeMCU адаптированная под ESP-01?
Не пользоваться GPIO15 и настраивать его на вход. Или снимать чип, резать дорожку и припаивать резистор. Но модуль этого не стоит, да и сразу не вылетит, если включите как выход и выведите "1". Подскакивает потребляемый ток. Так-же не включить UART в режим flow-control, т.к. RTS/CTS и есть GPIO15.

Закорачивание I/O выхода вызывает увеличение тока на 50 мА: http://esp8266.ru/forum/attachments/esp-01-gpio15-out-gif.885/
 
Последнее редактирование:

vicus

New member
Ничего не надо переключать. Значения с входов для типа загрузки защелкиваются по фронту RESET.

Не пользоваться GPIO15 и настраивать его на вход. Или снимать чип, резать дорожку и припаивать резистор. Но модуль этого не стоит, да и сразу не вылетит, если включите как выход и выведите "1". Подскакивает потребляемый ток. Так-же не включить UART в режим flow-control, т.к. RTS/CTS и есть GPIO15.

Закорачивание I/O выхода вызывает увеличение тока на 50 мА: http://esp8266.ru/forum/attachments/esp-01-gpio15-out-gif.885/
Понял, большое спасибо за совет!
Возвращаясь к моей проблеме... Померял уровни RX,TX которые выставляет адаптер PL2303: high ==4.8В. Пятивольтовая логика :( Забыл проверить сразу, так как до этого экспериментировал с адаптером cp2102. На cp2102 логика 3.3В, но там другая проблема: при попытке выполнить команды esptool.py получал исключение на функции установки DTR:
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 535, in setDTR
fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_DTR_str)
В общем, есть пока куда копать. Буду разбираться или с проблемой установки DTR при использовании cp2102, или согласовывать уровни на PL2303. По результату отпишусь.
 

vicus

New member
Убил вечер на танцы с бубном вокруг согласования уровней ТХ - ничего не помогало...
Проблема решилась закорачиванием GPIO0 на GND без резистора, напрямую. До этого подтягивал резистором 20к, - видимо это оказалось много для контроллера, и он хаотично переходил из режима программирования в обычный и обратно.
 

Arthur

Active member
@vicus, ну всё правильно. А зачем вы на землю бросали GPIO0 через резистор в 20К, откуда вы такое взяли? )
Это на VCC кидать через резистор на 3.3 ... 4.3 К стоило бы, для PULL UP... Но Pull Down резистор уж должен быть явно не 20кОм.
Да поправят более знающие товарищи моё утверждение, коли Я не прав.
А вообще, вот табличка, на которую Я периодически гляжу, чтобы освежить память:
 

vicus

New member
@vicus, ну всё правильно. А зачем вы на землю бросали GPIO0 через резистор в 20К, откуда вы такое взяли? )
Такое взял отсюда: Не работает модуль esp8266, цитирую:
"Программирование осуществляется на 115200 Baud. При этом ноги модуля при подаче питания должны быть: GPIO0 через резистор на GND, а GPIO2 через резистор на VCC."
Так как номинал резистора на GND не был указан, поставил обычный подтягивающий, номиналы которых обычно рекомендуют 5-50к. Под рукой 10к не нашлось, влепил что было :)
 
Сверху Снизу