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

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

pvvx

Активный участник сообщества
Просто его сборка требует некоторой модификации esptools.exe, он как раз будет в новой версии DevKit.
По esptools.exe. Поддержка чтения flash там есть? (Bios умеет грузить программу на исполнение в RAM. Я с этим глубоко не разбирался, могу ошибиться...)
 

CHERTS

Moderator
Команда форума
По esptools.exe. Поддержка чтения flash там есть? (Bios умеет грузить программу на исполнение в RAM. Я с этим глубоко не разбирался, могу ошибиться...)
esptool.exe dump_mem 0x40000000 65536 iram0.bin

для загрузки кода в ram и исполнения есть
esptool.exe load_ram firmware.bin

Код esptool открыть, так что всегда можно посмотреть-подправить.
 

pvvx

Активный участник сообщества
esptool.exe dump_mem 0x40000000 65536 iram0.bin
для загрузки кода в ram и исполнения есть
esptool.exe load_ram firmware.bin
Я в дизасме BOOT просто видел что вроде может...
Но адрес вроде не тот. 32k RAM сидит после зaгрузки в 0x40100000 + 0x8000 (почти бездарно).

А где менять настройки QSPI (40/80MHz), FLASH SIZE и т.д. в даной тулзе? Каждый раз её перекомпилировать? :)
 

CHERTS

Moderator
Команда форума
Но адрес вроде не тот. 32k RAM сидит после зaгрузки в 0x40100000 + 0x8000 (почти бездарно).
А где менять настройки QSPI (40/80MHz), FLASH SIZE и т.д. в даной тулзе? Каждый раз её перекомпилировать? :)
Я flash не дампил с помощью esptool, поэтому боюсь не подскажу по этому функционалу.

у меня в DevKit в C:\Espressif\utils\ лежит esptool.py - это оригинальный esptool.py из репозитария + некоторые мои правки
а C:\Espressif\utils\esptool.exe это собранный exe'шник с питоном и всеми питоновскими либами, его можно использовать не имея питона на компе.
если сильно хочется работать именно с esptool.py, требуется питон Python27 + pyserial + argparse и тогда в Makefile пишем, к примеру вместо

$(ESPTOOL) -p $(ESPPORT) write_flash 0x00000 firmware/0x00000.bin 0x40000 firmware/0x40000.bin
пишем
C:\Python27\python.exe C:\Espressif\utils\esptool.py -p $(ESPPORT) write_flash 0x00000 firmware/0x00000.bin 0x40000 firmware/0x40000.bin

P.S. Чтобы не мучится с установкой pyserial + argparse для питона, можно запустить C:\Espressif\utils\py2exe_esptool.cmd, он соберет esptool.exe, предварительно установив pyserial + argparse если их нет.
 

pvvx

Активный участник сообщества
Это всё понятно, но пользователи то как будут менять esp_init_data_default.bin?
 

CHERTS

Moderator
Команда форума
Это всё понятно, но пользователи то как будут менять esp_init_data_default.bin?
А Вы знаете формат esp_init_data_default.bin, какие байты за что отвечают ?

Зная формат, не сложно написать утилиту для его генерации.
 

pvvx

Активный участник сообщества
А Вы знаете формат esp_init_data_default.bin, какие байты за что отвечают ?

Зная формат, не сложно написать утилиту для его генерации.
Я пока говорю о той части, что устанавливается в FLASH_DOWNLOAD_TOOLS.
 

pvvx

Активный участник сообщества
А Вы знаете формат esp_init_data_default.bin, какие байты за что отвечают ?

Зная формат, не сложно написать утилиту для его генерации.
Ещё раз - разговор идет о C:\Espressif\xtensa-lx106-elf\bin\esptool.exe
Она задет заголовок бинарника для flash. Это описано тут: https://github.com/themadinventor/esptool
Вот, после трансляции вашей сборкой, что говорит о заголовках моё безобразие:
Код:
SDK version:0.9.4
Check Settings...Ok.
Flash Header:
Number of segments: 3
SPI Flash Interface: QIO
SPI CLK: 40MHz
Flash size: 512K
Entry point: 0x40100004
Segment 1: offset: 0x40100000, size: 25476
Segment 2: offset: 0x3ffe8000, size: 2864
Segment 3: offset: 0x3ffe8b30, size: 7748
Found the extra RAM: base:0x40106384, size:7292 bytes
WiFi mode:2 chl:1 phy:3 dhcp:1/1
....
И в iram, с текущим SDK, у нас не используются 7292 байта, а это цельный громадный буфер для многих дел...
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Ещё раз - разговор идет о C:\Espressif\xtensa-lx106-elf\bin\esptool.exe
Она задет заголовок бинарника для flash. Это описано тут: https://github.com/themadinventor/esptool
В новом esptool (он уже есть в 1.0.6) добавлена поддержка установки конфигурации SPI Flash
опция --flash_freq (установить частоту SPI Flash, поддерживается 40m, 26m, 20m, 80m, по-умолчанию = 40m),
опция --flash_mode (установить режим SPI Flash, поддерживается qio, qout, dio, dout, по-умолчанию = qio),
опция --flash_size (установить размер SPI Flash, поддерживается 4m, 2m, 8m, 16m, 32m, по-умолчанию = 4m);
 

