🛠 Bootloader DFU, flash double banque et sauvegarde sur SRAM de sauvegarde

Arduino GIGA R1 · avance · Schéma : IMG-giga-r1-a3-1-boot-flash-basse-consommation.svg — Les modes de démarrage du GIGA R1 : application USB DFU (PID 0x0666), bootloader de récupération (PID 0x0366), flash 2 Mo double banque et SRAM de sauvegarde 4 Ko maintenue par la broche VRTC.

Objectifs

Comprendre la chaîne de démarrage du GIGA R1 et sécuriser vos programmes : récupération par USB DFU quand un sketch brique la carte, organisation de la flash 2 Mo double banque du STM32H747XI, et sauvegarde de compteur ou d'étalonnages dans la SRAM de sauvegarde de 4 Ko maintenue par la broche VRTC. Vous verrez aussi la broche OFF pour la coupure propre de l'alimentation.

Matériel

Code complet

// GIGA R1 WiFi — compteur persistant dans la SRAM de sauvegarde (4 Ko, maintenue par VRTC)
#include <Arduino.h>

// SRAM de sauvegarde STM32H7 : base 0x38800000 (4 Ko). Accès direct, noyau Mbed.
// En cas de réinitialisation complete (backup domain), la valeur devient 0xFFFFFFFF.
volatile uint32_t* const BKPSRAM = (volatile uint32_t*)0x38800000;
const uint32_t MAGIE = 0x47523158;   // "GR1X"

void setup {
  Serial.begin(115200);
  delay(1500);                        // laisse le temps d'ouvrir le moniteur

  if (BKPSRAM[0] == 0xFFFFFFFF) {     // zone vierge : première utilisation
    BKPSRAM[0] = MAGIE;
    BKPSRAM[1] = 0;
    Serial.println("SRAM de sauvegarde initialisee");
  }
  if (BKPSRAM[0] != MAGIE) {
    Serial.println("Sauvegarde invalide (backup domain réinitialise)");
    return;
  }
  BKPSRAM[1]++;                       // incrementation a chaque démarrage
  Serial.print("Nombre de demarrages : ");
  Serial.println(BKPSRAM[1]);
  Serial.println("Couperez l'alimentation : la valeur doit survivre (VRTC/pile)");
}

void loop { }

Récupération DFU : si un sketch empêche le téléversement, faites un « touch » à 1200 bauds sur le port série (ou maintenez le bouton BOOT selon la carte hôte) pour entrer dans le bootloader — il apparaît alors avec le PID 0x0366 au lieu de 0x0666 (VID 0x2341) — puis dfu-util -a 0 -s 0x08040000:leave -D sketch.bin. Sur le cœur Zephyr, le chargeur réside à 0x08040000 et les sketches sont chargés par-dessus via LLEXT.

Vérification attendue

Après plusieurs réinitialisations, le compteur augmente à chaque démarrage. Après débranchement complet du USB (avec pile sur VRTC), la valeur est conservée ; sans pile, la SRAM de sauvegarde peut être perdue et le message « sauvegarde invalide » apparaît. En mode récupération, l'explorateur USB montre un périphérique 2341:0366 et dfu-util liste la carte.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels