🛠 Bootloader DFU, flash double banque et sauvegarde sur SRAM de sauvegarde
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
- 1 placa Arduino GIGA R1 WiFi
- Un PC con dfu-util (o el núcleo de Arduino que lo llama automáticamente)
- Opcional: una pila de botón de 3 V en VRTC para probar la persistencia de RTC/SRAM tras el corte de alimentación
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.
- Escribir en la SRAM de respaldo sin alimentar VRTC: los datos desaparecen al cortar la alimentación, lo cual no es un error del código.
- Sobrescribir la zona del cargador Zephyr (0x08040000) en DFU manual: reflashear el cargador o realizar una primera carga desde Arduino (core ≥ 0.90.0 lo instala automáticamente).
- Confundir los PID: 0x0666 = aplicación, 0x0366 = bootloader; un objetivo incorrecto en dfu-util falla limpiamente.
- Suponer que la flash es borrable byte a byte: la flash se gestiona en páginas/sectores; para un registro frecuente, prefiera la SRAM de respaldo o un almacenamiento externo.
- Usar el pin OFF sin comprenderlo: conectar OFF a masa fuerza el apagado completo de la placa (shutdown), por lo que es necesario pulsar reset o volver a conectar la alimentación.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino