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

Вопрос А кому-нибудь удалось собрать из примера esphttpd с возможностью OTA?

Slacky

Member
Плата - Wemos D1 mini 4 мегами на борту.

Я как ни старался, ничего не получается. Заливать он просит или user2.bin или *.ota. При заливке user2.bin плата просто зависает и сбрасывается по wdt, но потом уже и не грузится. Пишет такое -

Код:
2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 32Mbit(1024KB+1024KB)
jump to run user2 @ 101000

Fatal exception 0(IllegalInstructionCause):
epc1=0x40211371, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
А если не исключение, то error magic!

Если же залить *.ota, то файл прекрасно заливается, но прошивка не меняется, после сброса работает то, что было до заливки.

Может кто пнет в нужную сторону?

Спасибо.
 

Slacky

Member
Не понятно что и как Вы заливаете.
Но возможно не залит файл параметров WIFI. В новую плату надо залить один раз.
При сборке получается три файла - *.user1.bin, *.user2.bin и *.ota. Собственно два последних и пытаюсь залить через форму, которая лежит в html/flash.

Можно для тупых более развернуто - что такое "файл параметров WiFi" ?

Плата запускается в STA режиме, подключается к роутеру. На страничку сервера можно зайти по адресу 192.168.100.20 ...
 

Slacky

Member
еще есть файл esp_init_data_default.bin - он грузится в последние сектора адрес зависит от объема флеш и содержит параметры для WIFI
Про это я знаю.

Код:
### Flash size 32Mbit-C1: 1024KB+1024KB
    boot_v1.2+.bin              0x00000
    user1.2048.new.5.bin        0x01000
    esp_init_data_default.bin   0x3fc000 (optional)
    blank.bin                   0xfe000 & 0x3fe000
Но тогда в makefile.ota ошибка. Потому что при таких настройках

Код:
BLANKPOS=$$(printf 0x%X $$(($(ESP_SPI_FLASH_SIZE_K)*512-0x2000)))
INITDATAPOS=$$(printf 0x%X $$(($(ESP_SPI_FLASH_SIZE_K)*512-0x4000)))
blank.bin и esp_init_data_default.bin заливается по адресам

Код:
c:/Espressif/utils/ESP8266/esptool.exe --port COM6 --baud 921600 write_flash --flash_freq 40m --flash_mode qio --flash_size 32m-c1 0x1FE000 c:/Espressif/ESP8266_SDK/bin/blank.bin 0x1FC000 c:/Espressif/ESP8266_SDK/bin/esp_init_data_default.bin
 

Slacky

Member
----------------------
esp_init_data_default.bin надо залить один раз загрузчиком.
При загрузке OTA его грузить не надо.
Но один раз загрузить надо обязательно в новую ESP так как в ней обычно старое SDK.
Ну в общем сходу повторить не удалось, пришлось почитать, как строится загрузка и с какого адреса. В принципе все правильно, user2.bin пытается стартовать с 101000. Останется только понять, куда сервер грузит прошивку и прочее.

Вопрос после прочтения доков - что за файл master_device_key.bin?
 

Slacky

Member
В общем немного разобрался в принципе заливки файлов. Но все равно не до конца.

Во-первых. Если у вас на борту флеш 4 мега, то нужно дорабатывать makefile.ota и
Код:
CgiUploadFlashDef uploadParams = {}
в user_main.c, так как там все заточено на 512 мег.

Далее. У него или ошибка в коде или я не разобрался. Если нужно заливать user2.bin то он льется по адресу 0x1000 всегда, а это приводи к краху системы. Правильно при user2.bin заливается только файл *.ota.

А вот если нужно залить user1.bin, то уже к краху приводит заливка файла *.ota, а файл user1.bin прекрасно заливается.

Но все равно, обновления заливаются только два раза, т.е. первый раз для user2.bin, второй раз для user1.bin,. А вот третья попытка заливки user2.bin приводит к исключению.
Код:
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 2592, room 16
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4
tail 0
chksum 0x22
csum 0x22

2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 32Mbit(1024KB+1024KB)
jump to run user2 @ 101000

Fatal exception 28(LoadProhibitedCause):
epc1=0x4021ebf7, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
 

Kitaro

New member
Добрый день. Извините, что я так врываюсь, а при сборке примера у Вас не бьіло ошибки
mingw32-make.exe: *** No rule to make target 'libesphttpd/mkupgimg/', needed by 'libesphttpd/mkupgimg/mkupgimg'. Зупинка.
 
Сверху Снизу