pvvx

Активный участник сообщества
В новом esptool (он уже есть в 1.0.6) добавлена поддержка установки конфигурации SPI Flash
Только для C:\Espressif\utils\esptool.exe, а она умеет делать только 0x00000.bin и 0x40000.bin. Т.е. сегменты не перенести на другие адреса (к примеру как в nodemcu)?
 

CHERTS

Moderator
Команда форума
Только для C:\Espressif\utils\esptool.exe, а она умеет делать только 0x00000.bin и 0x40000.bin. Т.е. сегменты не перенести на другие адреса (к примеру как в nodemcu)?
C:\Espressif\utils\esptool.exe может делать на любые адреса, в nodemcu как раз файл elf распиливается на секции, правда она делает это не чесно, а с помощью стандартных *-elf-nm и *-elf-objcopy инструментов из gcc. А вот C:\Espressif\xtensa-lx106-elf\bin\esptool.exe как раз автономна и пилит elf сама без участия утилит компилятора, в этом её плюс.

C:\Espressif\utils\esptool.exe я уберу из слудующей версии DevKit, на замену её придет обновленная C:\Espressif\xtensa-lx106-elf\bin\esptool.exe, которая написана на Си, может быть собрана под Windows/Linux/MacOSX, в новой версии она умеет шить платы с esp.

Пример прошивки утилитой C:\Espressif\xtensa-lx106-elf\bin\esptool.exe:
C:\Espressif\xtensa-lx106-elf\bin\esptool.exe -cp COM2 -cd ck -cb 256000 -ca 0x00000 -cf 0x00000.bin -vvv
C:\Espressif\xtensa-lx106-elf\bin\esptool.exe -cp COM2 -cd ck -cb 256000 -ca 0x40000 -cf 0x40000.bin -vvv
Краткое описание опций:
-cp <device> Выбор COM-порта
Для Windows по-умолчанию COM1
-cd <board> Выбор метода перезагрузки платы
Доступны следующие варианты:
none Без манипуляций с сигналами DTR/RTS
ck сигнал RTS управляет RESET или CH_PD, сигнал DTR управляет GPIO0
wifio сигнал DTR управляет GPIO0 через PNP транзистор, а RESET через конденсатор
-cb <baudrate> Скорость COM-порта, по-умолчанию 115200
-ca <address> Адрес загрузки файла во flash-память
По-умолчанию 0x00000000
-cf <filename> Имя файла для загрузки во flash-память
-v -vv -vvv Уровень вывода отладочных сообщений
 
Последнее редактирование:

pvvx

Активный участник сообщества
C:\Espressif\utils\esptool.exe может делать на любые адреса, в nodemcu как раз файл elf распиливается на секции, правда она делает это не чесно, а с помощью стандартных *-elf-nm и *-elf-objcopy инструментов из gcc. А вот C:\Espressif\xtensa-lx106-elf\bin\esptool.exe как раз автономна и пилит elf сама без участия утилит компилятора, в этом её плюс.
Но у xtensa-lx106-elf\bin\esptool.exe свои глюки.
Вопрос поднят по причине - настало время раскидать исходники библиотек Espressif для замены убогих функций в ней... Соответственно не потребуются "области-дырочки" для её сохранений параметров во flash, что даст возможность другого распределения блоков в объеме flash...
 

CHERTS

Moderator
Команда форума
Но у xtensa-lx106-elf\bin\esptool.exe свои глюки.
Например какие? Я сегодня собрал и прошил ей все примеры из моего DevKit, ни одного глюка не заметил.

