🛠 Dual-core M7+M4 et récupération DFU
Objetivos
Aprovechar las dos ventajas «de sistema» de la GIGA R1 WiFi: el dual-core real del STM32H747XI (Cortex-M7 hasta 480 MHz + Cortex-M4 hasta 240 MHz, programables por separado — por ejemplo, Arduino en uno, MicroPython en el otro, con RPC entre ambos) y la recuperación mediante DFU nativo cuando una carga de programa falla o el firmware del módulo de radio 1DX queda inutilizable (brick). Aprenderás a revivir una tarjeta inutilizable.
Material
- Tarjeta Arduino GIGA R1 WiFi + cable USB-C
- IDE Arduino 2.x con los dos cores: «Arduino Mbed OS Giga Boards» y/o «Arduino Zephyr Boards» (FQBN
arduino:zephyr:giga, variantearduino_giga_r1_stm32h747xx_m7) - MicroPython admitido oficialmente en la tarjeta (imagen a flashear para el núcleo M4 o la tarjeta según la documentación de Arduino)
- Herramienta de línea de comandos
dfu-util
Código completo
Sketch del núcleo M7 (lado Arduino) — el núcleo M4 se programa por separado (MicroPython o segundo core):
// GIGA R1 WiFi — preuve de vie du coeur M7 + coordination avec le M4
// Le M7 (480 MHz) gere ici le WiFi et la console ; le M4 (240 MHz), programme
// separement (ex. MicroPython officiel), communique avec lui par RPC selon la
// section "Dual Core" de docs.arduino.cc/hardware/giga-r1-wifi.
#include <WiFi.h>
void setup {
Serial.begin(115200); // console sur M7
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("M7 actif — en attente du M4 (flasher MicroPython a cote)");
WiFi.begin("your-ssid", "your-pass");
}
void loop {
static unsigned long t = 0;
if (millis - t > 1000) { // heartbeat 1 Hz sur M7
t = millis;
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
Serial.print("M7 up, WiFi=");
Serial.println(WiFi.status == WL_CONNECTED ? "OK" : "...");
}
}
Recuperación DFU (terminal, tarjeta en bootloader):
# Entrer en bootloader : double-tap sur le bouton reset (touche 1200 bps)
# ou via la commande de reboot du core. Le device passe en PID 0x0366.
dfu-util -l # liste : VID 0x2341, PID 0x0366 attendu
dfu-util -a 0 -s 0x08000000:leave -D firmware.bin # reflash du binaire du core
# Firmware radio 1DX brické (plus de WiFi du tout) : lancer le sketch
# FlashFormat fourni avec le core pour restaurer le module.
Verificación esperada
El sketch del M7 hace parpadear el LED a 1 Hz y anuncia el estado de la WiFi. Al flashear MicroPython en la tarjeta según el procedimiento oficial, el intérprete responde en una consola independiente — la prueba de que los dos mundos coexisten (los ejemplos de RPC M7↔M4 de la documentación de Arduino funcionan encima). En modo DFU, dfu-util -l lista correctamente un dispositivo 2341:0366, y el reflash devuelve una tarjeta que rechazaba la carga de programa.
Errores frecuentes
- Buscar un «startM4» universal: a diferencia de la Portenta, el dual-core de la GIGA se organiza alrededor del flasheo separado de los núcleos (Arduino + MicroPython, RPC) descrito en la sección Dual Core de la documentación oficial; no existe una API única idéntica según el core utilizado.
- PID incorrecto en DFU: en funcionamiento normal, el dispositivo USB es
0x2341:0x0666; en bootloader se convierte en0x2341:0x0366. Sidfu-utilno ve nada, es que el bootloader no está activo (reintenta el doble toque). - WiFi muerta tras una actualización fallida: el firmware del módulo 1DX puede quedar inutilizable por malas actualizaciones — este es el caso de uso del sketch FlashFormat, a intentar antes de cualquier reflash completo.
-s 0x08000000erróneo: la dirección de flash del H747 comienza efectivamente en 0x08000000, pero el:leavees necesario para reiniciar la tarjeta después de la escritura; olvidarlo deja la tarjeta en bootloader.- Vencer los 2 MB de flash: con 2 MB de flash de doble banco y 1 MB de RAM, los sketches grandes (LVGL, visión) alcanzan los límites de la partición de aplicación; los cores Zephyr documentan un cargador LLEXT en 0x08040000 para descargar código — tema avanzado detallado en la ficha de la plataforma.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino