Le Raspberry Pi Pico 2 est sorti le mois dernier avec un microcontrôleur Raspberry Pi RP2350 équipé de deux cœurs Arm Cortex-M33 et de deux cœurs RISC-V « Hazard3 » 32 bits avec jusqu’à deux cœurs utilisables à tout moment. Dans ce guide, nous allons donc montrer comment utiliser les cœurs RISC-V sur le MCU RP2350, comparer leurs performances avec les cœurs Arm Cortex-M33 et même créer Linux pour RISC-V pour les cartes RP2350 dotées de PSRAM.
Outre la mémoire supplémentaire et les cœurs plus puissants, ainsi que les nouvelles fonctionnalités liées à la sécurité et à l’interface HSTX, les Raspberry Pi Pico 2 et Pico seront très similaires à l’utilisateur final et les instructions de notre article « Démarrage avec Raspberry Pi Pico avec MicroPython et C » restent valables. Je ne pense pas qu’il existe encore d’image RISC-V MicroPython, nous allons donc nous concentrer sur l’exécution de programmes C sur les cœurs RISC-V.
Un contrôle rapide avec les cœurs Arm

J’ai reçu un kit avec le Raspberry Pi Pico 2, un câble micro USB vers USB et la sonde de débogage Raspberry Pi, et j’utiliserai tout cela dans cet article.
Comme nous évaluerons les cœurs Arm plus tard, j’installerai d’abord l’environnement C/C++ pour Arm et ferai clignoter la LED intégrée pour m’assurer que mon exemple Raspberry Pi Pico 2 fonctionne correctement. :Installons les dépendances, le SDK et les exemples de code :
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential git clone https://github.com/raspberrypi/pico-sdk cd pico-sdk git submodule update –init cd .. git clone -b master https://github.com/raspberrypi/pico-examples.git
|
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential clone git https://github.com/raspberrypi/pico-sdk cd pico sdk Mise à jour du sous-module git –init cd .. git clone -b master https://github.com/raspberrypi/pico-examples.git |
Les étapes ci-dessus sont exactement les mêmes que pour le Raspberry Pi Pico. Construisons maintenant la démo blink_simple pour la cible RP2350 :
cd pico-examples/blink_simple/ export PICO_SDK_PATH=../../pico-sdk cmake -DPICO_PLATFORM=rp2350 .. cd blink_simple make -j16
|
cd pico-exemples/blink_simple/ exporter PICO_SDK_PATH=../../pico-sdk cmake -DPICO_PLATFORM=rp2350 .. cd blink_simple faire -j16 |
La procédure est presque la même que sur le Raspberry Pi Pico, sauf que nous devons ajouter « -DPICO_PLATFORM=rp2350 » pour construire le RP2350, car le SDK Pico est par défaut RP2040.
Nous avons un tas de fichiers :
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple$ ls -l total 924 -rwxrwxr-x 1 jaufranc jaufranc 5988 31 août 10:05 blink_simple.bin -rw-rw-r– 1 jaufranc jaufranc 61996 31 août 10:05 blink_simple.dis -rwxrwxr-x 1 jaufranc jaufranc 391376 31 août 10:05 blink_simple.elf -rw-rw-r– 1 jaufranc jaufranc 316949 31 août 10:05 blink_simple.elf.map -rw-rw-r– 1 jaufranc jaufranc 12800 31 août 10:05 blink_simple.uf2 drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 10:04 CMakeFiles -rw-rw-r– 1 jaufranc jaufranc 1161 31 août 10:03 cmake_install.cmake -rw-rw-r– 1 jaufranc jaufranc 132463 31 août 10:03 Makefile
|
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple$ ls -l total 924 -rwxrwxr-x 1 jaufranc jaufranc 5988 31 août 10:05 blink_simple.bin -rw-rw-r– 1 jaufranc jaufranc 61996 31 août 10:05 blink_simple.dis -rwxrwxr-x 1 jaufranc jaufranc 391376 31 août 10:05 blink_simple.elf -rw-rw-r– 1 jaufranc jaufranc 316949 31 août 10:05 blink_simple.elf.map -rw-rw-r– 1 jaufranc jaufranc 12800 31 août 10:05 blink_simple.uf2 drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 10:04 CMakeFiles -rw-rw-r– 1 jaufranc jaufranc 1161 31 août 10:03 cmake_install.cmake -rw-rw-r– 1 jaufranc jaufranc 132463 31 août 10:03 Makefile |
Nous pouvons confirmer que l’architecture Arm est utilisée ici :
fichier blink_simple.elf blink_simple.elf : exécutable LSB ELF 32 bits, ARM, EABI5 version 1 (SYSV), lié statiquement, avec debug_info, non dépouillé
|
fichier blink_simple.elf blink_simple.elf : exécutable LSB ELF 32 bits, ARM, EABI5 version 1 (SYSV), lié statiquement, avec debug_info, non dépouillé |
Copions le firmware « blink_simple.uf2 » sur le Raspberry Pi Pico 2 qui apparaît comme RP2350 dans le gestionnaire de fichiers.
La LED embarquée commence à clignoter. Succès !

Blinky sur les cœurs RISC-V
Reproduisons cela sur les cœurs RISC-V. Nous devrons vérifier la documentation PDF du SDK Pico C/C++ pour obtenir la bonne chaîne d’outils, où nous apprenons (dans la section 2.10) que seules les versions les plus récentes de GCC prennent en charge Hazard3, ce qui signifie qu’il devrait être construit à partir des sources, ou nous pouvons sélectionner une autre chaîne d’outils telle que la chaîne d’outils CORE-V disponible pour diverses distributions Linux et macOS.

