Raspberry Pi Pico の VSCode による SWD デバッグ環境を Ubuntu PC 上に構築する 

Raspberry Pi Pico のSWDデバッグ環境を Ubuntu 上に作るときにいくつかハマったので備忘録

# ハードウェア構成
Raspberry Pi Pico のSWDデバッグ環境を作るには２つのRaspberry Pi Pico を準備します。接続は次のように行います。(出典：https://datasheets.raspberrypi.com/pico/getting-started-with-pico-JP.pdf)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598183/47643588-d78a-b8a7-9beb-7ae8762f1cf7.png)

# picoprobe の書き込み
上記のUSBケーブルがついている側がSWDデバッグ用の Raspberry Pi Pico になります。picoprobe というプログラムを書き込むことで使えるようになります。

**picoprobe**
https://github.com/raspberrypi/picoprobe/releases/latest/download/picoprobe.uf2


プログラムの書き方はBootSELボタンを押しながらUSBケーブルをつながるとストレージとして見えるので、そこでダウンロードしたpicoprobe.uf2ファイルを放り込むだけです。

Windows版ですが次のサイトが非常にわかりやすいです。Arduino IDEでのデバッグ環境の構築方法も書いてあります。

https://karakuri-musha.com/inside-technology/arduino-raspberrypi-picow-tips-picoprobe01/

# pico-sdkのダウンロード
pico-sdk をダウンロードします。詳しくは[こちら](https://datasheets.raspberrypi.com/pico/getting-started-with-pico-JP.pdf)のドキュメントを参照してください。


```bash
$ wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
$ chmod +x pico_setup.sh
$ ./pico_setup.sh
```

ラズパイ出ない場合、セットアップの最後に raspi-config エラーと出ますが、ラズパイを使っているわけではないので問題ないです。

# udev ルールの追加
picoprobe を認識させるために、/etc/udev/rules.d/99-picoprobe.rurles を作成し、次の内容を記述します。

```bash
# Picoprobe settins
ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000c", MODE="0666"
```

念の為、idVendor と idProduct の値は、lsusb で確認をしてください。古い記事だと異なる値のときもあったようです。

```bash
$ lsusb
Bus 001 Device 004: ID 2e8a:000c Raspberry Pi Picoprobe (CMSIS-DAP)
```



# VSCode プロジェクト”pico-examples”のセットアップ
pico-examples を VSCode のプロジェクトとしてセットアップします。~/pico/pico-examples に移動して、VSCode を起動します。

```bash
$ cd ~/pico/pico-examepls
$ code .
```

CMake Tools 拡張機能がインストールされていると、１〜２秒後に、VSCode ウインドウの右下にポップアップが表示されるので、「Yes」を押します。そのあと、コンパイラの選択画面が表示されるので、ドロップダウンメニューで「GCC for arm-none-eabi」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598183/853ee631-27ac-478b-de8e-26d0f736fc12.png)

ここで、VSCode を一旦閉じます。

# VSCode によるデバッグ環境の設定
VSCode によるデバッグを行うために ~/pico/pico-examples に設定ファイルをコピーします。

```bash
$ cd ~/pico/pico-examples
$ mkdir .vscode
$ cp ide/vscode/launch-raspberrypi-swd.json .vscode/launch.json
$ cp ide/vscode/settings.json .vscode/settings.json
```

ここで、.vscode/launch.json ファイルを修正する必要があります。15行目の "raspberrypi-swd.cfg" を "cmsis-dap.cfg" に変更します。

```launch.json
 14             "configFiles": [
 15                 // "interface/raspberrypi-swd.cfg",
 16                 "interface/cmsis-dap.cfg",
 17                 "target/rp2040.cfg"
 18             ],
```

あと、~/pico/openocd/tcl/interface/cmsis-dap.cfg も次のように変更します。

```cmsis-dap.cfg
  1 # SPDX-License-Identifier: GPL-2.0-or-later
  2 
  3 #
  4 # ARM CMSIS-DAP compliant adapter
  5 #
  6 # http://www.keil.com/support/man/docs/dapdebug/
  7 #
  8 
  9 adapter driver cmsis-dap
 10 adapter speed 5000
 11 
 12 # Optionally specify the serial number of CMSIS-DAP usb device.
 13 # adapter serial 02200201E6661E601B98E3B9

```

# VSCode によるデバッグ
これで、デバッグできる環境になりました。pico-examples フォルダでVSCode を立ち上げます。左のペインの一番下のCMakeセッティングでデバッグするサンプルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598183/085c05a6-9b75-396f-bff3-d113aa99ccf9.png)

設定が終わったら、左のペインの上から４つ目のデバッグセッティングを選択し、パラメータビューの上にある小さな三角形のデバッグ開始ボタンでデバッグを開始します。しばらくすると、main関数の直後で止まってくれます。あとは適当なところでブレイクポイントを設定してデバッグを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598183/ce17f0d8-4e8e-2971-8f32-606d9c1168e0.png)

# 環境設定のポイント
グダグダと書きましたが、今回はまったポイントは以下の３点です。

1. /etc/udev/rules.d/99-picoprobe.rurles の idVendor と idProduct の値は、lsusb で確認
2. launch.json の raspberrypi-swd.cfg を cmsis-dap.cfg に変更
3. cmsis-dap.cfg に "adapter speed 5000" を追加

いろいろと環境が変わっているようなので、今後も注意が必要です。

上記３点に注意して、次のドキュメントを参考に環境セットアップをしてみてください。

[**Raspberry Pi Pico をセットアップしよう**](https://datasheets.raspberrypi.com/pico/getting-started-with-pico-JP.pdf)