LCD付きラズパイ2 Pico互換ボードを使う
なんか学習用に使えるいい感じのマイコンがほしい、ということで最近発売されたRaspberry Pi Pico 2に搭載されているSoCのRP2350を搭載しており、しかも0.95インチのLCDとType-Cコネクタまでついて1500円前後というRaspberry Pi Pico 2互換ボードをAliexpressで買いました(本家はMicro-Bなんですよね)。
LCD付きRaspberry Pi Pico 2互換ボード(アフィリエイトリンク)
あと、Picoprobe化してSWDデバッガとして使用するために、超小型なRP2350ボードも買いました。
今回は、これらを使ってRaspberry Pi Pico 2の開発環境をセットアップします。
購入したもの

今回は、上の2つに加えて専用ピンヘッダとType-Cケーブルを買いました。

いずれのボードもピンヘッダ付属か別売かを選べるのですが、LCD付きボードのほうは別で買ったほうが安かったので別にしました。このピンヘッダ、Raspberry Pi Pico 2専用設計でピンアサインによって色分けがされています。どうせ見えないのでいらないですが、面白かったのでこちらを購入。

あと、Type-Cケーブルが不足気味だったので購入したのですが、別の機器での使用を見据えて世にも珍しいUSB3.2対応Type-A to Cケーブルを買いました。このケーブルって有名ブランド品だとやけに高いし、そもそも入手性が極めて悪いので、これが300円くらいで購入できるのは素晴らしい。
ピンヘッダをつける
さて、最近はめっきり工作をサボっていた筆者にとって久しぶりのはんだ付けタイムです。

LCD付きモジュールは、表面にバッテリ接続用コネクタがついている関係で、SWDデバッグポートがスルーホールからただのパッドに変更されているので、無理やりピンヘッダをはんだ付けしました。完全にイモはんだなかなか味のある仕上がりになったんじゃないですかね。

GPIO群のピンヘッダは、ブレッドボードに刺したままはんだ付けするという挑戦的な方法で位置合わせを行いました。

まあまあ、ですかね。鉛フリーはんだなので輝きはないです。もう1つのボードも同様にはんだ付けを行いました。
開発環境のセットアップ
次に開発環境をセットアップして動作確認を行います。おそらくこいつの製造元であるWaveshare社のHPに製品wikiがあるので、ここを見れば使い方がわかります。

今回はLCDのデモ、とくにいい感じのUIを簡単に表示できるライブラリであるLVGLのデモを行いたいので、下のほうにあるResourcesからLVGL Demoをダウンロードします。

開発環境のセットアップはVS Codeに拡張機能を入れるだけなので簡単です。

あとはダウンロードしたフォルダ(CとPythonの2つのフォルダのうち、今回はCを使います)を指定してインポートするだけなのですが、これがなぜかクッソ時間がかかりました。気長に待ちましょう。

インポートが終了したら、まずは「Switch Board」からターゲットをPico 2に切り替えましょう。

あとは、ボードをBOOTSELモードに入れて(BOOTSELボタンを押しながらRESET)、「RUN PROJECT(USB)」を押すだけでビルドから書き込みまで自動で走ります、便利。

これで、製造元であるWaveshareのロゴがLCDに表示されます。なんかいい感じの社名ですね。
デバッガのデバッグ
次に、もう1枚のボードをSWDデバッガとして動作させ、デバッグ環境も構築します。
Raspberry Piから専用のデバッグプローブも発売されていますが、適当なRaspberry Pi Pico互換ボードに専用ファームを書き込むだけでデバッグプローブとして使用できます。

デバッグプローブのGitHubページにてビルド済みのファイルが配布されているので、これをデバッグプローブにしたいボードに書き込みます。ここで、今回はデバッグプローブとして使用するボードもPico 2なので「pico2」と書かれているやつをダウンロードします。

「ピンアサインどうなってんねん」と一瞬迷いましたが、「include/board_pico_config.h」で定義されていました。GPIO2をSWCLKに、GPIO3をSWDIOに接続すればいいみたいです。

あとはVS Codeで「Debug Project」を押せばデバッグ環境が完成…なはずなんですが全然動きません。どうやらデバッグ対象ボードとの通信ができていないようですが、デバッガのデバッグをしないといけないという絶望的な状況に。

というわけで、組み込み開発の最終手段、オシロで波形を確認します。

CH2がSWDIOなんですが、なんかLレベルがやけに高いです。デバッグ対象ボードをつながないとちゃんと0Vになるので、デバッガのGPIOがちゃんと動いていない(電流を引けていない)疑惑があります。
ピンアサインを変えよう
実は最初、ピンアサインを勘違いして接続を間違ったこともあり、GPIO2と3が壊れている可能性も考えられるのでピンアサインを変更してみることに。
そのためにはconfigを変えてビルドしなおす必要があるわけですが、デバッグプローブのGitHubページにビルド方法が書かれているので簡単に…とはいきませんでした。

書かれている通りにPico 2用にビルドしようとしてもエラーでビルドされませんでした。
その後、1週間くらいゴニョゴニョした結果、cmake/makeコマンドを手動で打つ公式のビルド方法ではなくVS Code拡張機能側でビルドするとうまくいきました。方法としては
- debugprobeのリポジトリをマニュアル通りクローンする
- Pico 2の場合、マニュアルの記載通り以下のコマンドを実行する
git submodule sync
git submodule update --init
- これでfreertosとCMSISもダウンロードされる、ちなみにかなり時間がかかる。
- クローンしたフォルダを拡張機能でRaspberry Pi PicoプロジェクトとしてImportする
- Board typeをPico 2に変更し、Clean CMakeを実行する
- これでCMakeLists.txtの先頭にボードタイプやツールチェーンの指定が自動で入る
- CMakeLists.txtを以下のように修正する。
- Line 24:
project(debugprobe_on_pico2)
- Line 68:
option (DEBUG_ON_PICO "省略" ON)
- VS Code拡張機能は書き込むファイルをプロジェクト名で探すらしく、project名をuf2ファイルと同じにしないとエラーになる。
- DEBUG_ON_PICOオプションをデフォルトでONにしておくことで、ワンクリックでPicoボード用にビルド
- Line 24:
- あとはデバッグプローブにしたいPicoをBOOTSELモードで接続し、拡張機能で「Run Project(USB)」を押すだけ。
ちなみに、ピンアサインは14-15番のGPIOに変更しました。
board_pico_config.h
// PIO config
#define PROBE_SM 0
#define PROBE_PIN_OFFSET 14
#define PROBE_PIN_SWCLK (PROBE_PIN_OFFSET + 0) // 14
#define PROBE_PIN_SWDIO (PROBE_PIN_OFFSET + 1) // 15
やっぱりGPIOが壊れていた?
で、結果どうなったかというと…

普通に動きました。結局GPIOが壊れていたんでしょうか。

波形も正常ですし、やっぱりGPIO2が破壊されていたとしか考えられないんですよね。でもその根本要因はわからないという、これが業務だったら非常にいやな結論となりました。まあ、動いたしいいでしょう。
というわけで、これで開発環境は整ったので、家でも組み込み開発の勉強ができますね!