To communicate with an ESP32 the ESP-IDF (Espressif IoT Development Framework) can be used. This framework provides a collection of useful scripts to communicate with your ESP device. The framework is supported on Windows, Linux and macOS.
You can download the ESP-IDF repository and extract the contents into a folder.
Note that you need to have python 3 installed. For example by using
brew install python on macOS. In addition, the
esptool library is required by running
pip install esptool in your terminal.
Reading the Partition Table
The partition table is located at
0x8000 (32768) on older, and on
0x9000 (36384) on newer systems. Its length is always
0xc00 (3072) bytes.
esptool.py, this can be read out, for example by the command
python $(IDF_PATH)/components/esptool_py/esptool/esptool.py read_flash 0x9000 0xc00 partitions.img
To create a “human” readable csv file, you can use the
python $(IDF_PATH)/components/partition_table/gen_esp32part.py partitions.img > partitions.csv
In my case, the partition table looks as follows:
Writing the Partition Table
When using an IDE like PlatformIO, the flashing of the partition table is part of the build process. For this, just add the following line to your
board_build.partitions = partitions.csv
The Manual Way
First, you have to generate the partition table binaries. This can be done with
python $(IDF_PATH)/components/partition_table/gen_esp32part.py partitions.csv partitions.bin
Then you can use esptool.py (which we already used for reading) for writing:
python $(IDF_PATH)/components/esptool_py/esptool/esptool.py write_flash -z 0x9000 partitions.bin
More details about Partition Tables, how to create custom tables, handle different partition types and the flashing precedure are listed on the official Espressif documentation.