Raspberry Pi Pico 2 был выпущен в прошлом месяце с микроконтроллером Raspberry Pi RP2350, оснащенным двумя ядрами Arm Cortex-M33 и двумя 32-разрядными ядрами RISC-V «Hazard3», при этом одновременно могут использоваться до двух ядер. В этом руководстве будет показано, как использовать ядра RISC-V в RP2350, сравнить их производительность с ядрами Arm Cortex-M33 и даже собрать Linux для RISC-V на платах RP2350 с PSRAM.
Помимо увеличенной памяти, более мощных ядер и новых функций безопасности, включая интерфейс HSTX , Raspberry Pi Pico 2 и Pico останутся схожими для конечного пользователя. Инструкции из статьи » Начало работы с Raspberry Pi Pico на MicroPython и C » остаются актуальными. Поскольку образ MicroPython для RISC-V пока недоступен, основное внимание уделим запуску программ на C для ядер RISC-V.
Быстрая проверка ядер Arm
В комплекте с Raspberry Pi Pico 2 были кабель micro USB/USB и Raspberry Pi Debug Probe , которые используются в статье.
Для последующего тестирования производительности ядер Arm сначала настроим среду C/C++, проверив работу платы миганием встроенного светодиода. Установим зависимости, SDK и примеры кода:
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
Действия аналогичны Raspberry Pi Pico. Соберем демо blink_simple для RP2350:
cd pico-examples/blink_simple/
export PICO_SDK_PATH=../../pico-sdk
cmake -DPICO_PLATFORM=rp2350 ..
cd blink_simple
make -j16
Процедура почти идентична, но требуется добавить «-DPICO_PLATFORM=rp2350», так как Pico SDK по умолчанию использует RP2040.
Полученные файлы:
jaufranc@CNX-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple$ ls -l
total 924
-rwxrwxr-x 1 jaufranc jaufranc 5988 Aug 31 10:05 blink_simple.bin
-rw-rw-r-- 1 jaufranc jaufranc 61996 Aug 31 10:05 blink_simple.dis
-rwxrwxr-x 1 jaufranc jaufranc 391376 Aug 31 10:05 blink_simple.elf
-rw-rw-r-- 1 jaufranc jaufranc 316949 Aug 31 10:05 blink_simple.elf.map
-rw-rw-r-- 1 jaufranc jaufranc 12800 Aug 31 10:05 blink_simple.uf2
drwxrwxr-x 3 jaufranc jaufranc 4096 Aug 31 10:04 CMakeFiles
-rw-rw-r-- 1 jaufranc jaufranc 1161 Aug 31 10:03 cmake_install.cmake
-rw-rw-r-- 1 jaufranc jaufranc 132463 Aug 31 10:03 Makefile
Подтверждение архитектуры Arm:
file blink_simple.elf
blink_simple.elf: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped
Скопируем прошивку «blink_simple.uf2» на Raspberry Pi Pico 2, отображаемый в файловом менеджере как RP2350.
Встроенный светодиод начинает мигать. Успех!
Мигание на ядрах RISC-V
Повторим процесс для ядер RISC-V. В PDF-документации Pico C/C++ SDK указано (раздел 2.10), что только свежие версии GCC поддерживают Hazard3, поэтому потребуется сборка из исходников или выбор альтернативной цепочки инструментов, например CORE-V toolchain , доступной для различных дистрибутивов Linux и macOS.
На Ubuntu 22.04 была установлена соответствующая цепочка инструментов с настройкой переменных PICO_TOOLCHAIN_PATH и 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
Настроим сборку blink_sample для RISC-V:
cd pico-examples/blink_simple/
rm CMakeCache.txt
cmake -DPICO_PLATFORM=rp2350-riscv ..
Проверка выбора цепочки инструментов:
Using PICO_SDK_PATH from environment ('../../pico-sdk')
PICO_SDK_PATH is /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk
Defaulting target board (PICO_BOARD) to 'pico2' since not specified.
Using board configuration from /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/src/boards/include/boards/pico2.h
Pico Platform (PICO_PLATFORM) is 'rp2350-riscv'.
-- Defaulting build type to 'Release' since not specified.
Defaulting compiler (PICO_COMPILER) to 'pico_riscv_gcc' since not specified.
Configuring toolchain based on PICO_COMPILER 'pico_riscv_gcc'
Defaulting PICO_GCC_TRIPLE to 'riscv32-unknown-elf;riscv32-corev-elf'
-- The C compiler identification is GNU 14.1.0
-- The CXX compiler identification is GNU 14.1.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/jaufranc/edev/Raspberry-Pi-Pico-2/corev-openhw-gcc-ubuntu2204-20240530/bin/riscv32-corev-elf-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Release
-- Found Python3: /usr/bin/python3.10 (found version "3.10.12") found components: Interpreter
TinyUSB available at /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
BTstack available at /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/btstack
cyw43-driver available at /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/cyw43-driver
lwIP available at /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/lwip
mbedtls available at /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-sdk/lib/mbedtls
Skipping encrypted example which is unsupported on this platform
Skipping hello_dcp example which is unsupported on this platform
Skipping cache_perfctr example which is unsupported on this platform
Skipping ssi_dma example which is unsupported on this platform
Skipping multicore_fifo_irqs example which is unsupported on this platform
Skipping RTC examples as hardware_rtc is unavailable on this platform
Skipping universal examples as PICO_RISCV_TOOLCHAIN_PATH and PICO_ARM_TOOLCHAIN_PATH are not defined
Skipping TinyUSB dual examples, as TinyUSB hw/mcu/raspberry_pi/Pico-PIO-USB submodule unavailable
Skipping FreeRTOS examples as FREERTOS_KERNEL_PATH not defined
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jaufranc/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple
Некоторые примеры несовместимы с RISC-V из-за использования функций, доступных только для Arm.
Попытка сборки:
cd blink_simple
make
Файлы аналогичны, но отличаются размерами:
jaufranc@CNX-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/blink_simple/blink_simple$ ls -l
total 916
-rwxrwxr-x 1 jaufranc jaufranc 6596 Aug 31 10:37 blink_simple.bin
-rw-rw-r-- 1 jaufranc jaufranc 109916 Aug 31 10:37 blink_simple.dis
-rwxrwxr-x 1 jaufranc jaufranc 344512 Aug 31 10:37 blink_simple.elf
-rw-rw-r-- 1 jaufranc jaufranc 322778 Aug 31 10:37 blink_simple.elf.map
-rw-rw-r-- 1 jaufranc jaufranc 13824 Aug 31 10:37 blink_simple.uf2
drwxrwxr-x 3 jaufranc jaufranc 4096 Aug 31 10:32 CMakeFiles
-rw-rw-r-- 1 jaufranc jaufranc 1237 Aug 31 10:32 cmake_install.cmake
-rw-rw-r-- 1 jaufranc jaufranc 121565 Aug 31 10:32 Makefile
Например, blink_simple.uf2 занимает 13824 байт для RISC-V против 12800 байт для Arm.
Подтверждение архитектуры:
file blink_simple.elf
blink_simple.elf: ELF 32-bit LSB executable, UCB RISC-V, RVC, soft-float ABI, version 1 (SYSV), statically linked, with debug_info, not stripped
Альтернативная проверка через скрипт uf2conv.py от Microsoft:
jaufranc@CNX-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
--- UF2 File Header Info ---
Family ID is RP2XXX_ABSOLUTE, hex value is 0xe48bff57
Target Address is 0x10ffff00
Family ID is RP2350_RISCV, hex value is 0xe48bff5a
Target Address is 0x10000000
All block flag values consistent, 0x2000
----------------------------
Активируем режим загрузчика нажатием BOOTSEL с последующим циклом питания, затем копируем blink_simple.uf2 на диск RP2350…
Успех! Светодиод мигает при работе бинарного файла RISC-V на Raspberry Pi Pico 2.
Вывод последовательных данных на Raspberry Pi Pico 2 / Cytron MOTION 2350 Pro
Для тестирования производительности потребуется последовательный консольный вывод. Используя перемычки, припаяны три провода к контактам 1-3 платы и подключены к Raspberry Pi Debug Probe.
Сборка hello_world для RISC-V:
cd pico-examples/hello_world/
cmake -DPICO_PLATFORM=rp2350-riscv ..
cd hello_world/
make
Отсутствие UF2-файла:
jaufranc@CNX-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2/pico-examples/hello_world/hello_world$ ls -l
total 24
drwxrwxr-x 2 jaufranc jaufranc 4096 Aug 31 12:52 CMakeFiles
-rw-rw-r-- 1 jaufranc jaufranc 1566 Aug 31 12:51 cmake_install.cmake
-rw-rw-r-- 1 jaufranc jaufranc 4761 Aug 31 12:51 Makefile
drwxrwxr-x 3 jaufranc jaufranc 4096 Aug 31 12:53 serial
drwxrwxr-x 3 jaufranc jaufranc 4096 Aug 31 12:53 usb
Обнаружено два варианта hello_world: «serial» выводит данные через UART (требуется USB-TTL адаптер), а «usb» использует встроенный USB-UART, позволяя обойтись без отладочного зонда.
После временного «зависания» платы (см. раздел RISC-V Linux) для тестирования переключились на Cytron MOTION 2350 Pro , начав с hello_serial.uf2.
Использование программы Bootterm с устройством /dev/ttyACM0 от Raspberry Pi Debug Probe.
Копирование hello_usb.uf2 на плату с последующим подключением через USB-C и Bootterm к /dev/ttyACM1 (встроенный USB интерфейс RP2350).
Сравнение кода hello_serial.c:
#include <stdio.h>
#include "pico/stdlib.h"
int main() {
stdio_init_all();
while (true) {
printf("Hello, world!\n");
sleep_ms(1000);
}
}
~
и hello_usb.c:
#include <stdio.h>
#include "pico/stdlib.h"
int main() {
stdio_init_all();
while (true) {
printf("Hello, world!\n");
sleep_ms(1000);
}
}
Файлы идентичны. Разница задается в CMakeLists.txt.
Для последовательного интерфейса:
add_executable(hello_serial
hello_serial.c
)
# pull in common dependencies
target_link_libraries(hello_serial pico_stdlib)
# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(hello_serial)
# add url via pico_set_program_url
example_auto_set_url(hello_serial)
Для USB:
cat CMakeLists.txt
if (TARGET tinyusb_device)
add_executable(hello_usb
hello_usb.c
)
# pull in common dependencies
target_link_libraries(hello_usb pico_stdlib)
# enable usb output, disable uart output
pico_enable_stdio_usb(hello_usb 1)
pico_enable_stdio_uart(hello_usb 0)
# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(hello_usb)
# add url via pico_set_program_url
example_auto_set_url(hello_usb)
elseif(PICO_ON_DEVICE)
message("Skipping hello_usb because TinyUSB submodule is not initialized in the SDK")
endif()
Переключение между режимами осуществляется двумя строками:
# enable usb output, disable uart output
pico_enable_stdio_usb(hello_usb 1)
pico_enable_stdio_uart(hello_usb 0)
Полезно знать.
Тестирование CoreMark на ядрах Arm и RISC-V в RP2350
Для оценки производительности Hazard3 RISC-V относительно Cortex-M33 использован проект CoreMark-RP2040 на GitHub. Для сборки под RISC-V в Makefile добавлен флаг «-DPICO_PLATFORM=rp2350-riscv»:
mkdir build && mkdir artifacts_to_upload && cd build && cmake -DPICO_PLATFORM=rp2350-riscv .. -DCMAKE_BUILD_TYPE=Debug && $(BUILD_SYS)
Экспортирован полный путь к Pico SDK. Сборка завершена:
export PICO_SDK_PATH=~/edev/Raspberry-Pi-Pico-2/pico-sdk/
make all
UF2-файл в каталоге artifacts_to_upload:
ls -l artifacts_to_upload/
total 764
-rwxrwxr-x 1 jaufranc jaufranc 667040 Aug 31 15:23 Coremark-RP2040.elf
-rw-rw-r-- 1 jaufranc jaufranc 111616 Aug 31 15:23 Coremark-RP2040.uf2
Копирование на плату (MOTION 2350 Pro) и запуск бенчмарка в консоли не удался:
jaufranc@CNX-LAPTOP-5:~/edev/Raspberry-Pi-Pico-2$ bt
No port specified, using ttyACM1 (last registered). Use -l to list ports.
Trying port ttyACM1... Connected to ttyACM1 at 115200 bps.
Escape character is 'Ctrl-]'. Use escape followed by '?' for help.
CoreMark Performance Benchmark
CoreMark measures how quickly your processor can manage linked
lists, compute matrix multiply, and execute state machine code.
Iterations/Sec is the main benchmark result, higher numbers are better.
Press any key to continue....
Running.... (usually requires 12 to 20 seconds)
Starting core 0 iterations
Starting core 1 iterations
Требовалось установить MULTITHREAD=1 в src/core_portme.h:
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 13973896
Total time (secs): 13.973896
Iterations/Sec : 286.248016
Iterations : 4000
Compiler version : GCC14.1.0
Compiler flags : og
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x65c5
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 286.248016 / GCC14.1.0 og / STACK
Результат (286.2 CoreMark/MHz) значительно отличался от данных в репозитории Hazard3 для RISC-V:
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 15758494
Total time (secs): 15.758494
Iterations/Sec : 3.807470
Iterations : 60
Compiler version : GCC14.2.1 20240807
Compiler flags : -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
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0xa14c
Correct operation validated. See README.md for run and reporting rules.
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
Указано 3.81 CoreMark/MHz.
Тест производительности на одном из ядер Cortex-M33:
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 14243088
Total time (secs): 14.243088
Iterations/Sec : 280.837976
Iterations : 4000
Compiler version : GCC10.3.1 20210621 (release)
Compiler flags : og
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x65c5
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 280.837976 / GCC10.3.1 20210621 (release) og / STACK
Результат ~280.83 CoreMark/MHz схож с показателем RISC-V (286 CoreMark/MHz). Тест не стандартизирован…
Значение 3.81 CoreMark/MHz для Hazard3 вероятнее сопоставимо с Cortex-M33 в микроконтроллерах LPC55xx (документ » LPC55xx CoreMark Porting Guide for Cortex-M33 » указывает 4.08 CoreMark/MHz). Оба ядра демонстрируют схожую производительность в целочисленных операциях. В тесте с плавающей запятой Hazard3 значительно уступает из-за программной реализации, тогда как Cortex-M33 использует оптимизированные FP-процедуры.
RISC-V Linux для плат RP2350 с PSRAM
Недавно выпущен порт RISC-V Linux через Buildroot ( репозиторий на GitHub ). Raspberry Pi Pico 2 не подходит из-за недостатка ОЗУ (520 КБ) и флеш-памяти (4 МБ). Тестирование проводилось на Sparkfun Pro Micro – RP2350 с 16 МБ флеш-памяти и 8 МБ PSRAM .
Попытка сборки образа Linux:
git clone https://github.com/Mr-Bossman/pi-pico2-linux
cd pi-pico2-linux
git submodule update --init
cd buildroot
make BR2_EXTERNAL=$PWD/../ raspberrypi-pico2_defconfig
make -j 16
Процесс занимает время и завершается:
>>> Executing post-image script 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): adding primary partition 'raspberrypi-pico2.dtb' from 'raspberrypi-pico2.dtb' ...
INFO: hdimage(flash-image.bin): adding primary partition 'Image' from 'Image' ...
INFO: hdimage(flash-image.bin): adding primary partition 'rootfs.ext4' from 'rootfs.ext4' ...
INFO: cmd: "rm -rf "/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/buildroot/output/build/genimage.tmp/"" (stderr):
Результирующие файлы в каталоге:
jaufranc@CNX-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 Aug 31 11:51 flash-image.bin
-rw-r--r-- 1 jaufranc jaufranc 3.1M Aug 31 11:28 Image
-rwxr-xr-x 1 jaufranc jaufranc 1.2K Aug 31 11:28 raspberrypi-pico2.dtb
-rw-r--r-- 1 jaufranc jaufranc 833K Aug 31 11:51 rootfs.cpio
-rw-r--r-- 1 jaufranc jaufranc 454K Aug 31 11:51 rootfs.cpio.gz
-rw-r--r-- 1 jaufranc jaufranc 2.0M Aug 31 11:51 rootfs.ext2
lrwxrwxrwx 1 jaufranc jaufranc 11 Aug 31 11:51 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 jaufranc jaufranc 1.2M Aug 31 11:51 rootfs.tar
«Image» – ядро Linux, «rootfs.ext2» – корневая ФС, «raspberrypi-pico2.dtb» – devicetree, «flash-image.bin» – полный образ (6 МБ). Требуется плата RP2350 с минимум 8 МБ флеш-памяти и PSRAM.
Завершение сборки:
cd ../psram-bootloader
make flash-kernel
Ошибка на последнем этапе:
cd build && cmake ..
CMake Error at pico_sdk_import.cmake:74 (message):
Directory '/home/jaufranc/.pico-sdk/sdk/2.0.0' not found
Call Stack (most recent call first):
CMakeLists.txt:40 (include)
-- Configuring incomplete, errors occurred!
make: *** [Makefile:10: build/Makefile] Error 1
Требовалось обновить CMakeLists.txt, указав конфигурацию системы:
set(PICO_SDK_PATH ${USERHOME}/edev/Raspberry-Pi-Pico-2/pico-sdk/)
set(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)
После правки сборка завершилась с ошибкой при попытке прошивки (плата не подключена):
[ 98%] Building C object 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%] Linking CXX executable psram-bootloader.elf
make[3]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build'
[100%] Built target psram-bootloader
make[2]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build'
make[1]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build'
make[1]: Entering directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader'
Makefile:26: *** No RP2350 device found. Stop.
make[1]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader'
make: *** [Makefile:31: flash] Error 2
При подключении Raspberry Pi Pico 2 запрашивается пароль sudo для picotool:
[100%] Built target psram-bootloader
make[2]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build'
make[1]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader/build'
make[1]: Entering directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader'
cp build/psram-bootloader.uf2 "/media/jaufranc/RP2350"/
make[1]: Leaving directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader'
sleep 3
make[1]: Entering directory '/home/jaufranc/edev/Raspberry-Pi-Pico-2/pi-pico2-linux/psram-bootloader'
You must be root!
sudo make picotool PICOTOOL_ARGS='load -fxp 0 ../buildroot/output/images/flash-image.bin'
[sudo] password for jaufranc:
Поскольку прошивка рассчитана только на Sparkfun Pro Micro – RP2350, процесс остановлен. Плата перестала запускать демо blink из-за изменений загрузчика:
Invalid PSRAM ID: 0
PSRAM setup failed
Press any key to reset.
Новый загрузчик:
cp build/psram-bootloader.uf2 "/media/jaufranc/RP2350"/
Плата не перезагружается, сохраняя psram-bootloader после цикла питания. Вопрос на форуме Raspberry Pi . [Обновление: решение найдено в комментариях – копирование flash_nuke.uf2 для очистки флеш-памяти].
Надеемся, статья поможет начать работу с ядрами RISC-V на Raspberry Pi Pico 2 и микроконтроллерах RP2350.
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.