Mon ordinateur portable fonctionne toujours sous Ubuntu 22.04, j’ai donc téléchargé et installé la chaîne d’outils appropriée et défini les variables d’exportation PICO_TOOLCHAIN_PATH et PICO_RISCV_TOOLCHAIN_PATH :
cd ../../.. wget https://buildbot.embecosm.com/job/corev-gcc-ubuntu2204/47/artifact/corev-openhw-gcc-ubuntu2204-20240530.tar.gz tar xvf corev-openhw-gcc-ubuntu2204-20240530.tar.gz export PICO_TOOLCHAIN_PATH=~/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530 export PICO_RISCV_TOOLCHAIN_PATH=~/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530
|
cd ../../.. wget https://buildbot.embecosm.com/job/corev-gcc-ubuntu2204/47/artifact/corev-openhw-gcc-ubuntu2204-20240530.tar.gz tar xvf corev-openhw-gcc-ubuntu2204-20240530.tar.gz exporter PICO_TOOLCHAIN_PATH=~/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530 exporter PICO_RISCV_TOOLCHAIN_PATH=~/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530 |
Nous pouvons maintenant revenir au répertoire blink_simple et configurer l’exemple blink_simple à créer avec la chaîne d’outils RISC-V :
cd pico-exemples/blink_simple/ rm CMakeCache.txt cmake -DPICO_PLATFORM=rp2350-riscv ..
|
cd pico-exemples/blink_simple/ rm CMakeCache.txt cmake -DPICO_PLATFORM=rp2350-riscv .. |
Vérifions la sortie de la dernière commande pour nous assurer que la chaîne d’outils RISC-V a été sélectionnée :
Utilisation de PICO_SDK_PATH depuis l’environnement (‘../../pico-sdk’) PICO_SDK_PATH est /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk La carte cible par défaut (PICO_BOARD) est ‘pico2’ car elle n’est pas spécifiée. Utilisation de la configuration de la carte depuis /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/src/boards/include/boards/pico2.h La plateforme Pico (PICO_PLATFORM) est ‘rp2350-riscv’. — La valeur par défaut du type de build est ‘Release’ car elle n’est pas spécifiée. La valeur par défaut du compilateur (PICO_COMPILER) est ‘pico_riscv_gcc’ car elle n’est pas spécifiée. Configuration de la chaîne d’outils basée sur PICO_COMPILER ‘pico_riscv_gcc’ Définition par défaut de PICO_GCC_TRIPLE sur ‘riscv32-unknown-elf;riscv32-corev-elf’ — L’identification du compilateur C est GNU 14.1.0 — L’identification du compilateur CXX est GNU 14.1.0 — L’identification du compilateur ASM est GNU — Assembleur trouvé : /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-gcc — Détection des informations ABI du compilateur C — Détection des informations ABI du compilateur C – terminé — Vérification du fonctionnement du compilateur C : /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-gcc – skipped — Détection des fonctionnalités de compilation C — Détection des fonctionnalités de compilation C – done — Détection des informations ABI du compilateur CXX — Détection des informations ABI du compilateur CXX – done — Vérification du fonctionnement du compilateur CXX : /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-g++ – skipped — Détection des fonctionnalités de compilation CXX — Détection des fonctionnalités de compilation CXX – done Le type de build est Release — Python3 trouvé : /usr/bin/python3.10 (version trouvée « 3.10.12 ») composants trouvés : Interpréteur TinyUSB disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040 ; activation de la prise en charge de la construction pour USB. BTstack disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/btstack cyw43-driver disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/cyw43-driver lwIP disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/lwip mbedtls disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/mbedtls Exemple crypté ignoré qui n’est pas pris en charge sur cette plateforme Exemple hello_dcp ignoré qui n’est pas pris en charge sur cette plateforme Exemple cache_perfctr ignoré qui n’est pas pris en charge sur cette plateforme Exemple ssi_dma ignoré qui n’est pas pris en charge sur cette plateforme Exemple multicore_fifo_irqs ignoré qui n’est pas pris en charge sur cette plateforme non pris en charge sur cette plateforme Exemples RTC ignorés car hardware_rtc n’est pas disponible sur cette plateforme Exemples universels ignorés car PICO_RISCV_TOOLCHAIN_PATH et PICO_ARM_TOOLCHAIN_PATH ne sont pas définis Exemples doubles TinyUSB ignorés, car le sous-module TinyUSB hw/mcu/raspberry_pi/Pico-PIO-USB n’est pas disponible Exemples FreeRTOS ignorés car FREERTOS_KERNEL_PATH n’est pas défini — Configuration effectuée — Génération effectuée — Les fichiers de build ont été écrits dans : /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Utilisation de PICO_SDK_PATH depuis l’environnement (‘../../pico-sdk’) PICO_SDK_PATH est /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk La carte cible par défaut (PICO_BOARD) est « pico2 » car elle n’est pas spécifiée. Utilisation de la configuration de la carte depuis /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/src/boards/include/boards/pico2.h La plate-forme Pico (PICO_PLATFORM) est « rp2350-riscv ». — Le type de build par défaut est « Release » car il n’est pas spécifié. Paramétrage par défaut du compilateur (PICO_COMPILER) sur « pico_riscv_gcc » car non spécifié. Configuration de la chaîne d’outils basée sur PICO_COMPILER ‘pico_riscv_gcc’ Définition par défaut de PICO_GCC_TRIPLE sur « riscv32-unknown-elf;riscv32-corev-elf » — L’identification du compilateur C est GNU 14.1.0 — L’identification du compilateur CXX est GNU 14.1.0 — L’identification du compilateur ASM est GNU — Assembleur trouvé : /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-gcc — Détection des informations ABI du compilateur C — Détection des informations ABI du compilateur C – terminé — Vérifiez que le compilateur C fonctionne : /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-gcc – ignoré — Détection des fonctionnalités de compilation C — Détection des fonctionnalités de compilation C – terminé — Détection des informations ABI du compilateur CXX — Détection des informations ABI du compilateur CXX – terminé — Vérifiez que le compilateur CXX fonctionne : /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-g++ – ignoré — Détection des fonctionnalités de compilation CXX — Détection des fonctionnalités de compilation CXX – terminé Le type de build est Release — Python3 trouvé : /usr/bin/python3.10 (version trouvée « 3.10.12 ») composants trouvés : Interpréteur TinyUSB disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040 ; permettant la prise en charge de la construction pour USB. BTstack disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/btstack Pilote cyw43 disponible dans /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/cyw43-driver lwIP disponible dans /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/lwip mbedtls disponible sur /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/mbedtls Exemple chiffré non pris en charge sur cette plateforme Exemple de hello_dcp ignoré qui n’est pas pris en charge sur cette plate-forme Exemple de saut de cache_perfctr qui n’est pas pris en charge sur cette plate-forme Exemple de saut ssi_dma qui n’est pas pris en charge sur cette plate-forme Exemple de saut de multicore_fifo_irqs qui n’est pas pris en charge sur cette plate-forme Les exemples RTC sont ignorés car hardware_rtc n’est pas disponible sur cette plate-forme Exemples universels ignorés car PICO_RISCV_TOOLCHAIN_PATH et PICO_ARM_TOOLCHAIN_PATH ne sont pas définis Exemples de double TinyUSB ignorés, car le sous-module TinyUSB hw/mcu/raspberry_pi/Pico-PIO-USB n’est pas disponible Exemples FreeRTOS ignorés car FREERTOS_KERNEL_PATH n’est pas défini — Configuration terminée — Génération terminée — Les fichiers de build ont été écrits dans : /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple |
Cela semble bon. Nous pouvons également voir que certains échantillons ne fonctionneront pas sur RISC-V car ils s’appuient sur des fonctionnalités uniquement disponibles pour les cœurs Arm.
Essayons de construire l’échantillon :
Nous avons le même lot de fichiers mais avec des tailles différentes :
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple$ ls -l total 916 -rwxrwxr-x 1 jaufranc jaufranc 6596 31 août 10:37 blink_simple.bin -rw-rw-r– 1 jaufranc jaufranc 109916 31 août 10:37 blink_simple.dis -rwxrwxr-x 1 jaufranc jaufranc 344512 31 août 10:37 blink_simple.elf -rw-rw-r– 1 jaufranc jaufranc 322778 31 août 10:37 blink_simple.elf.map -rw-rw-r– 1 jaufranc jaufranc 13824 31 août 10:37 blink_simple.uf2 drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 10:32 CMakeFiles -rw-rw-r– 1 jaufranc jaufranc 1237 31 août 10:32 cmake_install.cmake -rw-rw-r– 1 jaufranc jaufranc 121565 31 août 10:32 Makefile
|
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple$ ls -l total 916 -rwxrwxr-x 1 jaufranc jaufranc 6596 31 août 10:37 blink_simple.bin -rw-rw-r– 1 jaufranc jaufranc 109916 31 août 10:37 blink_simple.dis -rwxrwxr-x 1 jaufranc jaufranc 344512 31 août 10:37 blink_simple.elf -rw-rw-r– 1 jaufranc jaufranc 322778 31 août 10:37 blink_simple.elf.map -rw-rw-r– 1 jaufranc jaufranc 13824 31 août 10:37 blink_simple.uf2 drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 10:32 CMakeFiles -rw-rw-r– 1 jaufranc jaufranc 1237 31 août 10:32 cmake_install.cmake -rw-rw-r– 1 jaufranc jaufranc 121565 31 août 10:32 Makefile |
Par exemple, blink_simple.uf2 fait 13 824 octets lorsqu’il est compilé pour RISC-V, mais 12 800 octets pour Arm.
Vérifions à nouveau notre nouveau fichier blink_simple.elf :
fichier blink_simple.elf blink_simple.elf : exécutable LSB ELF 32 bits, UCB RISC-V, RVC, ABI soft-float, version 1 (SYSV), lié statiquement, avec debug_info, non dépouillé
|
fichier blink_simple.elf blink_simple.elf : exécutable LSB ELF 32 bits, UCB RISC-V, RVC, ABI soft-float, version 1 (SYSV), lié statiquement, avec debug_info, non dépouillé |
C’est RISC-V ! Un autre utilitaire pour vérifier l’architecture est le script uf2conv.py de Microsoft :
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/uf2/utils$ ./uf2conv.py -i ~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple/blink_simple.uf2 — Informations sur l’en-tête du fichier UF2 — L’ID de famille est RP2XXX_ABSOLUTE, la valeur hexadécimale est 0xe48bff57 L’adresse cible est 0x10ffff00 L’ID de famille est RP2350_RISCV, la valeur hexadécimale est 0xe48bff5a L’adresse cible est 0x10000000 Toutes les valeurs d’indicateur de bloc sont cohérentes, 0x2000 —————————-
|
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/uf2/utils$ ./uf2conv.py -i ~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple/blink_simple.uf2 — Informations sur l’en-tête du fichier UF2 — L’identifiant de la famille est RP2XXX_ABSOLUTE, la valeur hexadécimale est 0xe48bff57 L’adresse cible est 0x10ffff00 L’identifiant de la famille est RP2350_RISCV, la valeur hexadécimale est 0xe48bff5a L’adresse cible est 0x10000000 Toutes les valeurs d’indicateur de bloc sont cohérentes, 0x2000 —————————- |
Il est temps d’entrer en mode bootloader en appuyant sur le bouton BOOTSEL et en mettant hors tension puis sous tension la carte Pico 2, avant de copier le fichier blink_simple.uf2 sur le lecteur RP2350…
Succès ! La LED clignote avec le Raspberry Pi Pico 2 exécutant notre binaire RISC-V.
Sortie série sur Raspberry Pi Pico 2 / Cytron MOTION 2350 Pro
Comme je vais exécuter un test de performance, j’aurai besoin d’une console série pour visualiser la sortie. Je n’ai pas d’en-têtes là où je me trouve en ce moment, mais j’ai des câbles de démarrage, j’ai donc soudé trois fils aux broches 1 à 3 du Raspberry Pi Pico 2 et je l’ai connecté à la sonde de débogage Raspberry Pi.

Ensuite, je construis le hello_world en utilisant RISC-V pour l’essayer :
cd pico-exemples/bonjour_monde/ cmake -DPICO_PLATFORM=rp2350-riscv .. cd bonjour_monde/ make
|
cd pico-exemples/bonjour_monde/ cmake -DPICO_PLATFORM=rp2350-riscv .. cd bonjour_monde/ faire |
Mais je n’ai trouvé aucun fichier UF2 là-bas :
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/hello_world/hello_world$ ls -l total 24 drwxrwxr-x 2 jaufranc jaufranc 4096 31 août 12:52 CMakeFiles -rw-rw-r– 1 jaufranc jaufranc 1566 31 août 12:51 cmake_install.cmake -rw-rw-r– 1 jaufranc jaufranc 4761 31 août 12:51 Makefile drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 12:53 serial drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 12:53 usb
|
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/hello_world/hello_world$ ls -l total 24 drwxrwxr-x 2 jaufranc jaufranc 4096 31 août 12:52 CMakeFiles -rw-rw-r– 1 jaufranc jaufranc 1566 31 août 12:51 cmake_install.cmake -rw-rw-r– 1 jaufranc jaufranc 4761 31 août 12:51 Makefile drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 12:53 série drwxrwxr-x 3 jaufranc jaufranc 4096 31 août 12:53 usb |
Mais après la confusion initiale, j’ai réalisé qu’il y avait deux exemples hello_world. L’exemple « serial » génère des données via série et nécessite une carte USB vers TTL, tandis que l’exemple « usb » génère des données via USB vers série, nous n’avons donc pas besoin de la sonde de débogage, et le câble micro USB vers USB est suffisant…
Cependant, il semble que j’aie réussi à « briquer » temporairement mon Raspberry Pi Pico 2 (voir la section RISC-V Linux), et après plusieurs tentatives de récupération infructueuses, j’ai décidé de passer à la carte Cytron MOTION 2350 Pro pour tester cette partie… J’ai commencé avec le hello_serial.uf2.

