Raspberry Pi Picoに手を出し プログラムを開発している。 プログラムはBOOTSELモードで起動し直し USBメモリにファームウェアのファイルをコピーすることで 書き込んでいるが、ここを便利にしたい。 platformioで対応している j-link を試すべく、AliExpressで安いコンパチ品を購入した。 動作させるとjlink用のDLLが必要などと言われ断念。 Raspberry Pi Pico自身を書き込みツールにする picoprobeを製作したところ プログラムの書込み、デバッグ等ができるようになった。
picoprobe製作電子工作プログラミング
picoprobeの製作方法は Getting started with Paspberry Pi Picoの Appendix Aで詳しく説明されている。 ファームウェアもコンパイル済みのものを Raspberry Pi Documentation - Raspberry Pi Pico and Pico Wのページの Debugging using another Raspberry Pi Picoのところから ダウンロードできる。 使用するソフトウェアのopenocdのpicoprobe対応版の作成方法も Appendix Aに丁寧に説明されていて、 完成すれば例えば以下のようなコマンドでプログラムを書き込むことができる。
$ /c/msys64/usr/bin/openocd.exe -f interface/picoprobe.cfg -f target/rp2040.cfg -c 'program .pio/build/pico/firmware.elf verify reset exit'
AliExpressで購入したJ-Link互換品? | picoprobe使用中の様子 | Seeed XIAO RP2040をpicoprobeにできれば小さくて良さそうだがファームウェアの改造が必要 |
サイズが小さい Seeed XIAO RP2040をpicoprobeにできれば小さくて良さそうだと 思ったがGP5が端子に出ていないのでUARTが使用できない。 ダウンロードできるファームウェアでは無理そうだ。
platformioからpicoprobeを使う
platformioのuploadコマンドでpicoprobeを使用するようにしたいが 現状では未だサポートされていない。 調べると pull requestは出ていて、 試すと確かに picoprobeでuploadできるので platformioでサポートされる日は近いのかもしれない。
但し、このpull requestの環境は github.com/earlephilhower/arduino-picoで 使用中の github.com/arduino/ArduinoCore-mbedとは 全然違う。 特にUSB関連のライブラリが全く無いので 今回のプログラムでは使用できない。
仕方が無いので vscodeの task.jsonに以下の 記述を追加し、タスクとしてプログラムの書込みを行っている。
{ "version": "2.0.0", "tasks": [ { "label": "Write Firmware (picoprobe/openocd)", "type": "shell", "command": "/c/msys64/usr/bin/openocd.exe -f interface/picoprobe.cfg -f target/rp2040.cfg -c 'program .pio/build/pico/firmware.elf verify reset exit'", "problemMatcher": [] } ] }
以下に実行結果を示す。
gdbについて
picoprobeについてネットで検索すると gdbでデバッグするという記事を多く見るが raspberry pi picoのプログラムをgdbでデバッグしている人は多いのだろうか? gdbはUnix上のアプリケーションを開発していた時代に愛用していたが Flashメモリ使用のマイコンの開発では使いたいと思ったことは無い。 とにかく割り込み処理との相性が悪い。 raspberry pi picoのプログラムをgdbで停止させると USB関連処理がタイムアウトし接続しているPC側でエラーが出る。
組込プログラミングではprintfデバッグが最強だと思っている。 欲しいのは超高速のプログラム書込み機能。 ST-Link2が使えるSTM32の開発環境が理想に近い。
最後に
picoprobeは Raspberry Pi Picoに5ピンのピンヘッダを 付けるだけで製作可能である。 platformioに対応し、 もう少しプログラム書込みが速くなれば 皆にお勧めできるが、現状では微妙なところである。
とりあえず、3Dプリンタでケースは作ろうと思う。