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