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にプログラムをアップロードし実行する。デバッガも使えることを確認した。
基本的な設定手順
第章 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側では認識しない。
# 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
sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program blink.elf verify reset exit"
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.2. CLion を使用する
に従う。
pico-examplesにあるプログラムが一通りビルドできるはず。
デバッガの設定
→正しいパスは /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の設定をしていたのをすっかり忘れていた。