• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 файлами не стирается.
 
Сверху Снизу