Serial flash example
Overview
Example demonstrates how to flash ESP32 from another (host) MCU using esp_serial_flash component API. In this case, ESP32 is also used as host MCU. Binary to be flashed from one ESP32 to another is stored in partition named spiffs.
This example is based on spiffsgen example located in IDF. For more information how to use SPIFFS Image Generator, refer to spiffsgen example
Following steps are performed in order to re-program target's memory:
- UART1 through which new binary will be transfered is initialized.
- Filesystem is initialized and mounted.
- Binary file is opened and its size is acquired, as it has to be known before flashing.
- Host puts slave device into boot mode tries to connect by calling
loader_connect(). - Then
loader_flash_start()is called to enter flashing mode. loader_flash_write()function is called repeatedly until the whole binary image is transfered.
Hardware Required
- Two development boards with ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.).
- A USB cable for power supply and programming.
Hardware connection
Table below shows connection between two ESP32 devices.
| ESP32 (host) | ESP32 (slave) |
|---|---|
| IO26 | IO0 |
| IO25 | RESET |
| IO4 | RX0 |
| IO5 | TX0 |
Build and flash
To run the example, type the following command:
idf.py -p PORT flash monitor(To exit the serial monitor, type Ctrl-].)
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
Example output
Here is the example's console output:
...
I (342) example: Initializing SPIFFS
I (482) example: Image size: 144672
I (902) example: Connected to target
I (1732) example: Start programming
I (1832) example: packet: 0 written: 1024 B
I (1932) example: packet: 1 written: 1024 B
...
I (16052) example: packet: 140 written: 1024 B
I (16152) example: packet: 141 written: 288 B
I (16152) example: Finished programming