【Raspberry Pi Pico】環境構築

ワンボードマイコン

目的

Windows 10/64bitのパソコン上にRaspberry Pi Picoの開発環境を構築します。また、Picoを2個用意して1個をエミュレータとして接続することでブレークポイント・ステップ実行ベースのデバッグが可能となる環境を構築します。

ビルド環境

基本は公式ドキュメントの記載に従い環境構築していきます。わかり難い点もあるため必要に応じて補足を記載します。

https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf

各種必要ソフトをインストール

多数のソフトが必要ですが、以下のインストーラーを利用すると楽です。時間はかなりかかります。

Releases · ndabas/pico-setup-windows
Quickly get started with Raspberry Pi Pico/RP2040 on Windows - ndabas/pico-setup-windows

※以降は状況によって選択が分かれますが、筆者の場合の例で記載します。

MSYS2インストール

以下のページに記載の手順に従ってInstallationを実施します。躓きそうな部分は特に見当たりません。

MSYS2
Software Distribution and Building Platform for Windows

インストールされた「MSYS2 MinGW 64-bit」を起動し、必要パッケージインストールします。

$ pacman -S mingw-w64-x86_64-toolchain git make libtool pkg-config autoconf automake texinfo mingw-w64-x86_64-libusb

必要に応じてその他パッケージをインストールします。

$ pacman -S vim

パス設定、alias設定を行います。恒久的に設定するには~/.bashrcに追記してください。

$ alias vi='vim'
$ export "PATH=$PATH:/c/Program Files/CMake/bin"
$ export "PATH=$PATH:/c/Program Files (x86)/GNU Arm Embedded Toolchain/10 2020-q4-major/bin"

SDKとサンプルコード

以降、MSYS2 MinGW 64-bit起動して作業します。尚、pico-sdkを以下のパスに配置する前提で記載します。

C:\user\pico\pico-sdk

SDKとサンプルをgit clone

$ cd c:
$ mkdir user
$ cd user
$ mkdir pico
$ cd pico
$ git clone -b master https://github.com/raspberrypi/pico-sdk.git
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ git clone -b master https://github.com/raspberrypi/pico-examples.git

サンプルをビルド

$ export PICO_SDK_PATH=c:/user/pico/pico-sdk
$ cd pico-examples
$ mkdir build
$ cd build
$ cmake .. -G "MSYS Makefiles"
$ make

テストアプリ(1秒周期でLED点滅、及び1秒周期で”Hello world.”の文字列をシリアル出力)を構成

$ cd c:/user/pico
$ mkdir pico-work
$ cd pico-work
$ vi CMakeLists.txt
cmake_minimum_required(VERSION 3.12)

# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)

project(pico-work)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

# Initialize the SDK
pico_sdk_init()

# Add sub-directory
add_subdirectory(led_world)
$ cp ../pico-examples/pico_sdk_import.cmake .
$ mkdir led_world
$ cd led_world
$ vi CMakeLists.txt
set(BinName "led_world")
add_executable(${BinName}
    main.c
)

pico_enable_stdio_usb(${BinName} 1)
pico_enable_stdio_uart(${BinName} 1)

target_link_libraries(${BinName} pico_stdlib)
pico_add_extra_outputs(${BinName})
$ vi main.c
#include <stdint.h>
#include <stdio.h>
#include "pico/stdlib.h"

int main(void)
{
    stdio_init_all();
    const uint32_t LED_PIN = 25;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);

    while (1) {
        printf("Hello world.\n");
        gpio_put(LED_PIN, 1);
        sleep_ms(500);
        gpio_put(LED_PIN, 0);
        sleep_ms(500);
    }

    return 0;
}

テストアプリをビルド

$ cd ..
$ mkdir build
$ cd build
$ cmake .. -G "MSYS Makefiles"
$ make

以下のパスに実行ファイルが生成されます。

C:\user\pico\pico-work\build\led_world\led_world.uf2

書き込み・実行