Вопрос поднят по причине - настало время раскидать исходники библиотек Espressif для замены убогих функций в ней... Соответственно не потребуются "области-дырочки" для её сохранений параметров во flash, что даст возможность другого распределения блоков в объеме flash...
Для другого распределения можно подправить/написать_заново esptool (питоновскую или Си'шную версии), главное знать-придумать какое будет распределение.
 

pvvx

Активный участник сообщества
Например какие? Я сегодня собрал и прошил ей все примеры из моего DevKit, ни одного глюка не заметил.
А она хоть что выводит? В маке у неё вывод закрыт. Она может жаловаться сколько угодно, но ничего не отобразится в большинстве маке...
 

pvvx

Активный участник сообщества
Доступна новая версия моей сборки Unofficial Development Kit for Espressif ESP8266 v1.0.8
Список изменений на первой странице
Не работает C:\Espressif\utils\esptool.exe elf2image
Требует PATH. В makefile проблемно с path...
Кроме того она ищет xtensa-lx106-elf-nm.exe :confused: т.е. нафига ей path, если она уже подставляет жесткие имена и вся система у вас не перемещаемая (и создана для 'убивства' SSD ;)) ?
Если добавить в make:
PATH := $(XTENSA_TOOLS_ROOT);$(PATH)
то работает.
И с какой целью C:\Espressif\examples\nodemcu-firmware\Makefile лезет в директорию ниже?
#PDIR := ../$(PDIR)
#sinclude $(PDIR)Makefile
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Не работает C:\Espressif\utils\esptool.exe elf2image
Требует PATH. В makefile проблемно с path...
Кроме того она ищет xtensa-lx106-elf-nm.exe :confused: т.е. нафига ей path, если она уже подставляет жесткие имена и вся система у вас не перемещаемая (и создана для 'убивства' SSD ;)) ?
Если добавить в make:
PATH := $(XTENSA_TOOLS_ROOT);$(PATH)
то работает.
Забыл подправить переменные tool_nm и tool_objcopy в esptool.py, во вложении все подправлено.

И с какой целью C:\Espressif\examples\nodemcu-firmware\Makefile лезет в директорию ниже?
#PDIR := ../$(PDIR)
#sinclude $(PDIR)Makefile
Видать хочет стать самостоятельным и обособленным от автора ;) Подправил, теперь не будет лезть.
 

Вложения

pvvx

Активный участник сообщества
Видать хочет стать самостоятельным и обособленным от автора ;) Подправил, теперь не будет лезть.
Опять менять make? Только утром поменял :)
Там ещё фича есть. Если дать опции -ff 80m -fm qio -fs 4m при создании бинарника (команда elf2image), то при загрузке (write_flash) по умолчанию все равно надо давать их опять. Иначе ff 40MHz и т.д.
Ещё мелочи - help не правильный:
Код:
C:\Espressif\utils>esptool.exe write_flash -h
usage: esptool write_flash [-h] [--flash_freq {40m,26m,20m,80m}]
                           [--flash_mode {qio,qout,dio,dout}]
                           [--flash_size {4m,2m,8m,16m,32m}]
                           addr_filename [addr_filename ...]

positional arguments:
  addr_filename         Address and binary file to write there, separated by
                        space

optional arguments:
  -h, --help            show this help message and exit
  --flash_freq {40m,26m,20m,80m}, -ff {40m,26m,20m,80m}
                        SPI Flash frequency
  --flash_mode {qio,qout,dio,dout}, -fm {qio,qout,dio,dout}
                        SPI Flash mode
  --flash_size {4m,2m,8m,16m,32m}, -fs {4m,2m,8m,16m,32m}
                        SPI Flash size in Mbit
Отсутствие указания куда давать порт и скорость...
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Опять менять make? Только утром поменял :)
Там ещё фича есть. Если дать опции -ff 80m -fm qio -fs 4m при создании бинарника (команда elf2image), то при загрузке (write_flash) по умолчанию все равно надо давать их опять. Иначе ff 40MHz и т.д.
Да, есть такое дело, при write_flash с нестандартными flash_mode, flash_freq и flash_size нужно явно их указывать, не помню в доке по esptool это написано или нет.
 

pvvx

Активный участник сообщества
Главное забыл - нигде не написано, что при прошивке двух файлов
esptool.exe стирает область между ними. Т.е. если записать первый файл в начало flash, а второй в конец flash, то область между ними будет стерта :)
 

CHERTS

Moderator
Команда форума
Главное забыл - нигде не написано, что при прошивке двух файлов
esptool.exe стирает область между ними. Т.е. если записать первый файл в начало flash, а второй в конец flash, то область между ними будет стерта :)
Беглый эксперимент только что показал, что это не так.
Собрал esphttpd с 2 файлами, 0x00000 и 0x40000, прошил их
c:/Espressif/utils/esptool.exe -p COM3 -b 256000 write_flash 0x00000 firmware/eagle.flash.bin 0x40000 firmware/eagle.irom0text.bin
потом прошил webpages.espfs по адресу 0x12000
c:/Espressif/utils/esptool.exe -p COM3 -b 256000 write_flash 0x12000 firmware/webpages.espfs
проверил работу httpd-сервера, странички показывает
потом снова прошиваем по 0x00000 и 0x40000
c:/Espressif/utils/esptool.exe -p COM3 -b 256000 write_flash 0x00000 firmware/eagle.flash.bin 0x40000 firmware/eagle.irom0text.bin
по Вашей логике сейчас область с 0x12000 где у нас webpages.espfs должна быть затерта, но это не так, открываю страничку и все работает, значит область между 2 файлами не стирается.
 
Сверху Снизу