🛠 Dual-core M7+M4 et récupération DFU
Objectifs
Exploiter les deux atouts « système » de la GIGA R1 WiFi : le dual-core réel du STM32H747XI (Cortex-M7 jusqu'à 480 MHz + Cortex-M4 jusqu'à 240 MHz, programmables séparément — par exemple Arduino sur l'un, MicroPython sur l'autre, avec RPC entre les deux) et la récupération par DFU natif quand un téléversement rate ou que le firmware du module radio 1DX est brické. Vous saurez remettre une carte briquée sur pied.
Matériel
- Carte Arduino GIGA R1 WiFi + câble USB-C
- IDE Arduino 2.x avec les deux cores : « Arduino Mbed OS Giga Boards » et/ou « Arduino Zephyr Boards » (FQBN
arduino:zephyr:giga, variantearduino_giga_r1_stm32h747xx_m7) - MicroPython officiellement supporté sur la carte (image à flasher pour le cœur M4 ou la carte selon la doc Arduino)
- Outil en ligne de commande
dfu-util
Code complet
Sketch cœur M7 (côté Arduino) — le cœur M4 se programme séparément (MicroPython ou second 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" : "...");
}
}
Récupération DFU (terminal, carte 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.
Vérification attendue
Le sketch M7 fait clignoter la LED à 1 Hz et annonce l'état WiFi. En flashant MicroPython sur la carte selon la procédure officielle, l'interpréteur répond sur une console indépendante — la preuve que les deux mondes coexistent (les exemples de RPC M7↔M4 de la doc Arduino fonctionnent par-dessus). En mode DFU, dfu-util -l liste bien un périphérique 2341:0366, et le reflash ramène une carte qui refusait de téléverser.
Erreurs fréquentes
- Chercher un « startM4 » universel : contrairement à la Portenta, le dual-core de la GIGA s'organise autour du flashage séparé des cœurs (Arduino + MicroPython, RPC) décrit dans la section Dual Core de la doc officielle ; il n'y a pas d'API unique identique selon le core utilisé.
- Mauvais PID en DFU : en fonctionnement normal le device USB est
0x2341:0x0666; en bootloader il devient0x2341:0x0366. Sidfu-utilne voit rien, c'est que le bootloader n'est pas actif (retentez le double-tap). - WiFi mort après une mise à jour ratée : le firmware du module 1DX peut être brické par de mauvaises mises à jour — c'est le cas d'usage du sketch FlashFormat, à tenter avant tout reflash complet.
-s 0x08000000erroné : l'adresse de flash du H747 démarre bien à 0x08000000, mais le:leaveest nécessaire pour relancer la carte après l'écriture ; l'oublier laisse la carte en bootloader.- Vaincre 2 MB de flash : avec 2 MB de flash double-banque et 1 MB de RAM, les gros sketches (LVGL, vision) atteignent les limites de la partition applicative ; les cores Zephyr documentent un chargeur LLEXT à 0x08040000 pour déporter du code — sujet avancé détaillé dans la fiche plateforme.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino