🛠 Basculer les cœurs de Arm Cortex-M33 à Hazard3 RISC-V avec ARCHSEL

RP2350 (générique / cartes basées sur le RP2350) · intermediaire · Schéma : IMG-rp2350-generic-intermediaire-3-rp2350-archsel-riscv.svg — puce RP2350 coupée en deux moitiés, à gauche deux cœurs Cortex-M33 (Armv8-M), à droite deux cœurs Hazard3 (RV32IMAC), registre ARCHSEL et reset de cœur comme interrupteur entre les deux, terminal affichant le banner RISC-V

Objectifs

Fonction unique à ce prix : le RP2350 contient deux paires de cœurs — deux Arm Cortex-M33 (Armv8-M, TrustZone-M, DSP, FPU simple précision + coprocesseur double précision) OU deux Hazard3 RISC-V (RV32IMAC) — mais une seule paire tourne à la fois. Le choix se fait via le registre ARCHSEL, suivi d'un reset des cœurs : on bascule donc d'architecture sans ré-alimenter la carte (datasheet RP2350, §1.1 et §3). Ce tuto : compiler le même « hello » pour RISC-V, comprendre le rôle du boot ROM, et mesurer ce que chaque architecture apporte.

Matériel

Commandes complètes

# 1) Toolchain RISC-V dans le PATH
export PATH=$PWD/pico-sdk-tools/bin:$PATH
riscv32-unknown-elf-gcc --version    # doit répondre

# 2) Reconfigurer le projet en plateforme RISC-V
cd clignot/build
cmake -DPICO_PLATFORM=rp2350-riscv -DPICO_BOARD=pico2 ..
make -j

# 3) Flash (BOOTSEL ou picotool) puis lire la console
picotool load -x clignot.uf2     # ou drag-and-drop de l'UF2

Côté registre, la bascule à chaud s'écrit en gros :

// archsel.c — demander Hazard3 au prochain reset de cœur
// 1) écrire ARCHSEL=1 (registre de syscfg/PPB selon le datasheet §3)
// 2) déclencher le reset des cœurs : le boot ROM relit ARCHSEL
//    et libère la paire RISC-V au lieu de la paire Arm.
// 
// à utiliser selon ta version — cherche « ARCHSEL » dans pico-bootrom.

Vérification attendue

Le binaire RISC-V clignote et cause à l'identique : le SDK abstrait l'architecture (PIO, GPIO, USB sont les mêmes périphériques, et les 52 entrées d'interruption sont routées vers les deux architectures). Fais tourner un micro-benchmark (boucle entière dépendante) des deux côtés : le M33 garde l'avantage sur le code C standard (décodeur 16/32 bits, FPU), tandis que le Hazard3 RV32IMAC se défend sur l'empreinte code et la multiplication (extension M). Le passage Arm→RISC-V→Arm se fait à chaud : même alimentation, même flash XIP.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels