[ESP32] [Table de partition]

Lors de la compilation du projet ESP32, la génération a réussi, mais les problèmes suivants ont été rencontrés lors du téléchargement:

Après les instructions du grand dieu, il a été constaté que le bootloader.bin compilé était trop volumineux: le bootloader.bin 29K nouvellement compilé. L'adresse de téléchargement par défaut est:

0x1000 : bootloader.bin
0x8000 : partition-table.bin
0x10000: user.bin

Calculez 0x8000-0x1000 = 0x7000 = 7 * 16 ^ 3 = 28672 <29K = 29000.
Solution:
idf.py menuconfig -> config Bootloader -> Bootloader journal verbosité -> la sortie No
recompilation, bootloader.bin réduire la taille de 20K, le téléchargement a réussi.


Profitez de cette occasion d'apprendre sous ESP32 la table de partition .

ESP32 nécessite un flash externe pour configurer et stocker le code utilisateur. Prenons l' exemple du GD25Q32C utilisé sur le site officiel du module ESP32-WROVER-B : 32Mbit / 4MB, sa structure sectorielle est la suivante:

un total de 1024 secteurs, chaque secteur 16 ^ 3 = 4096 (4KB), donc un total de 4MB.

Remarque: assurez-vous d'effacer (0xFF) avant d'écrire dans Flash avant d'écrire (0x00);


Vue d'ensemble de la table de partition:

En prenant partitions_two_ota_coredump comme exemple, sa partition sur 4 Mo de mémoire flash est la suivante:

Chaque flash ESP32 contient plusieurs applications et différents types de données. Par défaut, ESP32 fait clignoter une table de partition à l'adresse de décalage flash 0x8000, et sa longueur est 0xC00 (jusqu'à 95 entrées de table de partition peuvent être enregistrées). La somme de contrôle MD5 de la table est également enregistrée après les données de la table de partition, qui est utilisée pour vérifier l'intégrité de la table de partition. De plus, si la puce active la fonction de démarrage sécurisé, les informations de signature seront également enregistrées après la table de partition.

Chaque entrée de la table de partition contient: nom (étiquette), type (application, données, etc.), sous-type et adresse de décalage, taille, indicateurs en flash:

  • Champ Nom : il peut s'agir de n'importe quel nom, mais il ne peut pas dépasser 16 caractères (le contenu après celui-ci sera tronqué);

  • Champ de type : il peut être spécifié comme application (0) ou données (1), ou le nombre 0-254 (0x00-0xFE) peut être utilisé directement. 0x00-0x3F est réservé aux fonctions principales de esp-idf et ne doit pas être utilisé. Remarque. Le chargeur de démarrage ignorera les autres types de partition, à l'exception de app (0) ou data (1);

  • Sous-type : 8 bits de long, le contenu est lié au type spécifique (application ou données):

    1> Lorsque Type est une application, le champ Sous-type peut être spécifié comme usine (0), ota_0 (0x10)… ota_15 (0x1F) ou test (0x20). Factory (0) est la partition d'application par défaut et le chargeur de démarrage charge l'application par défaut; lorsque
    2> Type correspond à des données, le champ Sous-type peut être spécifié comme ota (0), phy (1), nvs (2) ou nvs_keys (4). ota (0) est la partition de données OTA, qui est utilisée pour stocker les informations de l'application OTA actuellement sélectionnée. La taille de cette partition doit être définie sur 0x2000. La partition phy (1) est utilisée pour stocker les données d'initialisation PHY, afin de garantir que le PHY peut être configuré séparément pour chaque périphérique, au lieu d'avoir à utiliser les données d'initialisation PHY unifiées dans le micrologiciel. nvs (2) est une partition spécialement conçue pour l'API de stockage non volatile (NVS). nvs_keys (4) est la partition de clé NVS.

  • Champ de décalage : l'adresse de décalage commence immédiatement après la partition précédente. S'il s'agit de la première partition, elle commence immédiatement après la table de partition. L'adresse de décalage de la partition d'application doit être alignée avec 0x10000 (64K). Si vous souhaitez autoriser les partitions de la table de partition à utiliser n'importe quel décalage de départ, vous devez laisser les champs de décalage de toutes les partitions de la table de partition (fichier CSV) vides.

  • Champ Taille : taille de la partition. La valeur par défaut est un nombre hexadécimal préfixé de 0x, qui prend en charge des multiples de K ou M (représentant respectivement 1024 et 1024 * 1024 octets).

  • Champ Indicateurs : Actuellement, seuls les indicateurs chiffrés sont pris en charge. Si le champ Indicateurs est défini sur crypté et que la fonction de cryptage Flash est activée, la partition sera cryptée. La partition d'application sera toujours cryptée, que le champ Indicateurs soit défini ou non.


Générer une table de partition binaire

Utilisez l' outil partition_table / gen_esp32part.py pour convertir entre les fichiers csv et binaires:

1> Convertissez manuellement le fichier csv en fichier binaire:

$ python gen_esp32part.py input_partitions.csv binary_partitions.bin

2> Convertissez manuellement les fichiers binaires en fichiers csv:

$ python gen_esp32part.py binary_partitions.bin input_partitions.csv

Vérification MD5

Certaines anciennes versions du chargeur de démarrage ne prennent pas en charge la vérification MD5.
Si on trouve une erreur de somme de contrôle MD5: nombre magique invalide 0xebeb, vous pouvez:
. 1) gen_esp32part.py du md5sum --- désactiver
2) idf.py menuconfig -> la partition de la table -> MD5 checksum pour Générer la table de partition
de correction MD5 Testez.


Programmation et effacement de la table de partition:

Utilisez l'outil esptool.py pour programmer la table de partition:

$ idf.py partition_table-flash

Remarque:

1) L'utilisation de la commande flash $ idf.py va tout graver, y compris la table de partition.
2) La mise à jour de la table de partition n'effacera pas les données précédemment stockées conformément à la table de partition. À ce stade , vous pouvez utiliser la commande $ idf.py erase_flash ou $ esptool erase_flash pour effacer tout le contenu du flash.

Publié 30 articles originaux · gagné 12 · vues 8261

Je suppose que tu aimes

Origine blog.csdn.net/syjie19900426/article/details/104055412
conseillé
Classement