Debian on VirtualBox on Windows の環境でRasberryPi Pico Wの開発環境を作った。
使用したソフトウェアのバージョンと機器は以下の通り。
- Windows 11
- VirtualBox 7.10
- Debian 12.1
- CLion 2023.2
- Debug probe
- RasberryPi Pico W
VitualBoxを使うのは、Windows環境を汚さないためである。
CLionでコードを書き、ビルドしてRasberryPi Pico Wにプログラムをアップロードし実行する。デバッガも使えることを確認した。
基本的な設定手順
Raspberry Pi本家サイトに Raspberry Pi Picoをセットアップしようというドキュメントがあるので、それに従えばよい。
ファイルはRaspberry Pi Datasheetsにある。
直接リンクはこちら。
第章 1. Pico のクイックセットアップ第章 2. SDK第章 3. C 言語で LED を点滅させる第章 4. C 言語で「Hello World」というテキストを表示する第章 5. SWD を使用してフラッシュプログラミングを行う第章 6. SWD を使用してデバッグを行う
お好みに応じて3章、4章をやりつつ6章のGDBが動くことが確認できればOK。
注意点をいくつか。
(1)USBデバイスの認識
マシンに接続したあとに、VirtualBoxのUSBデバイスフィルターの設定画面で認識したデバイスを追加すること。追加しないとDebian側では認識しない。
認識したかの確認は dmesgコマンドか lsusbコマンドを使えばよい。
(2)Debug probeのUARTの接続
TX-RX, RX-TX とクロス接続する。
(3)Hello, world送信のシリアル接続の確認
gihyo.jpのサイト(以下の参考を参照)では picocomを使っていたので、同様に使ってみた。
dialoutグループに所属しないとsudoを使わなければならないので注意。
# piccomインストール
$ sudo apt install picocom
# dialoutグループに追加
$ sudo usermod -a -G dialout $USER
# 通信確認$ picocom /dev/ttyACM0 -b 115200
Debug probe経由では私の環境では /dev/ttyACM1 となったかな?
(4)cmakeで Pico Wの指定
cmake -DPICO_BOARD=pico_w ..
デバッグ版でビルドする場合
cmake -DPICO_BOARD=pico_w -DCMAKE_BUILD_TYPE=Debug ..
Debug probe
付録 A: Picoprobeを使用する - OpenOCDのビルド に従いOpenOCDをインストールする。
./configure にはオプション不要。
(1)プログラムの転送
blick.elfファイルの転送例
sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program blink.elf verify reset exit"
(2)デバッグ時
sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"
Pico WでのLチカ
Wifiモジュール経由でLEDが接続されているようで Picoのように単純にはLチカできないようだった。外部LEDなら簡単なので、次のような回路でLチカした。
プログラムこちら。
#include "pico/stdlib.h"void init_led_pin(const uint pin) {gpio_init(pin);gpio_set_dir(pin, GPIO_OUT);}int main() {const uint LED_RED_PIN = 21;const uint LED_GREEN_PIN = 20;init_led_pin(LED_RED_PIN);init_led_pin(LED_GREEN_PIN);const uint sleep_time_ms = 500;while (true) {gpio_put(LED_RED_PIN, 1);sleep_ms(sleep_time_ms);gpio_put(LED_RED_PIN, 0);sleep_ms(sleep_time_ms);gpio_put(LED_GREEN_PIN, 1);sleep_ms(sleep_time_ms);gpio_put(LED_GREEN_PIN, 0);sleep_ms(sleep_time_ms);}}
CLionの設定
上記ドキュメントの
第章 10. 別の統合開発環境を使用する
10.2. CLion を使用する
に従う。
pico-examplesにあるプログラムが一通りビルドできるはず。
10.2. CLion を使用する
に従う。
pico-examplesにあるプログラムが一通りビルドできるはず。
デバッガの設定
Settings - Embedded Development
OpenOCD Locationに /usr/local/bin/openocd を設定する。
Run/Debug Configurations でスクリリーンショットのように設定
※Board config fileに ~/pico-debug.cfg を設定したが、これが具体的に何を意味するのかはまだ分かっていない。
→正しいパスは /home/satoshi/pico/openocd/tcl/board/pico-debug.cfg
デバッグモードでの実行例
→正しいパスは /home/satoshi/pico/openocd/tcl/board/pico-debug.cfg
デバッグモードでの実行例
少し遅いがブレークポイントで止まり、ステップ実行できることは確認した。
❯ cat 99-debugprobe.rules# Raspberry Pi PicoATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="[01]*", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"# CMSIS-DAP compatible adapters ◆こちらの設定は不要かも?コメントアウトした。#ATTRS{product}=="*CMSIS-DAP*", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"
設定を反映する。
sudo udevadm trigger
これにより openocdコマンドはsudo不要となり、CLionからも扱えるようになった。
以前の環境ではPlatformIOも使おうとしていてudevの設定をしていたのをすっかり忘れていた。