Дмитрий DarkByte Москин

Мой блог, да.
logo

Установка среды сборки прошивки для ESP32

Опубликовано 09.01.2016 автором Дмитрий Москин
После простой пайки отладочной платы настало время собрать среду для компиляции прошивки. В целом не важно, под какой ОС это делать, но в моём случае компиляция производится под Debian, загрузка в плату под Windows. Установку кросс-компилятора и сборку происходим из под обычного пользователя
su nonrootuser
sudo apt-get install git autoconf build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-i386 python-serial libexpat-dev
sudo mkdir /opt/Espressif
sudo chown $USER /opt/Espressif/
cd /opt/Espressif/


git clone -b esp108-1.21.0 git://github.com/jcmvbkbc/crosstool-NG.git
cd crosstool-NG
./bootstrap && ./configure --prefix=`pwd` && make && make install
./ct-ng xtensa-esp108-elf
./ct-ng build


Сборка займёт некоторое время, в моём случае на виртуальной машине это заняло 43 минуты.
[INFO ]  Build completed at 20160109.125343
[INFO ] (elapsed: 43:07.05)
[INFO ] Finishing installation (may take a few seconds)...


Теперь собираем пробный проект из комплекта ESP32 RTOS
export PATH=/opt/Espressif/crosstool-NG/builds/xtensa-esp108-elf/bin:$PATH

mkdir ~/Workspace
cd ~/Workspace
git clone https://github.com/espressif/ESP32_RTOS_SDK.git
cp ~/Workspace/ESP32_RTOS_SDK/examples/project_template ~/Workspace/ -r

mkdir -p ~/Workspace/ESP32_BIN
export SDK_PATH=~/Workspace/ESP32_RTOS_SDK
export BIN_PATH=~/Workspace/ESP32_BIN

cd ~/Workspace/project_template
make clean
make


Если всё прошло успешно, то в результате должны получиться следующие файлы
Generate related files successully in folder /home/darkbyte/Workspace/ESP32_BIN
boot.bin------------------>0x00000
irom1.bin----------------->0x04000
irom0_flash.bin----------->0x40000
user.ota------------------>(used for OTA)


Теперь настало время записать их во флеш память. Для этого можно воспользоваться утилитой, написанной на python esptool32.py (esptool.py от esp8266 не подойдёт), либо использовать программу под Windows ESP32_FLASH_DOWNLOAD_TOOL_V1.2.0.

В первом случае команда будет выглядеть примерно так:
cd ~/Workspace
esptool32.py --port /dev/ttyUSB0 --baud 115200 write_flash -fs 1m 0x0000 ESP32_RTOS_SDK/bin/boot.bin 0x04000 ESP32_BIN/irom1.bin 0x40000 ESP32_BIN/irom0_flash.bin 0xFE000 ESP32_RTOS_SDK/bin/blank.bin


Во втором случае всё тоже самое, только в гуёвом интерфейсе:


Перед тем как заливать прошивку, необходимо перевести модуль в режим программирования, для этого нужно подключить GPIO0 и GPIO2 к GND и передёрнуть питание (либо пин ENable). После прошивки IO0 и IO2 можно отключить, вновь передёрнуть, и если всё прошло нормально, то вывод в консоли должен слегка поменяться:

 ets Jul  5 2015,rst cause:1, boot mode:(33)

_stack_sentry: 0x3fffe1d0, __stack: 0x40000000,
_bss_start: 0x3fffcd48, _bss_end: 0x3fffe1d0,
_data_start: 0x3fffc000, _data_end: 0x3fffc864
load 0x40040000, len 2912, room 16
tail 0
chksum 0x6e
load 0x3ffd8000, len 1424, room 8
tail 8
chksum 0x1a
load 0x3ffd8590, len 568, room 0
tail 8
chksum 0xf3
csum 0xf3

********************************
* hello espressif ESP32! *
* pro cpu 2nd boot is running! *
********************************

2nd boot version : 1.0
SPI Speed : 40MHz
SPI Mode : DIO
SPI Flash Size : 1MB

jump to run addr @ 0x40000

phy, 20151117, 634
ht20 ,2412
pp_task_hdl : 3ffe52dc, prio:23, stack:1024
tcpip_task_hdl : 3ffe5cdc, prio:20,stack:512
current bin id 255
frc2_timer_task_hdl:3ffe7a14, prio:22, stack:512

ESP32 RTOS SDK: 1.1.0(42d074b) compiled @ Dec 18 2015 19:39:49
SDK version:1.1.0(42d074b)
mode : sta(60:01:94:00:00:00) + softAP(62:01:94:00:00:00)
add if0
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
add if1
ht20 ,2412
bcn 100


До прошивки версия SDK была 1.0.0, теперь она сменилась на 1.1.0, и пропал весь дополнительный вывод, ибо данная прошивка из полезной нагрузки содержит всего лишь один printf.

Если после прошивки модуль стал писать ошибку в духе:
bin status is 0 error
last bin 0 current 0
write bin info to system param zone failed
user code done

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