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

RP2350 (genérico / placas basadas en 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

Objetivos

Función única a este precio: el RP2350 contiene dos pares de núcleos — dos Arm Cortex-M33 (Armv8-M, TrustZone-M, DSP, FPU de precisión simple + coprocesador de doble precisión) O dos Hazard3 RISC-V (RV32IMAC) — pero solo un par funciona a la vez. La elección se realiza mediante el registro ARCHSEL, seguido de un reset de los núcleos: por lo tanto, se cambia de arquitectura sin volver a alimentar la placa (datasheet RP2350, §1.1 y §3). Este tutorial: compilar el mismo «hello» para RISC-V, comprender el papel del boot ROM y medir lo que aporta cada arquitectura.

Material

Comandos completos

# 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

En cuanto al registro, el cambio en caliente se escribe básicamente así:

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

Verificación esperada

El binario RISC-V parpadea y se comunica de la misma manera: el SDK abstrae la arquitectura (PIO, GPIO, USB son los mismos periféricos, y las 52 entradas de interrupción se enrutan hacia ambas arquitecturas). Ejecuta un micro-benchmark (bucle entero dependiente) en ambos lados: el M33 mantiene la ventaja en el código C estándar (decodificador de 16/32 bits, FPU), mientras que el Hazard3 RV32IMAC se defiende bien en la huella de código y la multiplicación (extensión M). El cambio Arm→RISC-V→Arm se realiza en caliente: misma alimentación, misma flash XIP.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales