Le chip XM25QH128C est connecté au module WROVER-E via SPI. En plus des commandes d’écriture et de lecture, les trois registres d’état SR1, SR2 et SR3 sur 8 bits peuvent être définis.
Les bits SRP1 (« Status Register Protect 1 ») dans le registre d’état 2 et SRP0 (« Status Register Protect 2 ») dans le registre d’état 1 sont responsables de la protection en écriture.
En configurant ces deux bits sur « 1 », vous empêchez toutes modifications des trois registres d’état pour toujours, car ces bits de protection de registre d’état sont des bits « OTP » (one time programmable). Une fois définis, ils ne peuvent pas être effacés. C’est pourquoi, dans notre nouveau micrologiciel, nous définissons des valeurs raisonnables pour les trois registres d’état dont nous avons besoin pour notre hörbert, puis nous définissons les deux bits de protection de registre d’état. Cela ne peut être fait qu’une seule fois.
Dans notre cas, nous pouvons définir en toute sécurité les registres sur les valeurs 0x600380. (S1=0x80, S2=0x03, S3=0x60) Ces réglages sont les valeurs correctes pour notre micrologiciel et nos fonctions, et en définissant les bits SRP0 et SRP1, cela restera ainsi.
Comment en savoir plus sur le Flash-Chip ?
L’identifiant du chip peut être lu en utilisant esptool.py.
Dans notre cas, c’est le fabricant « 20 » (XMC) et l’identifiant du chip 4018 (Flash 128 Mbit)
> esptool.py flash_id
esptool.py v3.1-dev
Trouvé 2 ports série
Port série /dev/ttyUSB0
Connexion........_
Détection du type de chip... ESP32
Le chip est ESP32-D0WD-V3 (révision 3)
Fonctionnalités: WiFi, BT, Double cœur, 240MHz, Calibration VRef en efuse, Aucun schéma de codage
Le cristal est à 40MHz
MAC: 94:3c:c6:c1:55:e4
Téléverser le brouillon...
Exécution du brouillon...
Brouillon en cours d'exécution...
Fabricant: 20
Dispositif: 4018
Taille de flash détectée: 16MB
Réinitialisation matérielle via la broche RTS...
Les registres d’état peuvent également être lus avec esptool.py. Voici un exemple de puce mal configurée avec les valeurs des registres d’état 0xe37bfc (S1=0xfc, S2=0x7b, S3=0xe3)
> esptool.py read_flash_status --bytes 3
esptool.py v3.1-dev
Trouvé 2 ports série
Port série /dev/ttyUSB0
Connexion...
Détection du type de chip... ESP32
Le chip est ESP32-D0WD-V3 (révision 3)
Fonctionnalités: WiFi, BT, Double cœur, 240MHz, Calibration VRef en efuse, Aucun schéma de codage
Le cristal est à 40MHz
MAC: 94:3c:c6:c1:55:e4
Brouillon est déjà en cours d'exécution. Aucun téléversement n'est nécessaire.
Valeur de l'état: 0xe37bfc
Réinitialisation matérielle via la broche RTS...
Comment se présente l’erreur sur la console ?
Cette sortie s’affiche lorsque l’erreur s’est déjà produite et que le Flash-Chip est devenu inutilisable. Le module WROVER-E est bloqué dans une boucle de démarrage sans fin et n’exécute aucun autre programme, sauf essayer de charger le second chargeur de démarrage.
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:380
ho 0 tail 12 room 4
load:0x07800000,len:3378177
ets Jul 29 2019 12:21:46
rst:0x10 (RTCWDT_RTC_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
[...]
Des paroles en l’air, montrez-moi le code !
Avertissement : Ne pas utiliser ce code dans votre projet si vous ne comprenez pas quels bits d’état vous pouvez définir et lesquels non !
Ce code nous a été gracieusement fourni par Espressif comme base pour notre propre correctif de support. Il nécessite l’esp-idf d’Espressif. Il s’exécute en RAM et vérifie d’abord l’ID du flash 0x204018. Ensuite, il lit les registres d’état et combine S2 avec le bit de protection de registre d’état absolument nécessaire SRP1, et définit le bit SRP0, qui constituent ensemble le correctif réel.
#inclure "freertos/FreeRTOS.h"
#inclure "freertos/task.h"
[...]
Cette méthode est mieux comprise lorsqu’on examine les registres d’état du Flash-Chip.