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

Нужна помощь Запись прошивки в область памяти user1(user2)

vup2016

New member
Здравствуйте!
Пишу прошивку, которая сама обновлялась бы по воздуху.
Загрузка прошивки с сервера, переключение из области в область происходит "отменно" до тех пор, пока не раскомментил строчку, где происходит стирание и запись данных в память (spi_flash_erase_sector, spi_flash_write), и... вот что происходит потом, см. ниже

"Fatal exception 29(StoreProhibitedCause):
epc1=0x40209238, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000"

Стирание сектора user2 произвожу от адреса сектора 0x101: spi_flash_erase_sector(0x101); запись от адреса 0х101000: spi_flash_write(0х101000...);

Использую код для записи в память ESP8266/upgrade_lib.c at master · willemwouters/ESP8266 · GitHub

А также от SDK взял boot_v1.6.
Размер памяти (областей) SPI Flash Size & Map: 32Mbit(1024KB+1024KB).

Пробовал использовать функцию от SDK "system_upgrade()", итог такой же..
"Fatal exception 29(StoreProhibitedCause): ..."

Можете помочь разобраться!?...Спасибо!
 

vup2016

New member
Судя по другим форумам и описанию в github Memory Map · esp8266/esp8266-wiki Wiki · GitHub область памяти 0x101000 (оно же 0x40301000h) не понятно как работает, т.е. доступ к сектору 40300000h закрыт. Как для чтения так и для записи.
Таким образом, при попытке записи или чтении данных по адресу с выше 0x100000 (0x40301000h) приводит к фатальной ошибке.

Остается вопрос: когда в ручную прошиваю область user2 (0x101000 оно же 0x40301000h) bootloder послушно загружает сектор 0x101000 и программа работает исправно... как это может быть?

PS: .dl использую при этом eagle.app.v6.new.2048, в котором есть строчка
"irom0_0_seg : org = 0x40201010, len = 0xE0000"
т.е. ссылается на адрес в памяти 0x01010...
 
Последнее редактирование:
Сверху Снизу