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

Вопросы по esptools.exe

SpLab

New member
А где Вы берете эту esptool-ck.exe? На гитхабе https://github.com/tommie/esptool-ck эта утилита не обновлялась 3 месяца, а функционал заливки бинарника в железо у них стоит только в ToDo. Да и несчастная esptool.py: в Вашей сборке она тоже немного отличается от того что на гитхабе. Вообще я смотрю утилит для загрузки сообщество полно наплодило, лучше бы собрались и одну какую-нибудь нормально допилили, и лучше бы это было что-то подобное esptool-ck.exe, т.к. она хоть на си, а эти все питоны пусть на бэкенде серверов работают, там где им и положено работать.
 

CHERTS

Moderator
Команда форума
несчастная esptool.py: в Вашей сборке она тоже немного отличается от того что на гитхабе.
Отличается потому что я её немного модифицировал, а мой pull request в офф.репо не приняли, так что мои доработки остаются сугубо у меня.
 

SpLab

New member
Вот ведь бардак развели на гитхабе. По моей ссылке походу проект похоронили и начали новый репозиторий. А ведь гугл выдает именно репозиторий по моей ссылке.
Кстати судя по исходникам они этот баг не фиксили. Но это легкго пофиксить, в том числе и в esptool.py. Жалко не дружу с английским, а то писанул бы им о баге и как с ним бороться.
 

pvvx

Активный участник сообщества
https://github.com/igrr/esptool-ck/blob/master/espcomm/espcomm.c
int espcomm_start_flash(uint32_t size, uint32_t address) - никакой коррекции.
Ныне занят очень и помочь ничем глобальным не могу. Есть время только по 15 минут, когда устаю от другой задачи, в качестве отвлечения :) Позже или сами...
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
https://github.com/igrr/esptool-ck/blob/master/espcomm/espcomm.c
int espcomm_start_flash(uint32_t size, uint32_t address) - никакой коррекции.
Ныне занят очень и помочь ничем глобальным не могу. Есть время только по 15 минут, когда устаю от другой задачи, в качестве отвлечения :) Позже или сами...
Лично меня проблема избыточной перезаписи не беспокоит, я переписываю все последовательно и сразу. Так что подождем, может автор сам исправит.
 

SpLab

New member
Я могу проверить все известные загрузчики, время есть, только подскажите чем снимать дамп с памяти.
 

pvvx

Активный участник сообщества
Лично меня проблема избыточной перезаписи не беспокоит, я переписываю все последовательно и сразу. Так что подождем, может автор сам исправит.
Беда и у вас - при перезаписи "всей прошивки" два раза стираются начальные сектора flash. Дырку протрет быстрее, при частой отладке...
Я могу проверить все известные загрузчики, время есть, только подскажите чем снимать дамп с памяти.
python.exe esptool.py -p COM6 -b 230400 read_flash 0 0x80000 fullflash.bin
----
Кое как исправленная esptool.py путем копирования и вставки кусков из flash_download_tool_python2.6_wxpython2.8_release_v0.9.3.1_141118 (но минимум стирания = 2 сектора)
 

Вложения

Последнее редактирование:

SpLab

New member
Испытуемые: esptool.py исправленная pvvx, esptool.py из DevKIT, NodeMCU flasher.
Делаю четыре пробы прошивки бинарными файлами размером: 1 сектор, 1,5 сектора, 1 блок, 1блок + 1,5 сектора, т.е. 4096, 6144, 65536, 71680 байт соответственно. Файлы пишутся с адреса 0x20000 (адрес выбран для возможности считывания дампа веб-сервером от pvvx, это незанятая область в прошивке). Все проверенные утилиты пишут ровно столько сколько должны, а вот стирают по разному.
esptool.py исправленная pvvx:
1 сектор: стирает 2 сектора!
1,5 сектора: стирает 4 сектора!
1 блок: стирает неизвестно сколько (один блок или меньше), вывод esptool.py говорит о стирании 32768 байт!
1 блок + 1,5 сектора: стирает 20 секторов! вывод esptool.py говорит о стирании 40960 байт!
esptool.py из DevKIT:
1 сектор: стирает 2 сектора
1,5 сектора: стирает 4 сектора!!!
1 блок: стирает 2 блока
1 блок + 1,5 сектора: стирает 34 сектора (2 блока + 2 сектора)!
NodeMCU flasher:
1 сектор: стирает 4 сектора!
1,5 сектора: стирает 4 сектора!
1 блок: стирает 2 блока
1 блок + 1,5 сектора: стирает 34 сектора (2 блока + 2 сектора)!

