🛠 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.

Objetivos

Comprender la cadena de arranque del GIGA R1 y asegurar sus programas: recuperación mediante USB DFU cuando un sketch bloquea la placa, organización de la memoria flash de 2 MB con doble banco del STM32H747XI, y guardado de contadores o calibraciones en la SRAM de respaldo de 4 KB mantenida por el pin VRTC. También verá el pin OFF para el corte limpio de la alimentación.

Material

Código completo

// 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 reinitialisation 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 : premiere utilisation
    BKPSRAM[0] = MAGIE;
    BKPSRAM[1] = 0;
    Serial.println("SRAM de sauvegarde initialisee");
  }
  if (BKPSRAM[0] != MAGIE) {
    Serial.println("Sauvegarde invalide (backup domain reinitialise)");
    return;
  }
  BKPSRAM[1]++;                       // incrementation a chaque demarrage
  Serial.print("Nombre de demarrages : ");
  Serial.println(BKPSRAM[1]);
  Serial.println("Couperez l'alimentation : la valeur doit survivre (VRTC/pile)");
}

void loop { }

Recuperación DFU: si un sketch impide la carga, realice un «touch» a 1200 baudios en el puerto serie (o mantenga presionado el botón BOOT según la placa anfitriona) para entrar en el bootloader — aparece entonces con el PID 0x0366 en lugar de 0x0666 (VID 0x2341) — luego ejecute dfu-util -a 0 -s 0x08040000:leave -D sketch.bin. En el núcleo Zephyr, el cargador reside en 0x08040000 y los sketches se cargan encima mediante LLEXT.

Verificación esperada

Tras varias reinicializaciones, el contador aumenta en cada arranque. Tras desenchufar completamente el USB (con pila en VRTC), el valor se conserva; sin pila, la SRAM de respaldo puede perderse y aparece el mensaje «guardado inválido». En modo recuperación, el explorador USB muestra un dispositivo 2341:0366 y dfu-util lista la placa.

Errores frecuentes

> SIN VERIFICAR: tamaño exacto de las particiones de sketch por núcleo en boards.local.txt (generado por el núcleo) y comportamiento eléctrico preciso de VRTC sin pila; consulte el esquema oficial.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales