Rustのベアメタル開発をRaspberry Pi Pico Wを使ってやってみる
資料は2025年2月現在
参考図書はこれ
大野 駿太郎 Rust×Raspberry Pi Picoで本気の組み込み開発 IMUで姿勢情報を取得しよう! 技術の泉シリーズ
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にある。
https://github.com/embassy-rs/embassy/tree/main/cyw43
ただしCYW43のファームウェアが別途必要
https://github.com/embassy-rs/embassy/tree/main/cyw43-firmware
RP2040のPIOを使ってSPIをエミュレートするドライバ
cyw43_pio::PioSpi
https://github.com/embassy-rs/embassy/tree/main/cyw43-pio
これらをまとめたものが↓にある
https://github.com/cysec-lab/pico-w-blinky
基本的に git clone https://github.com/cysec-lab/pico-w-blinky
あとflip-linkが足りないと言われるので cargo install flip-linkしておく
Raspberry Pi Pico W Wi-Fi, HTTP, HTTPSアクセス編
準備
ベアメタルのフレームワークはembassyを採用する
embassyはベアメタル環境に複数の非同期実行できるタスクを生成できる
embassy_executor::taskというアトリビュートを用いることで非同期実行タスクを宣言
ログはembassyのUSB通信を使う
embassy:usb:Driverを利用
参考 https://github.com/embassy-rs/embassy/blob/main/examples/rp/src/bin/usb_logger.rs
Wi-Fi接続
embassy-netを使用
HTTP接続
https://github.com/embassy-rs/embassy/blob/main/examples/rp/src/bin/wifi_webrequest.rs
reqwlessクレート利用
https://github.com/cysec-lab/pico-w-http
前回の落ち穂拾い