Конструктор прошивки ESP32/ESP32C3/ESP32S2/ESP32S3 (обновлено: 26 Jan 2023, 21:30:57)

Описание конструктора прошивки для wifi модуля ESP32(он же ESP32S). Прошивка основана на SDK RTOS(esp-idf) производителя чипа.

Поддержка модулей ESP32S, ESP32S2, ESP32C3, ESP32S3.

Тестовая поддержка ESP32S3. Могут быть ошибки компиляции.


Распиновка одного из распространенных модулей на базе ESP32:


Не проверенные опции:

ADC KEY, TSL2561, DS1621, Email check (не проверено без SSL), RFID замок(не проверен SPI), АЦП PCF8591, MPR121, UART bridge, VirtualWire 433/315, iButton

Просьба сообщить через обратную связь, работают ли у Вас указанные выше опции.


Опции, имеющие проблемы или недоделки:

IR передатчик (доступен только NEC и RAW протоколы)

IR приемник (принимает только NEC)


Прошивка модуля

Для начала соберем прошивку в конструкторе с необходимыми Вам функциями. Рекомендуется включать опции NVS настройки 2 и Экспорт/Импорт настроек.

Автоматическая прошивка модуля с загрузкой всех необходимых файлов можно произвести через WiFi-Iot Flasher (документация и ссылка на софт)

Прошивка через сторонние флешеры:

Прошивка через Flash_download_tools . Настройка DoNotChgBIn должна быть выключена.

Перед первой прошивкой в некоторых случаях, когда модуль не стартует из-за мусора в памяти требуется прошить пустой файл. Или воспользоваться опцией ERASE в настройках Flash tools.


Одним файлом - можно скачать и прошить только один этот файл по адресу 0x0000.

Или прошить 3 файла по указанным адресам:

0x1000 - загрузчик прошивки (bootloader), адрес для ESP32, ESP32S2. Для ESP32C3 и ESP32S3 - 0x0000 адрес;

0x8000 - таблица разметки разделов. Определяет размер секций и наличие SPIFFS  диска;

0x10000 - сама прошивка. Только этот файл изменяется при компиляции новой прошивки.

Обратите внимание на размер flash памяти, обычно в модулях установлена память на 4 или 16 мегабайт. В прошивающей программе необходимо указать этот размер в мегабитах ! Установленный размер памяти в мегабитах видно в программе Flash download tools в окне Detected info.

Важно ! Если в модуле 4 мегабайта памяти, то  при прошивке через программатор файл прошивки(адрес 0x10000) должен быть не больше 1.6 мегабайта  !

Необходимо указать режим работы flash памяти DIO. В режиме QIO модули не работают, bootloader собран в режиме DIO.

Для загрузки прошивки необходимо GPIO 0 подтянуть к GND и нажать reset.

Готовые платы с USB-UART обычно автоматически запускаются в режиме прошивки, но иногда при проблемах требуется так же замыкать GPIO 0. Иногда для этого отдельно выведена кнопка BOOT.


Особенности прошивки ESP32S2 mini

Три варианта прошивки:

1. Прошить через  flash_download_tool_3.9.3 - она поддерживает ESP32S2. При подключении через USB нужно выключить no-stub установив в конфиге no-stub = True 

2. Через USB используя прошивку dfu_esp32s2.bin . Требуется установка драйвера через программу https://zadig.akeo.ie/ . Прошить через онлайн прошиватор https://dfu.stetelthings.com/. 

3. UART0 не выведен . Шьем через UART1(GPIO17-U1TXD, GPIO18-U1RXD ) через внешний USB-UART. Прошивка через esptools требуется ключ --no-stub.

В обеих случая для запуска режима прошивки требуется зажать кнопку "0" сбросив чип по питанию или нажав кнопку RST.


Ошибки запуска модуля

esp_image: Image length 1116272 doesn't fit in partition length 1048576 - Сообщение о том, что размер файла прошивки больше секции, в данном случае 1 мегабайта(1048576 байт). Необходимо пересобрать прошивку меньшего размера. Ошибка возникает, если не читать предыдущий абзац.

boot: Failed to verify partition table - Ошибка таблицы разделов, возникает, если в модуле находится мусор от предыдущей прошивки. Требуется очистка модуля бланком.

Brownout detector was triggered - нехватка питания, срабатывает защита. Помогает установка электролита или замена кабеля(если он тонкий китайский)

Ошибки обновления по OTA

Если на главной ошибка:

Firmware update ERROR ! (code 3) - это значит не собрана прошивка, например из-за ошибки компиляции.

Firmware update ERROR ! (code 2) - превышен размер файла прошивки. Изучайте вариант переразметки памяти.

Firmware update ERROR ! (code 1) - у модуля нет доступа к Интернету или к серверу wifi-iot.com. Плохой интернет.

