ラズピコでRust(1) 環境構築編

  • 2023.09.15
  • IDE
ラズピコでRust(1) 環境構築編

皆さん こんにちは。

今回は Raspberry Pi Pico(通称ラズピコ)を Rustで動作させてデバッグするための開発環境を構築します。

ラズピコを2つ用意して、そのうちの1つをデバッグ用のプロープにすることでラズピコのソフトウェア開発環境をつくることができます。

デバッグ用のプローブはPicoprobeと呼ばれています。

開発環境

以下の通りです。

ホストPC :
Windows10

開発ボード(ターゲット) :
Raspberry Pi Pico 1個

デバッガー(Picoprobe):
Raspberry Pi Pico 1個

USBケーブル :
USB A-MicroB 2本
( AコネクタはPC側を想定していてラズピコ側がMicroBコネクタです )

デバッガー (Software) :
Visual Studio Code (VSCode)

その他 ブレッドボード、ジャンパーワイヤー等

トライしてみようと思われる方は秋月電子等でご購入ください。

ラズピコとは

ラズピコは Raspberry Pi Pico を省略した呼び方で正式名称ではありません。
ただ冗長になるのでこちらのサイトでは「ラズピコ」と呼ぶことにします。

ラズピコは Raspberry Pi財団が独自に開発したRaspberry Piシリーズでは初めての「マイコン」と呼ばれる部類のデバイスを使ったボードです。

最高133MHzのクロックで動作するARM Cortex M0+デュアルコアのRP2040 というマイクロコントローラーを実装しています。

元々はC/C++及びMicroPythonでの開発が可能であるという話でしたが、今ではRustによる開発も可能となりました。

RP2040はデュアルコアでRTOSを使うことが可能でUSBの機能もマイコン内部に持っています。
それからPIO(プログラマブルIO)というI/Oの操作に特化したコアも持っています。

もちろん、一般的なペリフェラルであるUART, SPI, I2C, PWM, RTC, ADC, GPIOなどの機能も持っています。

メモリー:

SRAM : 264KB です。

フラッシュはRP2040から見ると外付けになり、ラズピコでは2MByteの部品が実装されています。

それからラズピコはLinuxが動くボードではないので、その点はご注意ください。

ドキュメント

ラズピコのドキュメントはこちらのDocumentsの部分にリンクが貼られています。
いろいろと読みごたえがありそうです。

まずは目を通していきたいですね。

ブロック図

ブロック図を以下に示します。
デバッグ用の信号は SWD です。GNDを除けば信号線は2本なので接続が容易です。
UARTの信号はデバッグ用のインターフェースとしては不要ですが、UARTの通信をPicoprobeを介してPCで確認することができるので図のように接続しておくと便利です。
PicoprobeがUSB-シリアル通信機能の役割を担ってくれます。

接続

ピン配置、信号、接続はそれぞれ以下の通りになります。

ピン配置

ピン番号は以下の画像を参考にしてください。

信号の接続

信号の接続は以下の通りです。
色:次の姿図の配線の色を示しています。

信号 Picoprobe ラズピコ
GND 3 3 黒色
SWCLK 4 D1 水色
SWDIO 5 D3 紫色
UART0 RX 6 2 橙色
UART0 TX 7 1 黄色

接続の姿図

接続した様子を画像にしてみました。
USBケーブルを2本使う構成にします。
左がデバッガーのPicoprobe、右がターゲットのラズピコです。

ソフトウェア開発環境の構築

RustコンパイラはC言語のリンカを使います。
そのためにリンカはRustのツールチェインとは別にインストールします。

リンカのインストール

Visual Studio のダウンロードページ から Visual Studio をダウンロードする等の方法があります。

個人であれば無料で使える Community がお薦めです。

(私の環境ではすでにインストール済みなので、説明は省略します)

Rustツールチェインのインストール

rustup.rs からインストーラーをダウンロードします。

rustup-init.exe をクリックしてダウンロード後、exeファイルを実行します。

コマンドプロンプトが出るので、

1) Proceed with installation (default)

1 を入力してenterキーを押します。

次に以下の3つのコマンドを実行して各ツールのバージョンを見ておきましょう。

>rustup --version
 (何か返事が来る)
>rustc --version
 (何か返事が来る)
>cargo --version
 (何か返事が来る)

hello のパッケージを作成して実行してみます。

>cargo new hello

>cd hello

>cargo run

Hello, world! と表示されれば成功です。
実行した結果を貼っておきます。


クロスビルドツールチェインのインストール

以下のコマンドを実行しターゲットとしてラズピコのマイコンもビルドできるようにします。

>rustup target add thumbv6m-none-eabi

VS Codeのインストール

エディタやIDEとして VS Code を使います。
お持ちでない方は こちら からインストールします。

rust-analyzerのインストール

rust-analyzerは入力補完や型の表示など便利な機能を提供してくれます。

VS Codeの拡張機能から rust-analyzer をインストールします。
VS Codeを起動し、左の赤枠のアイコンをクリックして拡張機能マーケットプレイスを表示させて、枠内に rust-analyzer と入力し install ボタンを押します。

Cortex-Debugのインストール

Cortex-Debugはデバッグに必要なツールです。

VS Codeの拡張機能から Cortex-Debug をインストールします。
VS Codeを起動し、左の赤枠のアイコンをクリックして拡張機能マーケットプレイスを表示させて、枠内に cortex-debug と入力し install ボタンを押します。

gitのインストール

バージョン管理用に git for Windows を使います。

git をお持ちでない方は こちら からインストールします。

Cargoサブコマンドのインストール

次のコマンドを実行してCargoサブコマンドをインストールします。

>cargo install cargo-generate

>cargo install hf2-cli

>cargo install cargo-hf2

>cargo install flip-link

使わないツールがあるかも知れませんが悪しからず。

flip-link はゼロコストなスタックのプロテクションツールです。

Tera Termのインストール

本家サイトが調子悪いようなので(執筆当時)
github を使って こちら からインストールできます。

OpenOCDのインストール

こちら から openocd-win.zip をダウンロードしてインストールします。

展開先のディレクトリを覚えておきます(メモしておきましょう)

GDBのインストール

こちら から gcc-arm-none-eabi-10.3-2021.10-win32.zip をダウンロードしインストールします。

インストール時にパスを通しておきます。

展開先のディレクトリを覚えておきます(メモしておきましょう)

デバッグアダプタのドライバインストール

(注)Picoprobeの最近のバージョンではZadigによるドライバインストールは不要なようです。まずこの項目を飛ばしてドライバインストールはせずにトライしてみてください。もううまくいかなければドライバインストールも試してみてください。
こちらの環境では他でZadigを使っていることもあり、削除することができないためにその確認ができないことをお詫びします。

こちら からドライバインストールソフトをダウンロードします。

2023年9月時点では Zadig 2.8 になっています。

C:\Zadig というフォルダをつくって、そこに実行ファイルをコピーして zadig-2.8exe を実行します。

メニューから Options – List All Devices を選択します。

長いコンボボックスで CMSIS-DAP interface(Interface2) を選択し、ドライバで WinUSB を選択します。

そしてその下の大きなボタン Install Driver (Reinstall Driver と表示されることもある) を押してドライバーをインストールします。

インストールするとデバイスマネージャーで確認できます。

サンプルパッケージのリボジトリを取得する

・Lチカ サンプルパッケージのリポジトリを以下に置きました。

https://github.com/moons3925/rp2040

コマンドプロンプトから次のコマンドを実行してリポジトリをclone(複製)し、作業ディレクトリを移動します。

C:\Users\xxxx\ の下に pprp というディレクトリを作成し、その中にパッケージを入れることにしました。
xxxx は皆さんのユーザー名です。
(pprpは Pi Pico Rust Projectの略です)

以下のようにコマンドを打ち込みます。

C:\Users\xxxx>md pprp
C:\Users\xxxx>cd pprp
C:\Users\xxxx\pprp>git clone https://github.com/moons3925/rp2040
C:\Users\xxxx\pprp>cd rp2040
C:\Users\xxxx\pprp\rp2040>

VS Codeを起動する

ラズピコ2つとPCをUSBケーブルでつなぎます。

カレントディレクトリが C:\Users\xxxx\pprp\rp2040 にある状態で VS Codeを起動します。

C:\Users\xxxx\pprp\rp2040>code .

settings.jsonを編集する

アクティビティバーの一番上のアイコンをクリックし、EXPLORERを表示して settings.json をクリックします。

上の2行

openocd.exe と arm-none-eabi-gdb.exe のパスを皆さんがインストールした環境に合わせて設定します。

デバッグする

メニューから Run – Start Debugging を選択します。

main.rs の #[entry] の部分で停止し、フローティングバーが表示されれば成功です。

各アイコンにマウスをかざすと機能が表示されます。

ブレークポイントを貼りたい行で F9キーを押すと、行番号の左側に赤丸が表示されます。
プログラムを実行してそこに来るとブレークします。

最初は F11キー(Step Into)を1回押して、main()関数の中へ入ってみましょう。
おぉっ動きました~(^^)


ステップ実行は以下の2つが良く使われます。

F10キーで Step Over : 関数の中には入らないでステップ実行
F11キーで Step Into : 関数の中に入ってステップ実行

F5キーを押すと停止することなくプログラムが実行されます。
プログラムを実行すると ラズピコ(ターゲット側) のLEDが点滅します。

いかがでしょうかRustによるLチカはできましたか?

お疲れさまでした。

IDEカテゴリの最新記事