https://www.raspberrypi.org/products/raspberry-pi-pico/

Raspberry Pi Pico C/C++ SDKレポート

IoT /

以前にもGASKETで取り上げたRaspberry Pi Picoだが、今回は開発環境についてフォーカスしてみる。Raspberry Pi Picoの開発環境はC言語ベースのソフトウェア開発キット(以降、SDKと呼ぶ)とMicroPythonの2つを利用できる。今回はC言語ベースの開発環境についてレポートする。

SDKはRaspberry Pi プロダクト(ここでは4Bまたは3Bを指す)、x86 Linux、Windows、Mac、などのプラットフォームで構築することができる。ビルドやデバッグといった作業はGUIでもコマンドラインからでも行うことができ、GUIはVisual Studio Code やEclipseを利用できる。

出典「Getting started with Raspberry Pi Pico」P27 Fig.8

作成したプログラムは、基板本体にあるBOOTSELボタンを押しながらUSBに接続するとMass Storage Deviceとして認識され、バイナリファイルをドラック&ドロップすることで書込むことができる。これをコマンドラインから行う場合は/mnt/picoというマウントポイントを作成しMass Storage Deviceをマウントさせればバイナリファイルをcopyコマンドで書込むことも可能だ。またRaspberry Pi Pico にはデバッグ用のSWDポートが備わっており、このポートを使ってバイナリファイルを転送することもできる。

出典「Getting started with Raspberry Pi Pico」P18 Fig.6

USBから書込む場合は.uf2というファイルを、SWDから書込む場合は.elfというファイルを使用しなければならず、この2つはそれぞれファイルフォーマットが異なるため注意が必要だ。参考までにmake によって出力されるファイル類を以下に列挙する。

出典「Getting started with Raspberry Pi Pico」P31

SDKは公式ドキュメント(Getting started with Raspberry Pi Pico)を参照すれば基本的には構築できるが、このドキュメントはRaspberry Pi プロダクトにSDKを構築することを前提とした書き方になっているためWindowsにSDKを構築したい場合は若干注意が必要だ。注意点としては、cmake のインストール先をシステム環境変数のPathとして設定が必要であること。またcmake の最新バージョン(3.20)を使うと何故か再ビルドしたときにエラーが発生してしまい、悩んだ挙句に筆者はバージョンを3.19.8に下げて回避した。

公式ドキュメントではRaspberry PiプロダクトのモデルをRaspberry Pi 4Bとして、その上にSDKを構築するように書かれているが、Raspberry Pi 3BにSDKを構築し、ビルドやデバッグの作業を行ったが全く問題なかった。Visual Studio Codeに限って言えばARMのバージョンは32ビットか64ビットのオペレーティングシステムの違いによってインストールパッケージが異なるだけなので、Raspberry Pi 4B と同じARMv8シリーズのプロセッサ(ARM Cortex-A53)を搭載したRaspberry Pi 3Bでも問題ないと考えた。

ビズライト・テクノロジー社製 BH3 + Raspberry Pi Pico

次にオンチップデバッグだが、環境はSWDポートを使って構築できる。そのとき手持ちの部材やOpenOCDコマンドをどこで実行するかによって選択できる。
(a) Raspberry Pi プロダクトでOpenOCDを実行する場合
(b) Raspberry Pi PicoでOpenOCDを実行する場合

(a) Raspberry Pi プロダクトでOpenOCDを実行する場合 出典「Getting started with Raspberry Pi Pico」P32 Fig.11
(b) Raspberry Pi PicoでOpenOCDを実行する場合 出典「Getting started with Raspberry Pi Pico」P57 Fig.35

上記の(a)はRaspberry Pi プロダクトの中にSDKを構築し、そのままデバッガとして使用する場合の接続図だ。(b)はWindowsやMacで開発することを想定した接続図で、Raspberry Pi Picoを2台用意し、そのうちの1台をいわゆるJTAGデバッガ専用として使用する場合だ。デバッガとして使用するRaspberry Pi Pico にはpicoprobeというソフトウェアを書込んでおくだけで良い。詳細は公式ドキュメントのAppendixにある。

デバッグのオペレーションはVisual Studio CodeのGUIからでもコマンドラインからでも行うことができる。コマンドラインでデバッグを行う場合はコンソールを2つ使用する。1つめのコンソールでOpenOCDを実行し、2つめのコンソールでGDB (GNU Debugger)コマンドを実行する。このときOpenOCDの実行によって得られた接続ポートをTarget remoteでOpenOCDに接続してからデバッグを行う。GDBはGNUソフトウェア・システムで動く標準的なデバッガであり、ブレイクポイントを設定したり、ステップ実行をしたり、といった機能が提供されている。GDBの使い方やデバッグ方法については、残念ながらRaspberry Pi Picoの公式ドキュメントには詳しい記載がないため別途資料を参照する必要がある。

今回、筆者はWindowsとRaspberry PiプロダクトのプラットフォームでSDKを構築し、GUIやコマンドラインからオペレーションを行ってみたが、GUIを使ったデバッグは少しストレスを感じたものの、SDKも数時間で構築できるし、ビルドやコマンドラインからのデバッグはそれほどストレスを感じることがなく作業ができた。Raspberry Pi Pico の開発環境はVisual Studio CodeやOpenOCD、GDBと言った汎用的なツールで構成されているため、使い慣れた人いるだろう。またサンプルソフトが機能ごとに揃って点も評価したい。

デバッグ環境というと過去には特定のCPUメーカだけのものだった組込み向けデバッグ装置やICE(In Circuit Emulator)のイメージがあり、それらは高価で個人ユーザには手が出せなかった。しかしOpenOCDの普及によって本格的なデバッグ環境を誰もが手軽に構築できるようになったことは喜ばしい限りだ。