Скачайте документ с описанием быстрого старта [1]. Далее будут инструкции, которые описаны в разделе "Manually Configure your Environment" этого документа.
[Скачайте SDK и примеры]
1. Репозиторий Pico Examples предоставляет несколько примеров приложений, написанных с помощью SDK. Для клонирования этих репозиториев создайте директорию pico в любом месте на диске, где вы намереваетесь хранить свои файлы, связанные с Raspberry Pi Pico. Описанные ниже команды предполагают, что вы создали подкаталог с именем pico в вашей домашней директории:
$ mkdir ~/pico
2. Выполните клонирование git-репозиториев pico-sdk и pico-examples в созданную папку pico:
$ cd ~/pico
$ git clone https://github.com/raspberrypi/pico-sdk.git --branch master
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ git clone https://github.com/raspberrypi/pico-examples.git --branch master
[Установите тулчейн]
3. Чтобы выполнить сборки приложений в каталоге pico-examples, вам нужно установить некоторые дополнительные инструменты. Чтобы собрать проекты, вам нужен CMake, кроссплатформенная среда для сборки кода, а также ARM GNU Toolchain. Запустите следующую команду для установки этих зависимостей:
Пользователям Ubuntu и Debian может дополнительно понадобиться выполнить установку (на моей установленной Ubuntu 24.04 это не понадобилось):
$ apt install g++ libstdc++-arm-none-eabi-newlib
[Сборка программы Blink]
4. Из созданной ранее директории pico перейдите в её подкаталог pico-examples и создайте в нем директорию build:
$ cd pico-examples
$ mkdir build
$ cd build
5. Установите переменную окружения PICO_SDK_PATH, предполагая, что вы клонировали pico-sdk и pico-examples в одну и ту же директорию:
$ export PICO_SDK_PATH=pico-sdk
Примечание: в этом руководстве мы используем относительный путь pico-sdk в директорию репозитория SDK для переменной окружения PICO_SDK_PATH. По какой-нибудь причине у вас может быть другая структура каталогов. Поэтому в зависимости от места расположения вашего репозитория вы можете заменить этот путь на другой, в том числе и абсолютный.
6. Выполните команду для подготовки к сборке:
$ cmake ..
Using PICO_SDK_PATH from environment ('pico-sdk')
PICO_SDK_PATH is ~/pico/pico-sdk
Defaulting platform (PICO_PLATFORM) to 'rp2040' since not specified.
...
$ cmake ..
Using PICO_SDK_PATH from environment ('pico-sdk')
PICO_SDK_PATH is ~/pico/pico-sdk
Defaulting platform (PICO_PLATFORM) to 'rp2040' since not specified.
Defaulting target board (PICO_BOARD) to 'pico' since not specified.
Using board configuration from ~/pico/pico-sdk/src/boards/include/boards/pico.h
Pico Platform (PICO_PLATFORM) is 'rp2040'.
-- Defaulting build type to 'Release' since not specified.
Defaulting compiler (PICO_COMPILER) to 'pico_arm_cortex_m0plus_gcc'
since not specified.
Configuring toolchain based on PICO_COMPILER 'pico_arm_cortex_m0plus_gcc'
Defaulting PICO_GCC_TRIPLE to 'arm-none-eabi'
-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/arm-none-eabi-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: /usr/bin/arm-none-eabi-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Release
-- Found Python3: ~/.pyenv/shims/python3 (found version "3.13.0") found
components: Interpreter TinyUSB available at
~/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040;
enabling build support for USB.
BTstack available at ~/pico/pico-sdk/lib/btstack
cyw43-driver available at ~/pico/pico-sdk/lib/cyw43-driver
lwIP available at ~/pico/pico-sdk/lib/lwip
mbedtls available at ~/pico/pico-sdk/lib/mbedtls
CMake Warning at ~/pico/pico-sdk/tools/Findpicotool.cmake:30 (message):
No installed picotool with version 2.1.1 found - building from source
It is recommended to build and install picotool separately, or to set
PICOTOOL_FETCH_FROM_GIT_PATH to a common directory for all your SDK
projects
Call Stack (most recent call first):
~/pico/pico-sdk/tools/CMakeLists.txt:138 (find_package)
~/pico/pico-sdk/tools/CMakeLists.txt:493 (pico_init_picotool)
~/pico/pico-sdk/src/cmake/on_device.cmake:56 (picotool_postprocess_binary)
blink/CMakeLists.txt:13 (pico_add_extra_outputs)
Downloading Picotool
Only building blink_any for non W boards as PICO_CYW43_SUPPORTED is not set
Skipping encrypted example which is unsupported on this platform
Skipping hello_dcp example which is unsupported on this platform
Skipping runtime_flash_permissions example which is unsupported on this platform
Skipping dvi_out_hstx_encoder example which is unsupported on this platform
Skipping spi_lcd example which is unsupported on this platform
Skipping multicore_doorbell example which is unsupported on this platform
Skipping hello_otp example which is unsupported on this platform
Skipping boot_info example which is unsupported 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 SHA256 examples as pico_sha256 or pico_mbedtls unavailable
Skipping FreeRTOS examples as FREERTOS_KERNEL_PATH not defined
-- Configuring done (3.8s)
-- Generating done (1.4s)
-- Build files have been written to: ~/pico/pico-examples/build
Важное замечание: SDK по умолчанию собирает бинарники для Raspberry Pi Pico. Чтобы выполнить сборку для другой платы, передайте опцию -DPICO_BOARD=board для CMake, заменив board на имя платы, которую вы хотите использовать. Для сборки бинарного кода для Pico 2 передайте -DPICO_BOARD=pico2. Для сборки бинарника для Pico W передайте -DPICO_BOARD=pico_w. Также вы можете указать сеть Wi-Fi и пароль для неё, что понадобится для примеров Pico W, путем передачи опций -DWIFI_SSID="ваша_сеть"-DWIFI_PASSWORD="ваш_пароль".
7. Теперь вы можете выполнить сборку всех примеров приложений. Ниже будут показаны команды для сборки проекта blink (его код находится в файле pico-examples/blink/blink.c). Чтобы выполнить сборку для определенного подкаталога примеров, перейдите в соответствующий подкаталог перед запуском make.
Для нашего случая мы будем выполнять сборку только blink, поэтому сначала перейдем в каталог blink, а затем запустим make.
$ cd blink
$ make -j4
Примечание: в этом примере для команды make используется опция -j4, что ускорит сборку путем выполнения четырех заданий параллельно. Если вы выполняете сборку на хосте Raspberry Pi 5, то вполне можете использовать её 4 ядра.
Результатом сборки будут следующие файлы в каталоге pico-examples/build/blink:
Файл
Описание
blink.bin
Сырой двоичный код программы.
blink.dis
Дизассемблированный код программы.
blink.elf
Код, используемый отладчиком.
blink.elf.map
Карта памяти программы.
blink.hex
Двоичный код программы в HEX-формате.
blink.uf2
Файл UF2 [4] для копирования на флешку (USB Mass Storage Device), которой представится наш микроконтроллер Raspberry Pi при подключении платы к USB.
[Загрузка и запуск скомпилированного примера]
8. Для загрузки скомпилированной программы в плату с микроконтроллером Raspberry Pi подключите её через USB к компьютеру, смонтируйте его устройство как USB Mass Storage Device и скопируйте файл *.uf2 на эту флешку. Моя платка Raspberry Pi Pico 2020 на Ubintu смонтировалась в каталог /media/user/RPI-RP2.
Нажмите и удерживайте кнопку BOOTSEL, когда подключаете вашу платку кабелем micro-USB, чтобы заставить загрузчик активировать USB Mass Storage Mode.
Содержимое "флешки", которой представилась наша плата:
$ ls -la /media/$USER/RPI-RP2/
total 28
drwxr-xr-x 2 user user 16384 янв 1 1970 .
drwxr-x---+ 3 root root 4096 апр 11 10:56 ..
-r--r--r-- 1 user user 241 сен 5 2008 INDEX.HTM
-r--r--r-- 1 user user 62 сен 5 2008 INFO_UF2.TXT
9. Скопируйте файл *.uf2 на вашу платку:
$ cp blink.uf2 /media/$USER/RPI-RP2
После выполнения этой команды устройство немедленно запустит программу, и зеленый светодиод на плате начнет мигать.
Примечание: вы можете использовать утилиту picotool для загрузки бинарника UF2 в свою платку Pico, см. "Appendix B" документа [1].
В зависимости от платформы, на которой вы выполняете компиляцию двоичного кода, вам может понадобиться вручную смонтировать USB-устройство флешки платки (mass storage device, USB MSD):
Если вы можете видеть файлы в каталоге /mnt/pico, то USB Mass Storage Device смонтировалось корректно:
$ ls /mnt/pico/
INDEX.HTM INFO_UF2.TXT
Копирование вашего файла blink.uf2 в устройство:
$ sudo cp blink.uf2 /mnt/pico
$ sudo sync
Примечание: последняя команда sudo sync может не понадобиться.
После этого микроконтроллер автоматически отключит USB Mass Storage Device и запустит ваш код, но для полной безопасности следует также вручную отмонтировать устройство флешки:
$ sudo umount /mnt/pico
Примечание: отключение питания (кабеля micro-USB) не удалит код вашей программы из памяти устройства. При восстановлении питания платы, если не удерживать при этом кнопку BOOTSEL, программа снова запустится, и светодиод начнет мигать.
[Использование других плат]
В некоторых случаях на плате может не быть кнопки BOOTSEL. Тогда понадобятся другие способы загрузки вашего кода, что должно быть описано в руководстве вашей платы:
• На большинстве плат Pico есть интерфейс SWD (см. "Appendix A: Debugprobe" [1]) который сбросит плату и загрузит код без необходимости нажатия на кнопку. • Может быть другой способ прошивки, путем подтяжки к лог. 0 вывода flash CS (это как раз то, что делает кнопка BOOTSEL на платах Pico), для этого может быть предусмотрена отдельная перемычка. • На некоторых платах есть кнопка сброса RESET, но нет кнопки BOOTSEL; может понадобиться двойное нажатие кнопки сброса для активизации загрузчика.
Во всех случаях лучше всего проконсультироваться с документацией производителя платы, где должен описываться самый лучший способ загрузки firmware в вашу плату.
[Создание вручную вашего собственного проекта]
1. Создайте каталог проекта test рядом с каталогом pico-sdk:
$ cd ~/pico
$ ls -la
total 16
drwxr-xr-x 7 user user 224 6 Apr 10:41 ./
drwx------@ 27 user user 864 6 Apr 10:41
drwxr-xr-x 10 user user 320 6 Apr 09:29 pico-examples/
drwxr-xr-x 13 user user 416 6 Apr 09:22 pico-sdk/
$ mkdir test
$ cd test
intmain()
{
bi_decl(bi_program_description("This is a test binary."));②
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT); while (1)
{
gpio_put(LED_PIN, 0);
sleep_ms(250);
gpio_put(LED_PIN, 1);
puts("Hello World\n");
sleep_ms(1000);
}
}
Примечания:
① Установленный на плате LED подключен к GP25 на Pico и Pico 2. Если вы выполняете сборку для Pico W, то LED подключен к CYW43_WL_GPIO_LED_PIN. Для дополнительной информации см. пример Pico W blink в Github репозитории Pico Examples (файл picow_blink.c). ② Эти строки кода добавят строки к бинарнику, и они будут видны с помощью picotool, см. Appendix B [1].
① Разрешает вывод через USB. ② Разрешает вывод через UART.
Затем скопируйте файл pico_sdk_import.cmake из папки external в вашу папку проекта test, находящуюся в инсталляции pico-sdk:
$ cp pico-sdk/external/pico_sdk_import.cmake .
Вы должны увидеть в папке проекта что-то подобное:
$ ls -la
total 24
drwxr-xr-x 5 user user 160 6 Apr 10:46 ./
drwxr-xr-x 7 user user 224 6 Apr 10:41
-rw-r--r--@ 1 user user 394 6 Apr 10:37 CMakeLists.txt
-rw-r--r-- 1 user user 2744 6 Apr 10:40 pico_sdk_import.cmake
-rw-r--r-- 1 user user 383 6 Apr 10:37 test.c
Теперь вы можете выполнить сборку точно так же, как это делалось в проекте "Hello World".
$ mkdir build
$ cd build
$ export PICO_SDK_PATH=pico-sdk
$ cmake ..
$ make
По умолчанию SDK выполнит сборку бинарного кода для Raspberry Pi Pico. Чтобы выполнить сборку для другой платы, передайте CMake опцию -DPICO_BOARD=board, заменив board на имя платы, которую используете. Для Pico 2 передайте -DPICO_BOARD=pico2, для Pico W передайте -DPICO_BOARD=pico_w. Чтобы указать сеть Wi-Fi и пароль для неё, к которой должна подключаться Pico W, передайте -DWIFI_SSID="ваша_сеть"-DWIFI_PASSWORD="ваш_пароль".
Процесс make сгенерирует несколько разных файлов. В следующей таблице перечислены некоторые из них, имеющие определенное назначение.
Расширение файла
Описание
.bin
Двоичный файл, где содержатся код и данные программы.
.elf
Полный вывод программы, содержащий отладочную информацию (этот файл использует отладчик).
.uf2
Код и данные программы в формате UF2 [4], который предназначен для записи на "флешку" загрузчика, когда он монтирует в системе свое устройство USB MSD.
.dis
Дизассемблированный код скомпилированного бинарника.
.hex
Двоичный код программы в HEX-формате.
.map
Файл карты памяти, соответствующий файлу .elf. В карте памяти описываются сегменты в памяти, куда линкер помещает информацию кода программы.
Замечания:
• UF2 (USB Flashing Format) это разработанный Microsoft формат файла, используемый микроконтроллерами Raspberry Pi для прошивки с помощью загрузчика и USB. Для дополнительной информации см. репозиторий спецификации Microsoft UF2 [4]. • Можно выполнить сборку так, чтобы код размещался в SRAM вместо памяти Flash. Для этого вы можете либо настроить сборку cmake передачей -DPICO_NO_FLASH=1, либо вы можете добавить pico_set_binary_type(TARGET_NAME no_flash) для управления сборкой в ваш файл CMakeLists.txt. Вы можете загрузить бинарный код RAM для микроконтроллера Raspberry Pi через UF2. Например, если на вашей плате нет микросхемы flash, то вы можете загрузить бинарник, который работает в RAM микроконтроллера, используя UF2, простым указанием адресов, где должны располагаться данные. Обратите внимание, что вы можете загружать код программы только в RAM или только в FLASH, но не в оба этих места памяти.