P.S. Моя отладочная плата в силу некоторых технических ограничений поддерживает скорость UART 38400 и ниже. По этой причине не удалось испытать FLASH_DOWNLOAD_TOOLS_v0.9.3.1 (там скорость выбирается 115200 и выше), а esptool.py из его исходников отказался работать автономно от программы. esptool-ck.exe тоже не удалось испытать по причине обнаруженной в нем ошибки (пакет синхронизации от ESP приходит в восьмикратном повторении, а esptool-ck.exe анализирует только первый пакет и сразу пытается начать прошивать и в буфере приема оказывается мусор от остатков пакета синхронизации, на что прога говорит что не получен ответ и отваливается. Возможно на более высоких скоростях это может не проявляться.) XTCOM_UTIL.exe тоже не проверил - честно говоря надоело уже.
P.P.S. Т.о. не одна из утилит не стирает правильно, минимально лишнего затирает только esptool.py исправленная pvvx и возможно FLASH_DOWNLOAD_TOOLS, но в обеих из-за погрешности округления стирается всеже больше, например там где достаточно стереть 2 или 18 будет стираться 4 и 20 секторов соответственно.
 
Последнее редактирование:

pvvx

Активный участник сообщества
......
и возможно FLASH_DOWNLOAD_TOOLS, но в обеих из-за погрешности округления стирается всеже больше, например там где достаточно стереть 2 или 18 будет стираться 4 и 20 секторов соответственно.
Дык код по вычислению размера стирания в той esptool.py я вставил из FLASH_DOWNLOAD_TOOLS_v0.9.3.1_141118 по которой Espressif отрапортовал, что всё исправлено :)
Я там ничего своего не менял. Тупо заменил кусок и концовку (а то орала, а теперь два вопроса в двух квадратах рисует :) ) и всё...
esptool-ck.exe тоже не удалось испытать по причине обнаруженной в нем ошибки (пакет синхронизации от ESP приходит в восьмикратном повторении, а esptool-ck.exe анализирует только первый пакет и сразу пытается начать прошивать и в буфере приема оказывается мусор от остатков пакета синхронизации, на что прога говорит что не получен ответ и отваливается. Возможно на более высоких скоростях это может не проявляться.)
её уже "чинили" от этой ошибки - указано в git...
 
Последнее редактирование:

SpLab

New member
её уже "чинили" от этой ошибки - указано в git...
Я взял exe-шник из сборки DevKIT'a - видимо оказалась старая версия
....
Я тут час голову ломал почему же все-таки в поправленном Вами путем копипаста esptool.py при попытке записать 1,5 сектора стирается аж 4, хотя по логике должно стираться только 2. Несколько раз писал и читал, думал может я ошибся - нет все так и есть. Я вообще не знаю питон, но ошибка закралась в строчке 244, там
area_len = _size
а нужно сделать так:
area_len = int(_size)
Ох уж мне эти языки с автоматической типизацией переменных. В общем переменная area_len дальше в вычислениях должна участвовать как целая величина, а она была дробной. От этого кол-во секторов для стирания округляясь в большую сторону увеличивалось на +1 и становилось нечетным, а далее делалось кратным двум и вуаля: +2 сектора стирается в довесок.
 
  • Like
Реакции: TRO

pvvx

Активный участник сообщества
Я взял exe-шник из сборки DevKIT'a - видимо оказалась старая версия
....
А я думаю, что просто не дочинили.
----
Поправил 244. Вложил.
Запись в 0x0A000 clear_eep.bin (12288 байта = 3 сектора), стирает до:

http://192.168.4.1/web.cgi?hexdmpb0x4020dff0=32
4020dff0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
4020e000: 7b 66 69 6c 6c 53 74 79 6c 65 3a 27 23 66 66 66 {fillStyle:'#fff


т.е. до четного числа секторов (иначе похоже не скорректировать было).
Как кривая и временная затычка пойдет.
Код:
Entering bootloader...
Connecting...
Erasing flash...
head: 3 ;total: 3
erase size : 8192
Writing at 0x0000cc00... (100 %)

Leaving...
☺♠
Вот эти рожицы "☺♠ " тоже скопированы из кода Espressif :) Они выводятся в 287 строке по приколу, для забавы.... Жалко что там возврат не 0x07 - пищали бы ещё... :)
 

Вложения

SpLab

New member
Попробовал последний esptool-ck.exe - таже фигня - на низких скоростях не работает. Они походу анализируют только первый пакет из восьми (ответ на пакет синхронизации), плюс что-то намудрили с таймаутами - проскакивает то один пакет, то несколько, а затем в ответ на пакет стирания приходит мусор из оставшихся пакетов синхронизации. На более высоких скоростях видимо успеют проскочить все 8 пакетов прежде чем прога выдаст команду на стирание.
И кстати на гитхабе я не нашел чтобы была правка по этой проблеме, там только что-то по таймаутам правили.
 

Stanislav_labs

New member
Господа приветствую !
Подскажите , существует ли возможность залить 16 метровую FS ? Как я понял стандартный esptool не льет больше 4m .. Какие варианты ? Пересобрать Esptool ?
Заранее благодарен
 
Сверху Снизу