Использование ядер RISC-V на плате Raspberry Pi Pico 2 и микроконтроллере RP2350 – От мигания светодиодом до сборки Linux

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 USB cable Debug Probe kit

В комплекте с 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.

Raspberry Pi Pico 2 Blink simple Встроенный светодиод начинает мигать. Успех!

Raspberry Pi Pico 2 Arm RISC-V LED blink

Мигание на ядрах RISC-V

Повторим процесс для ядер RISC-V. В PDF-документации Pico C/C++ SDK указано (раздел 2.10), что только свежие версии GCC поддерживают Hazard3, поэтому потребуется сборка из исходников или выбор альтернативной цепочки инструментов, например CORE-V toolchain , доступной для различных дистрибутивов Linux и macOS.

CORE-V RISC-V toolchain

На 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.

Raspberry Pi Pico 2 serial 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.

RP2350 Hello World Serial

Использование программы Bootterm с устройством /dev/ttyACM0 от Raspberry Pi Debug Probe.

Копирование hello_usb.uf2 на плату с последующим подключением через USB-C и Bootterm к /dev/ttyACM1 (встроенный USB интерфейс RP2350).

RP2350 Hello World USB serial

Сравнение кода 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.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments