ESP32

ESP32: how to read and write the partition table of an ESP device?

By

in

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.

With the 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 gen_esp32part.py tool:

python $(IDF_PATH)/components/partition_table/gen_esp32part.py partitions.img > partitions.csv

In my case, the partition table looks as follows:

preview of the ptable.csv file

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 platformio.ini:

board_build.partitions = partitions.csv

The Manual Way

First, you have to generate the partition table binaries. This can be done with idf.py:

python $(IDF_PATH)/components/partition_table/gen_esp32part.py partitions.csv partitions.bin

After this 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.

Foto von Vishnu Mohanan auf Unsplash



Comments

4 responses to “ESP32: how to read and write the partition table of an ESP device?”

  1. HI Mathias, your title is “ESP32: how to READ and WRITE the partition table of an ESP device?” but you only explain how to READ!!!! Have you fallen asleep during the writing of this long article?

    1. Mathias Lipowski Avatar
      Mathias Lipowski

      I updated the post. No, I didn’t fall asleep 😉 The write process was just not that spectacular when using PlatformIO as IDE. In this case, everything was less complicated.

  2. You did the read, where is the write?

  3. Hans-Joachim Verch Avatar
    Hans-Joachim Verch

    Ich habe mich intensiv mit dem Thema eigene ESP32 S3 Partition Table für die Arduino IDE V2 beschäftigt.
    Als Ergebnis habe ich ein Programm in C# geschrieben.
    Mit dem Programm kann man Partitionstabellen zur Verwendung in der Arduino IDE erstellen. Das Programm „ESP32 – Board & Partition“ ergänzt die Arduino IDE.  

    Mit dem Programm sind folgende Funktionen möglich:

    Eigene Partitionstabellen für ESP32 Module erstellen und exportieren oder auch direkt in der Arduino IDE verwenden
    ESP32-Board Auswahlliste in der Arduino IDE anpassen
    Eigenes ESP32 Board für die Verwendung in der Arduino IDE erstellen

    Zusätzlich beinhaltet das Programm einen Arduino Sketch zum Testen der Dateisysteme Spiffs, LittleFS und FAT. Dieser Sketch enthält auch die Ausgabe des aktuell verfügbaren Größe des Flash- und RAM Speicherbereiches.
    Das Programm kann zwischen den Sprachen deutsch und englisch umgeschaltet werden.
    Wenn Interesse am Thema besteht, dann könnte ich eine Beschreibung des Programmes in deutsch und englisch bereitstellen.

Leave a Reply

Your email address will not be published. Required fields are marked *