以下の手順でバイナリをPicoに書き込みます。

  1. PCとPicoをUSB接続
  2. Picoの「BOOTSEL」ボタンを押しながらPicoをリセット
  3. 「RPI-RP2」という名称にてUSBストレージとしてドライブに割り当たるので(マウントされるので)、そこに「led_world.uf2」をドラッグアンドドロップする。

書き込みに成功するとPicoが自動的にリセットし書き込んだプログラムが実行されますので、以下動作を確認します。

  1. Pico本体のLEDが1秒周期で点滅。
  2. TeraTerm等のターミナルソフトを起動しシリアル接続し、ボーレートを115200に設定する。1秒周期で「Hello world.」の文字列が出力。

デバッグ環境

以下2枚目のPicoをエミュレータとして使用しデバッグする環境を構築していきます。

Visual Studio Codeインストール

Visual Studio Code(VSCode)のインストーラーを以下サイトから取得してインストールします。

Visual Studio Code - Code Editing. Redefined
Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications...

以下の拡張機能をインストールします。

  • Japanese Language Pack for Visual Studio Code(日本語化。必要に応じて)
  • ms-vscode.cpptools
  • ms-vscode.cmake-tools
  • marus25.cortex-debug

※本手順ではVSCodeでのビルドはしないので実質必要ないものもあるが一応。

Picoprobeをビルド

Picoをエミュレータとして使用するためのプログラムをビルドします。

$ cd c:/user/pico
$ export PICO_SDK_PATH=c:/user/pico/pico-sdk
$ git clone https://github.com/raspberrypi/picoprobe.git
$ cd picoprobe
$ mkdir build
$ cd build
$ cmake .. -G "MSYS Makefiles"
$ make

以下のパスに実行ファイルが生成されます。

C:\user\pico\picoprobe\build\picoprobe.uf2

二枚のPicoを接続

二枚のPicoを以下の図の通り接続します。左のUSBケーブルが接続されている方がエミュレータ用です。ターゲット実機は右側です。

ブレッドボードとジャンパーワイヤーを使用して接続した実際の様子は以下の通りです。

Amazon | ジェネリック Voocye  10pcs シングル40ピン オス+メスストレートタイプ ピンヘッダー PCB用 2.54 mm | 基板 | 産業・研究開発用品 通販
ジェネリック Voocye  10pcs シングル40ピン オス+メスストレートタイプ ピンヘッダー PCB用 2.54 mmが基板ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部...
Amazon | 【おだ商店】 ブレッドボード 『830P基板 3個 400P基板 2個の合計5個セット』 | ブレッドボード | 産業・研究開発用品 通販
【おだ商店】 ブレッドボード 『830P基板 3個 400P基板 2個の合計5個セット』がブレッドボードストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。
Amazon.co.jp: ブレッドボード・ジャンパーワイヤー 40ピン 20cm Emith デュポンケーブル Arduino Raspberry piに適用 ジャンパー線 6本セット : 産業・研究開発用品
Amazon.co.jp: ブレッドボード・ジャンパーワイヤー 40ピン 20cm Emith デュポンケーブル Arduino Raspberry piに適用 ジャンパー線 6本セット : 産業・研究開発用品
Amazon | サンハヤト ジャンプワイヤキット SKS-100 単線タイプでよく使用する短めジャンプワイヤのセット品 | ジャンプワイヤ | 産業・研究開発用品 通販
サンハヤト ジャンプワイヤキット SKS-100 単線タイプでよく使用する短めジャンプワイヤのセット品がジャンプワイヤストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。
Amazon | uxcell タクトスイッチ 触覚押しボタンスイッチ モーメンタリ 触覚型 6x6x5mm DIP 四ピン 100枚入り | 押しボタンスイッチ | 産業・研究開発用品 通販
uxcell タクトスイッチ 触覚押しボタンスイッチ モーメンタリ 触覚型 6x6x5mm DIP 四ピン 100枚入りが押しボタンスイッチストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無...

