Rustのベアメタル開発をRaspberry Pi Pico Wを使ってやってみる
資料は2025年2月現在
参考図書はこれ
Kindle Unlimited対象なので加入者は無料で読める
Raspberry Pi Pico(無印)Lチカ編
2025年2月現在はこの本の通りやってもうまく動作しない。
Cargo.tomlを書き換えてクレートのバージョンを変更する。
usbd-hid = "0.5.2" を "0.8.2" に変更する
あと、Warningがいっぱいでるので .cargo/config を変更
"-C", "inline-threshold=5" を "-C", "llvm-args=--inline-threshold=5" にする
Raspberry Pi Pico W Lチカ編
Pico 無印との違い
Pico WではLEDがRP2040に接続されておらず、Wi-Fi用チップであるCYW43に接続されている。
よってLチカするためには、CYW43に依頼してLEDを点滅させる。
RP2040とCYW43の接続
https://gyazo.com/cf4c47fcab1eff1471474fada7e86984
https://gyazo.com/ae1e7430ab02e65bb3a7e10bda459343
RP2040にはプログラマブルなI/OであるPIOが2組載っているが、Pico Wではそのうち1組を使ってSPIをエミュレートし、CYW43と通信している(GPIO24,25,29)。ただし半二重で実装されている(普通のSPIは全二重)。
CYW43のドライバはembassy/cyw43にある。
ただしCYW43のファームウェアが別途必要
RP2040のPIOを使ってSPIをエミュレートするドライバ
cyw43_pio::PioSpi
これらをまとめたものが↓にある
あとflip-linkが足りないと言われるので cargo install flip-linkしておく
Raspberry Pi Pico W Wi-Fi, HTTP, HTTPSアクセス編
準備
ベアメタルのフレームワークはembassyを採用する
embassyはベアメタル環境に複数の非同期実行できるタスクを生成できる
embassy_executor::taskというアトリビュートを用いることで非同期実行タスクを宣言
ログはembassyのUSB通信を使う
embassy:usb:Driverを利用
Wi-Fi接続
embassy-netを使用
HTTP接続
reqwlessクレート利用
前回の落ち穂拾い