Cela utilise le programme Bootterm et le périphérique /dev/ttyACM0 exposé par la sonde de débogage Raspberry Pi.
J’ai ensuite copié le hello_usb.uf2 sur la carte et utilisé uniquement un câble USB-C et Bootterm connecté au périphérique /dev/ttyACM1 exposé par l’interface USB du microcontrôleur Raspberry Pi RP2350.

Tout va bien. Jetons un coup d’œil rapide au code hello_serial.c
#include #include « pico/stdlib.h » int main() { stdio_init_all(); while (true) { printf(« Bonjour tout le monde !\n »); sleep_ms(1000); } } ~
|
#inclure #include « pico/stdlib.h » int main() { stdio_init_all(); tandis que (vrai) { printf(« Bonjour le monde !\n »); sommeil_ms(1000); } } ~ |
et le code hello_usb.c :
#include #include « pico/stdlib.h » int main() { stdio_init_all(); while (true) { printf(« Bonjour tout le monde !\n »); sleep_ms(1000); } }
|
#inclure #include « pico/stdlib.h » int main() { stdio_init_all(); tandis que (vrai) { printf(« Bonjour le monde !\n »); sommeil_ms(1000); } } |
Attendez… Quoi ? Ce sont exactement les mêmes fichiers. La seule différence réside dans le fichier CMakeLists.txt.
En série:
add_executable(hello_serial hello_serial.c ) # extraire les dépendances communes target_link_libraries(hello_serial pico_stdlib) # créer un fichier map/bin/hex/uf2 etc. pico_add_extra_outputs(hello_serial) # ajouter une URL via pico_set_program_url example_auto_set_url(hello_serial)
|
ajouter_executable(bonjour_serial bonjour_serial.c ) # intégrer les dépendances communes bibliothèques_de_liens_cibles(hello_serial pico_stdlib) # créer un fichier map/bin/hex/uf2 etc. pico_add_extra_outputs(bonjour_série) # ajouter une URL via pico_set_program_url exemple_auto_set_url(bonjour_serial) |
USB:
cat CMakeLists.txt if (TARGET tinyusb_device) add_executable(hello_usb hello_usb.c ) # récupérer les dépendances communes target_link_libraries(hello_usb pico_stdlib) # activer la sortie USB, désactiver la sortie UART pico_enable_stdio_usb(hello_usb 1) pico_enable_stdio_uart(hello_usb 0) # créer un fichier map/bin/hex/uf2 etc. pico_add_extra_outputs(hello_usb) # ajouter une URL via pico_set_program_url example_auto_set_url(hello_usb) elseif(PICO_ON_DEVICE) message(« Hello_usb ignoré car le sous-module TinyUSB n’est pas initialisé dans le SDK ») endif()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
chat CMakeLists.txt si (CIBLE tinyusb_device) ajouter_executable(bonjour_usb bonjour_usb.c ) # intégrer les dépendances communes bibliothèques_de_liens_cibles(hello_usb pico_stdlib) # activer la sortie USB, désactiver la sortie UART pico_enable_stdio_usb(bonjour_usb 1) pico_enable_stdio_uart(bonjour_usb 0) # créer un fichier map/bin/hex/uf2 etc. pico_add_extra_outputs(bonjour_usb) # ajouter une URL via pico_set_program_url exemple_auto_set_url(hello_usb) sinon(PICO_ON_DEVICE) message(« Hello_usb ignoré car le sous-module TinyUSB n’est pas initialisé dans le SDK ») fin si() |
Le simple réglage des deux lignes suivantes permet de passer de la sortie série à la sortie série USB :
# activer la sortie USB, désactiver la sortie UART pico_enable_stdio_usb(hello_usb 1) pico_enable_stdio_uart(hello_usb 0)
|
# activer la sortie USB, désactiver la sortie UART pico_enable_stdio_usb(bonjour_usb 1) pico_enable_stdio_uart(bonjour_usb 0) |
Bon à savoir.
Coremark sur les cœurs Arm et RISC-V du microcontrôleur Raspberry Pi RP2350
Je voulais exécuter un test de performance pour évaluer les performances des cœurs Hazard3 RISC-V par rapport aux cœurs Arm Cortex-M33. J’ai trouvé le projet CoreMark-RP2040 sur GitHub, que j’ai réussi à créer pour RISC-V après avoir modifié le Makefile pour ajouter « -DPICO_PLATFORM=rp2350-riscv » à la commande cmake :
mkdir build && mkdir artefacts_à_télécharger && cd build && cmake -DPICO_PLATFORM=rp2350-riscv .. -DCMAKE_BUILD_TYPE=Debug && $(BUILD_SYS)
|
mkdir build && mkdir artefacts_à_télécharger && cd build && cmake -DPICO_PLATFORM=rp2350-riscv .. -DCMAKE_BUILD_TYPE=Debug && $(BUILD_SYS) |
J’ai également dû exporter le chemin complet du SDK Pico même si j’ai extrait le projet dans le répertoire pico-examples. L’exécution de make all a pu terminer la construction :
exporter PICO_SDK_PATH=~/edev/Raspberry-Pi-Pico-2/pico-sdk/ créer tout
|
exporter PICO_SDK_PATH=~/edev/Raspberry-Pi-Pico-2/pico-sdk/ faire tout |
Le fichier UF2 se trouve dans le répertoire artifacts_to_upload :
ls -l artefacts_à_télécharger/ total 764 -rwxrwxr-x 1 jaufranc jaufranc 667040 31 août 15:23 Coremark-RP2040.elf -rw-rw-r– 1 jaufranc jaufranc 111616 31 août 15:23 Coremark-RP2040.uf2
|
ls -l artefacts_à_télécharger/ total 764 -rwxrwxr-x 1 jaufranc jaufranc 667040 31 août 15:23 Coremark-RP2040.elf -rw-rw-r– 1 jaufranc jaufranc 111616 31 août 15:23 Coremark-RP2040.uf2 |
Je l’ai copié sur le lecteur RP2350 (carte MOTION 2350 Pro) et j’ai pu démarrer le benchmark CoreMark dans la console série, mais cela n’a pas fonctionné :
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2$ bt Aucun port spécifié, utilisation de ttyACM1 (dernier enregistré). Utilisez -l pour lister les ports. Essai du port ttyACM1… Connecté à ttyACM1 à 115200 bps. Le caractère d’échappement est ‘Ctrl-]’. Utilisez échappement suivi de ‘?’ pour obtenir de l’aide. CoreMark Performance Benchmark CoreMark mesure la rapidité avec laquelle votre processeur peut gérer les listes chaînées, calculer la multiplication matricielle et exécuter le code de la machine d’état. Les itérations/s sont le principal résultat du benchmark, les nombres plus élevés sont meilleurs. Appuyez sur n’importe quelle touche pour continuer…. En cours d’exécution…. (nécessite généralement 12 à 20 secondes) Démarrage des itérations du noyau 0 Démarrage des itérations du noyau 1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2$ bt Aucun port spécifié, utilisation de ttyACM1 (dernier enregistrement). Utilisez -l pour lister les ports. Essai du port ttyACM1… Connecté à ttyACM1 à 115 200 bps. Le caractère d’échappement est « Ctrl-]». Utilisez la touche Échap suivie de « ? » pour obtenir de l’aide. Évaluation des performances de CoreMark CoreMark mesure la rapidité avec laquelle votre processeur peut gérer les connexions listes, calcul de multiplication de matrice et exécution de code de machine d’état. Les itérations/sec sont le principal résultat de référence, les nombres les plus élevés sont meilleurs. Appuyez sur n’importe quelle touche pour continuer…. Courir…. (nécessite généralement 12 à 20 secondes) Démarrage du noyau 0 itérations Démarrage des itérations du noyau 1 |
Il doit y avoir une modification nécessaire. TaterLi (voir les commentaires) m’a dit de définir MULTITHREAD à 1 dans src/core_portme.h. Et en effet, cela fonctionne :
Paramètres d’exécution de performances 2K pour coremark. CoreMark Taille : 666 Nombre total de ticks : 13973896 Durée totale (secondes) : 13,973896 Itérations/s : 286,248016 Itérations : 4000 Version du compilateur : GCC14.1.0 Drapeaux du compilateur : og Emplacement mémoire : STACK seedcrc : 0xe9f5
[0]liste de contrôle : 0xe714
[0]matrice crcmatrix : 0x1fd7
[0]état crc : 0x8e3a
[0]crcfinal : 0x65c5 Opération correcte validée. Voir README.md pour les règles d’exécution et de création de rapports. CoreMark 1.0 : 286.248016 / GCC14.1.0 et / STACK
|
Paramètres d’exécution de performances 2K pour Coremark. Taille de CoreMark : 666 Nombre total de tiques : 13973896 Durée totale (secondes) : 13.973896 Itérations/sec : 286,248016 Itérations : 4000 Version du compilateur : GCC14.1.0 Drapeaux du compilateur : og Emplacement de la mémoire : STACK seedcrc : 0xe9f5 [0]liste de contrôle : 0xe714 [0]matrice crcmatrix : 0x1fd7 [0]état crc : 0x8e3a [0]crcfinal : 0x65c5 Fonctionnement correct validé. Voir README.md pour les règles d’exécution et de création de rapports. CoreMark 1.0 : 286.248016 / GCC14.1.0 et / STACK |
Mais quelque chose ne va pas car le score (286,2 CoreMark/MHz) est complètement différent de celui du référentiel Hazard3 pour le cœur RISC-V trouvé dans le MCU RP2350 :
Paramètres d’exécution de performances de 2 K pour CoreMark. CoreMark Taille : 666 Nombre total de ticks : 15 758 494 Durée totale (secondes) : 15,758 494 Itérations/seconde : 3,807 470 Itérations : 60 Version du compilateur : GCC14.2.1 20240807 Drapeaux du compilateur : -O3 -g -march=rv32ima_zicsr_zifencei_zba_zbb_zbkb_zbs -mbranch-cost=1 -funroll-all-loops –param max-inline-insns-auto=200 -finline-limit=10000 -fno-code-hoisting -fno-if-conversion2 -DPERFORMANCE_RUN=1 Emplacement mémoire : STACK seedcrc : 0xe9f5
[0]liste de contrôle : 0xe714
[0]matrice crcmatrix : 0x1fd7
[0]état crc : 0x8e3a
[0]crcfinal : 0xa14c Opération correcte validée. Voir README.md pour les règles d’exécution et de création de rapports. CoreMark 1.0 : 3.807470 / GCC14.2.1 20240807 -O3 -g -march=rv32ima_zicsr_zifencei_zba_zbb_zbkb_zbs -mbranch-cost=1 -funroll-all-loops –param max-inline-insns-auto=200 -finline-limit=10000 -fno-code-hoisting -fno-if-conversion2 -DPERFORMANCE_RUN=1 / STACK
|
Paramètres d’exécution de performances 2K pour Coremark. Taille de CoreMark : 666 Nombre total de tiques : 15758494 Durée totale (secondes) : 15.758494 Itérations/sec : 3,807470 Itérations : 60 Version du compilateur : GCC14.2.1 20240807 Drapeaux du compilateur : -O3 -g -march=rv32ima_zicsr_zifencei_zba_zbb_zbkb_zbs -mbranch-cost=1 -funroll-all-loops –param max-inline-insns-auto=200 -finline-limit=10000 -fno-code-hoisting -fno-if-conversion2 -DPERFORMANCE_RUN=1 Emplacement de la mémoire : STACK seedcrc : 0xe9f5 [0]liste de contrôle : 0xe714 [0]matrice crcmatrix : 0x1fd7 [0]état crc : 0x8e3a [0]crcfinal : 0xa14c Fonctionnement correct validé. Voir README.md pour les règles d’exécution et de création de rapports. CoreMark 1.0 : 3,807470 / GCC14.2.1 20240807 -O3 -g -march=rv32ima_zicsr_zifencei_zba_zbb_zbkb_zbs -mbranch-cost=1 -funroll-all-loops –param max-inline-insns-auto=200 -finline-limit=10000 -fno-code-hoisting -fno-if-conversion2 -DPERFORMANCE_RUN=1 / PILE |
Cela représente 3,81 CoreMark/MHz.
J’ai essayé à nouveau d’exécuter les performances sur l’un des cœurs Arm Cortex-M33 :
Paramètres d’exécution de performances 2K pour CoreMark. CoreMark Taille : 666 Nombre total de ticks : 14243088 Durée totale (secondes) : 14,243088 Itérations/s : 280,837976 Itérations : 4000 Version du compilateur : GCC10.3.1 20210621 (version publiée) Drapeaux du compilateur : og Emplacement mémoire : STACK seedcrc : 0xe9f5
[0]liste de contrôle : 0xe714
[0]matrice crcmatrix : 0x1fd7
[0]état crc : 0x8e3a
[0]crcfinal : 0x65c5 Opération correcte validée. Voir README.md pour les règles d’exécution et de création de rapports. CoreMark 1.0 : 280.837976 / GCC10.3.1 20210621 (version) et / STACK
|
Paramètres d’exécution de performances 2K pour Coremark. Taille de CoreMark : 666 Nombre total de tiques : 14243088 Durée totale (secondes) : 14.243088 Itérations/sec : 280,837976 Itérations : 4000 Version du compilateur : GCC10.3.1 20210621 (version release) Drapeaux du compilateur : og Emplacement de la mémoire : STACK seedcrc : 0xe9f5 [0]liste de contrôle : 0xe714 [0]matrice crcmatrix : 0x1fd7 [0]état crc : 0x8e3a [0]crcfinal : 0x65c5 Fonctionnement correct validé. Voir README.md pour les règles d’exécution et de création de rapports. CoreMark 1.0 : 280.837976 / GCC10.3.1 20210621 (version) et / STACK |
Ici le score est de 280,83 CoreMark/MHz ou similaire aux 286 CoreMark/MHz pour le cœur RISC-V. Notez qu’il ne s’agit pas d’un test standardisé…
Le CoreMark/MHz de 3,81 signalé pour le Hazard3 RISC-V est probablement meilleur que celui du Cortex-M33 du microcontrôleur LPC55xx, car le document intitulé « LPC55xx CoreMark on Cortex-M33 Porting Guide » mentionne 4,08 CoreMark/MHz. Dans tous les cas, les cœurs Cortex-M33 et Hazard3 ont des performances en nombres entiers très similaires. Une personne a exécuté un échantillon avec une virgule flottante et le cœur Hazard3 est actuellement beaucoup plus lent que les cœurs Cortex-M33 car il utilise une implémentation logicielle, tandis que le Cortex-M33 s’appuie sur des « routines FP hautement optimisées ».
RISC-V Linux pour cartes RP2350 avec PSRAM
Mr-Bossman a récemment publié un portage Linux RISC-V utilisant le système de construction buildroot que vous pouvez trouver sur GitHub. Le Raspberry Pi Pico 2 ne pourra pas exécuter RISC-V Linux simplement parce qu’il n’a pas assez de RAM avec seulement 520 Ko du MCU RP2350 et seulement 4 Mo de flash sur la carte pour le stockage. C’est pourquoi le portage Linux RISC-V a été testé sur la carte Sparkfun Pro Micro – RP2350 avec 16 Mo de flash et 8 Mo de PSRAM.
Néanmoins, je vais essayer de construire l’image Linux sur mon ordinateur portable, et j’obtiendrai également une chaîne d’outils gcc RISC-V fonctionnelle dans le processus :
git clone https://github.com/Mr-Bossman/pi-pico2-linux cd pi-pico2-linux git sous-module mise à jour –init cd buildroot make BR2_EXTERNAL=$PWD/../ raspberrypi-pico2_defconfig make -j 16
|
clone git https://github.com/Mr-Bossman/pi-pico2-linux cd pi-pico2-linux Mise à jour du sous-module git –init cd buildroot faire BR2_EXTERNAL=$PWD/../ raspberrypi-pico2_defconfig faire -j 16 |
Cela prendra un certain temps et se terminera par :
>>> Exécution du script post-image support/scripts/genimage.sh INFO : cmd : « mkdir -p « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp » » (stderr) : INFO : cmd : « rm -rf « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp »/* » (stderr) : INFO : cmd : « mkdir -p « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/images » » (stderr) : INFO : hdimage(flash-image.bin) : ajout de la partition primaire ‘raspberrypi-pico2.dtb’ à partir de ‘raspberrypi-pico2.dtb’ … INFO: hdimage(flash-image.bin): ajout de la partition primaire ‘Image’ à partir de ‘Image’ … INFO: hdimage(flash-image.bin): ajout de la partition primaire ‘rootfs.ext4’ à partir de ‘rootfs.ext4’ … INFO: cmd: « rm -rf « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp/ » » (stderr):
|
>>> Exécution du script post-image support/scripts/genimage.sh INFO : cmd : « mkdir -p « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp » » (stderr) : INFO : cmd : « rm -rf « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp »/* » (stderr) : INFO : cmd : « mkdir -p « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/images » » (stderr) : INFO : hdimage(flash-image.bin) : ajout de la partition principale « raspberrypi-pico2.dtb » à partir de « raspberrypi-pico2.dtb » … INFO : hdimage(flash-image.bin) : ajout de la partition principale « Image » à partir de « Image » … INFO : hdimage(flash-image.bin) : ajout de la partition principale « rootfs.ext4 » à partir de « rootfs.ext4 » … INFO : cmd : « rm -rf « /home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp/ » » (stderr) : |
Nous pouvons vérifier les images résultantes dans le répertoire approprié :
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot$ ls -lh output/images/ total 13M -rw-r–r– 1 jaufranc jaufranc 6,0M 31 août 11:51 flash-image.bin -rw-r–r– 1 jaufranc jaufranc 3,1M 31 août 11:28 Image -rwxr-xr-x 1 jaufranc jaufranc 1,2K 31 août 11:28 raspberrypi-pico2.dtb -rw-r–r– 1 jaufranc jaufranc 833K 31 août 11:51 rootfs.cpio -rw-r–r– 1 jaufranc jaufranc 454K 31 août 11:51 rootfs.cpio.gz -rw-r–r– 1 jaufranc jaufranc 2,0 M 31 août 11:51 rootfs.ext2 lrwxrwxrwx 1 jaufranc jaufranc 11 31 août 11:51 rootfs.ext4 -> rootfs.ext2 -rw-r–r– 1 jaufranc jaufranc 1,2 M 31 août 11:51 rootfs.tar
|
jaufranc@Raspberryme-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot$ ls -lh sortie/images/ total 13M -rw-r–r– 1 jaufranc jaufranc 6.0M 31 août 11:51 flash-image.bin -rw-r–r– 1 jaufranc jaufranc 3.1M 31 août 11:28 Image -rwxr-xr-x 1 jaufranc jaufranc 1,2K 31 août 11:28 raspberrypi-pico2.dtb -rw-r–r– 1 jaufranc jaufranc 833K 31 août 11:51 rootfs.cpio -rw-r–r– 1 jaufranc jaufranc 454K 31 août 11:51 rootfs.cpio.gz -rw-r–r– 1 jaufranc jaufranc 2.0M 31 août 11:51 rootfs.ext2 lrwxrwxrwx 1 jaufranc jaufranc 11 août 31 11:51 rootfs.ext4 -> rootfs.ext2 -rw-r–r– 1 jaufranc jaufranc 1,2M 31 août 11:51 rootfs.tar |
« Image » est le noyau Linux, « rootfs.ext2 » les systèmes de fichiers root, « raspberrypi-pico2.dtb » le fichier d’arborescence des périphériques et « flash-image.bin » l’image complète. Sa taille est de 6 Mo, vous aurez donc besoin d’une carte Raspberry Pi RP2350 avec au moins 8 Mo de mémoire flash plus un peu de PSRAM.
Nous n’avons pas tout à fait terminé et il nous reste une commande pour terminer la construction :
cd ../psram-bootloader crée un noyau flash
|
cd ../psram-bootloader créer un noyau flash |
La dernière commande échoue avec :
cd build && cmake .. Erreur CMake à pico_sdk_import.cmake:74 (message) : Répertoire ‘/home/jaufranc/.pico-sdk/sdk/2.0.0’ introuvable Pile d’appels (appel le plus récent en premier) : CMakeLists.txt:40 (include) — Configuration incomplète, des erreurs se sont produites ! make : *** [Makefile:10: build/Makefile] Erreur 1
|
construction de CD et cmake .. Erreur CMake dans pico_sdk_import.cmake:74 (message) : Répertoire ‘/home/jaufranc/.pico-sdk/sdk/2.0.0’ introuvable Pile d’appels (appel le plus récent en premier) : CMakeLists.txt:40 (inclure) — Configuration incomplète, des erreurs se sont produites ! faire: *** [Makefile:10: build/Makefile] Erreur 1 |
C’est parce que CMakeList.txt doit être mis à jour pour correspondre à la configuration de votre système, notamment les trois lignes ci-dessous :
définir(CHEMIN_SDK_PICO ${USERHOME}/edev/Raspberry-Pi-Pico-2/pico-sdk/) définir(CHEMIN_CHAIN_OUTILS_PICO ${USERHOME}/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530) définir(HINT_pioasm ${USERHOME}/edev/Raspberry-Pi-Pico-2/pico-sdk/tools/pioasm)
|
définir(PICO_SDK_PATH ${USERHOME}/edev/Raspberry-Pi-Pico-2/pico-sdk/) définir(PICO_TOOLCHAIN_PATH ${USERHOME}/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530) set(pioasm_HINT ${USERHOME}/edev/Raspberry-Pi-Pico-2/pico-sdk/tools/pioasm) |
Après avoir modifié ces lignes, la construction a pu se terminer et a échoué uniquement lors de la tentative de flashage de l’image puisque je n’en ai connecté aucune :
|
[ 98%] Création d’un objet C CMakeFiles/psram-bootloader.dir/home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj [100%] Liaison de l’exécutable CXX psram-bootloader.elf faire[3]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build’ [100%] Cible construite psram-bootloader faire[2]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build’ faire[1]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build’ faire[1]:Entrée dans le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader’ Makefile:26: *** Aucun périphérique RP2350 trouvé. Arrêtez. faire[1]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader’ faire: *** [Makefile:31: flash] Erreur 2 |
Si je connecte mon Raspberry Pi Pico 2, il va plus loin en me demandant le mot de passe sudo lors de l’exécution de picotool pour flasher l’image de la carte :
|
[100%] Cible construite psram-bootloader faire[2]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build’ faire[1]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build’ faire[1]:Entrée dans le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader’ cp build/psram-bootloader.uf2 « /media/jaufranc/RP2350″/ faire[1]: Quitter le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader’ dormir 3 faire[1]:Entrée dans le répertoire ‘/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader’ Vous devez être root ! sudo make picotool PICOTOOL_ARGS=’load -fxp 0 ../buildroot/output/images/flash-image.bin’ [sudo] mot de passe pour jaufranc: |
Comme il est conçu uniquement pour le Sparkfun Pro Micro – RP2350, je me suis arrêté là. Il a quand même réussi à changer quelque chose car mon Pi Pico 2 n’exécute pas l’échantillon clignotant et affiche ce qui suit dans la console série :
ID PSRAM non valide : 0 La configuration de la PSRAM a échoué. Appuyez sur n’importe quelle touche pour réinitialiser.
|
ID PSRAM non valide : 0 Échec de la configuration de la PSRAM Appuyez sur n’importe quelle touche pour réinitialiser. |
C’est parce qu’un nouveau chargeur de démarrage a été copié sur la carte :
cp build/psram-bootloader.uf2 « /media/jaufranc/RP2350″/
|
cp build/psram-bootloader.uf2 « /media/jaufranc/RP2350″/ |
Je suis bloqué. Bien que je puisse copier un autre firmware UF2, la carte ne redémarre pas et la mise à jour échoue apparemment car elle exécute toujours le psram-bootloader après un cycle d’alimentation. J’ai posé la question sur les forums Raspberry Pi et nous verrons s’il existe une solution. [Update: The solution – in the comments section below and the forum thread – was to simply copy flash_nuke.uf2 to the board to clear the flash].
Ce sera tout. J’espère que cet article pourra aider certaines personnes à démarrer plus facilement avec les cœurs RISC-V sur la carte Raspberry Pi Pico 2 et le MCU RP2350.
Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

-
RP2350 Développement Carte Pico 2 RP2350 MCU Board Basée sur Raspberry Pi RP2350A Puce de Microcontrôleur à Double-cœur et Double-Architecture, 4MB Flash, Type-C Connecteur
-
Raspberry Pi® Pico 2 WH Microcontrôleur Pico 2 WH