Не забываем, что в UART можно посмотреть более точную причину и состояние обновления.

Ошибки во время работы модуля

***ERROR*** A stack overflow in task vsens has been detected -ошибка переполнения стека задачи (в данном случае vsens). Произошла ситуация, когда задаче потребовалось больше ресурсов, чем выделено.

Ecли подобные ошибки появляются в UART , то необходимо сообщить в обратную связь для устранения проблемы.

Запуск модуля.

Первоначальная настройка требует запустить режим Safe mode. В эфире должна появится точка доступа WiFi-IoT. При пустых настройках точки доступа Safe mode включается автоматически.

Safe mode можно запустить замыканием GPIO 18 и 19 и перезапуском модуля. Если данные GPIO заняты и установка перемычки невозможна, то можно воспользоваться опцией Safe GPIO.

После подключения к точке доступа необходимо зайти через браузер по адресу 192.168.4.1 и настроить там параметры доступа к своему роутеру.

Прошивка через OTA или через веб интерфейс.

Прошивка поддерживает OTA - это обновление прошивки напрямую из конструктора на вкладке Firmware_update. В Free режиме будет загружена прошивка по умолчанию, в PRO будет загружаться прошивка из Вашего личного кабинета.

С 29.11.17 в модуле доступно обновление прошивки с локального компьютера, прошивку можно загрузить на этой же вкладке обновления по OTA. Опция доступна только в PRO режиме !

Структура разметки памяти:

При запуске модуля в UART выдается информация о разметке модуля.

Пример для 4 мегабайт flash с секциями по 1 мегабайту(старая разметка):

I (113) boot: ## Label            Usage           Type ST Offset   Length
I (135) boot:  0 nvs              WiFi data       01 02 00009000 00004000
I (159) boot:  1 otadata         OTA data        01 00 0000d000 00002000
I (182) boot:  2 phy_init         RF data          01 01 0000f000 00001000
I (205) boot:  3 factory          factory app      00 00 00010000 00100000
I (228) boot:  4 ota_0            OTA app          00 10 00110000 00100000
I (251) boot:  5 ota_1            OTA app          00 11 00210000 00100000
Пример для 4 мегабайт flash с секциями по 1.6 мегабайт и SPIFFS 512кб (новая разметка):
I (54) boot: Partition Table:
I (58) boot: ## Label            Usage          Type ST Offset   Length
I (65) boot:  0 nvs              WiFi data        01 02 00009000 00004000
I (73) boot:  1 otadata          OTA data         01 00 0000d000 00002000
I (80) boot:  2 phy_init         RF data          01 01 0000f000 00001000
I (88) boot:  3 ota_0            OTA app          00 10 00010000 00191000
I (95) boot:  4 ota_1            OTA app          00 11 001b0000 00191000
I (98) boot:  5 storage          Unknown data     01 82 00341000 00080000

Разметка модуля имеет несколько секций, в том числе настройки OTA(otadata), настройки wif(nvs) и калибровки wifi(phy_init)
Секция factory содержит прошивку, которую обычно нужно зашить при первом использовании модуля, а уже при использовании OTA эта секция не используется.
ota_0 и ota_1 содержат прошивки, которые чередуются при обновлении OTA. По этой причине, если уже использовалось OTA ,а нужно зашить прошивку по кабелю,то требуется уже прошивать секцию OTA, которая грузится в данный момент. Это видно далее в логах UART в виде строки I (305) boot: Loading app partition at offset 00110000
Столбец Offset содержит начальный адрес секции, а Length её длину, этот параметр ограничивает максимальный размер прошивки, которую можно залить в модуль. Адрес секции ota_1, а так же длина обеих секций ota изменятся, если сделать переразметку flash памяти.

Данная таблица разметки находится по адресу flash памяти 0x8000
Конструктор прошивки выдает по умолчанию файл разметки для flash 4 мегабайт. С 9.05.20 секции по 1600кб. SPIFFS 512кб.
Файл таблицы для 16 мегабайт можно скачать тут. Секции по 2 мегабайта.

Переразметка flash памяти(актуально для прошивки до 9.05.20)

Если модуль с нуля прошит после 9.05.20, то эта команда не требуется !!!

Переразметка позволяет увеличить максимальный размер секции OTA с 1024 кб до 1348 кб.

Запускается командой http://[ip адрес]/patchpartions , Необходимо чтобы была загружена OTA partion 1 (смотрим на вкладке debug) , обновитесь по ОТА, чтобы была нужная секция. Естественно, что нужно пытаться обновлять прошивку, чтобы она укладывалась в 1 мегабайт.

Откат загруженной прошивки

С помощью команды http://[ip адрес]/configpartion?st=x можно переключится на предыдущую прошивку, где x- это номер партиции, на которую нужно переключится (1 или 2). Текущую партицию можно посмотреть в debug.

Режим PRO

Режим PRO дает возможность использовать модуль в полную силу. Активация модуля происходит на вкладке лицензий личного кабинета.

Работа с UART устройствами

Чип ESP32 имеет 3 UART (0,1,2), ESP32S2 и ESP32C3 - 2 UART(0 и 1). На данный момент UART 0 занят под debug, при его выборе в опциях отладка отключается - рекомендуется переназначать его на другие GPIO. 

У каждой UART опции в дополнительных настройках необходимо указать номер UART, который не должен пересекаться с другими UART устройствами. Требуется так же указать GPIO выводы, они никак не привязаны к номеру UART и могут быть назначены любые свободные в указанном диапазоне.

Некоторые опции экперементально поддерживают программный UART выбрав номера UART 3 или 4.

Сравнительная таблица чипов

ЧипАппаратный
ethernet
Bluetooth
Количество
UART
Количество
 GPIO
Количество
АЦП
Аппаратный
ШИМ
USB
ОЗУ*
ESP8266нетнет1 + 1 только TX161нетнет
40 (RTOS)
ESP32дада3408данет245
ESP32S2нетнет2478дада110
ESP32C3нетда2225данет**180
ESP32S3нетда3478дада260
ESP32C2нетда2215данет**?

* - примерное свободное ОЗУ на "пустой" прошивке.

** - USB только для отладки и прошивки.


Отладочная информация на UART порте

Через UART0 на скорости 115200 выводится отладочная информация модуля. Здесь видно все ошибки. При проблемах работы прошивки просьба сообщать эту информацию разработчику.

Для вывода данных подходит приложение Putty в режиме uart монитора.


Распиновка выводов чипа ESP32

Тут не отображены GPIO 6-11 , использующиеся под SPI Flash память.

GPIO  20, 24, 28, 29 ,30, 31  не выведены на модулях и нигде не фигурируют в документации(?) 37 и 38 так же часто не доступны на модулях.

ADC2_CHx не доступны в SDK на данный момент из-за конфликта с WI-FI. С учетом отсутствия GPIO 37 и 38 доступны всего 6 ADC.

GPIO 34 -39 доступны только на вход, на выход сконфигурировать вывод невозможно. Назначить выводы для I2C так же не получится.

Системные GPIO, которые мешают штатному запуску модуля, должно быть: GPIO0 - 1, GPIO12 -1(3.3в) 0(1.8в) в зависимости от модели spi флеш памяти.

Для прошивки  требуется чтобы GPIO2 и GPIO0 были на GND. Обычно схема у готовых плат это делает автоматически

При некорректном режиме включения системных GPIO в UART отладке будет другое отличное от сообщение SPI_FAST_FLASH_BOOT (это нормальный режим загрузки с SPI FLASH)

Вывод модуля Имя Pin Описание
1 GND Земля
2 EN Разрешить работу чипа
3 SVP SENSOR_VP, GPIO36, ADC1_CH0, RTC_GPIO0
4 SVN SENSOR_VN, GPIO39, ADC1_CH3, RTC_GPIO3
5 IO34 GPIO34, ADC1_CH6, RTC_GPIO4
6 IO35 GPIO35, ADC1_CH7, RTC_GPIO5
7 IO32 GPIO32, 32K_XP (кварц 32,768 кГц), ADC1_CH4, TOUCH9, RTC_GPIO9
8 IO33 GPIO33, 32K_XN (кварц 32,768 кГц), ADC1_CH5, TOUCH8, RTC_GPIO8
9 IO25 GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6
10 IO26 GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7
11 IO27 GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17
12 IO14 GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK
13 IO12 GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ
14 IO13 GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, U0CTS
15 IO15 GPIO15, ADC2_CH3, TOUCH3, RTC_GPIO13, MTDO, HSPICS0, U0RTS
16 GND Земля
17 IO2 GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP
18 Io0 GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1
19 IO4 GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD
20 IO16 GPIO16, HS1_DATA4
21 3V3 3.3V
22 IO17 GPIO17, HS1_DATA5
23 IO5 GPIO5, VSPICS0, HS1_DATA6
24 IO18 GPIO18, VSPICLK, HS1_DATA7
25 IO23 GPIO23
26 IO19 GPIO19, VSPIQ, HS2_DATA2
27 IO22 GPIO22, VSPIWP, HS2_CLK
28 U0RX U0RXD, GPIO3, CLK_OUT2, HS2_DATA0
29 U0TX U0TXD, GPIO1, CLK_OUT3, HS2_DATA1
30 IO21 GPIO21, VSPIHD, HS2_CMD
31 GND Земля