※タクトスイッチは100個入りです。ここでは2個しか使いませんが…

PCに二枚目のPico(エミュレータ用)をUSB接続し、Picoprobeを書き込み

以下の手順でバイナリをPicoに書き込みます。

  1. PCとPico(エミュレータとして使用する側)をUSB接続
  2. Picoの「BOOTSEL」ボタンを押しながらPicoをリセット
  3. 「RPI-RP2」という名称にてUSBストレージとしてドライブに割り当たるので(マウントされるので)、エクスプローラーを開いて、そこに「picoprobe.uf2」をドラッグアンドドロップする。
  4. 書き込みに成功すると自動でリセットされる。

Picoprobe用のUSBドライバの設定を行う(初回のみ)

https://zadig.akeo.ieよりzadig-2.6.exeをダウンロード、実行します。以下のようなポップアップが表示されるので”Install Driver”を押下します。

ターミナルソフトを起動、接続

TeraTerm等のターミナルソフトを起動しシリアル接続し、ボーレートを115200に設定します。

テストアプリをデバッグビルド(最適化オフ、デバッグ情報付与)

テストアプリをデバッグ用の設定でリビルドします。

$ cd c:/user/pico/pico-work
$ rm -rf build
$ mkdir build
$ cd build
$ cmake .. -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DPICO_DEOPTIMIZED_DEBUG=on
$ make

OpenOCDをビルド

Open-OCDはオープンソースで提供されているGDBサーバー+JTAGピンドライバ機能を持つソフトウェアです。

https://openocd.org/

$ cd c:/user/pico
$ git clone https://github.com/raspberrypi/openocd.git --branch picoprobe --depth=1
$ cd openocd
$ ./bootstrap
$ ./configure --enable-picoprobe --disable-werror
$ make -j4

OpenOCDを実行

Picoprobeを使用してデバッグを行う際には常時起動させておく必要があります。

$ src/openocd -f interface/picoprobe.cfg -f target/rp2040.cfg -s tcl

※Pico(エミュレータとして使う側)をUSB接続した状態で実行します。接続されていない場合エラーとなり起動失敗します。また、起動後にPicoをUSBから切断した場合はopenOCDも切断されます。

デバッグ構成ファイル

.vscodeディレクトリを作成し、pico-examplesから当該ファイルをコピーします。

$ cd c:/user/pico/pico-work
$ mkdir .vscode
$ cd .vscode
$ cp c:/user/pico/pico-examples/ide/vscode/launch-remote-openocd.json ./launch.json
$ cp c:/user/pico/pico-examples/ide/vscode/settings.json .

launch.jsonを以下の通り編集します(★の箇所)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Pico Debug",
            "type":"cortex-debug",
            "cwd": "${workspaceRoot}",
            //★"executable": "${command:cmake.launchTargetPath}",
            "executable": "${workspaceRoot}/build/led_world/led_world.elf",
            "request": "launch",
            "servertype": "external",
            // This may need to be arm-none-eabi-gdb depending on your system
            //★"gdbPath" : "gdb-multiarch",
            "gdbPath" : "C:/msys64/mingw64/bin/gdb-multiarch.exe",
            // Connect to an already running OpenOCD instance
            //★"gdbTarget": "your-openocd:3333",
            "gdbTarget": "localhost:3333",
            "svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/rp2040.svd",
            "runToMain": true,
            // Work around for stopping at main on restart
            "postRestartCommands": [
                "break main",
                "continue"
            ]
        }
    ]
}

VSCodeを起動しデバッグ実施

以下手順でデバッグを実施します。

  • VSCodeを起動する。
  • テストアプリディレクトリを開く。Ctrl+K → Ctrl-O → C:\user\pico\pico-work を選択。
  • main.cを開く。
  • F5キー押下(あるいは画面左のデバッグボタン押下)でデバッグ開始

デバッグ接続の様子

コメント

タイトルとURLをコピーしました