💡

RP2350 の Rust まわりの対応状況メモ(2024年9月末)

2024/09/23に公開

Raspberry Pi Pico 2 が Rust で触れるようになるまでにはまだ時間かかるんだろうなあ、と思っていたのですが、チップが rp-rs のメンバーの人に先行で公開されて開発が進められていたらしいです。

これが RP235x の発表と同時に公開されたその人のブログです。

https://thejpster.org.uk/blog/blog-2024-08-08/

こっちがもう少し最近、9月の頭に Raspberry Pi 公式のウェブサイトに載った寄稿文です。

https://www.raspberrypi.com/news/rust-on-rp2350/

ということで、かなりの部分はすでに動くようになってるっぽいです。

まだ動かないもの

とりあえず、上のブログ記事の最後に書かれていた、まだ動いていないとされている部分を見ていきましょう。

probe-rs が Arm Debug Interface v6 に未対応

Arm Debug Interface v6 は RP2350 よりも前から存在していましたが(公式の仕様書のリリース履歴を見たところ、2017 年に規格公開?)、Rust エコシステム中のチップに対応しているものがなかったから?なのか、probe-rs はまだ対応中というステータスみたいです。ちなみに、OpenOCD にサポートが追加されたのは1年半前でした。

probe-rs がないとデバッグ用のログを吐くこともままならないので、けっこうボトルネックな気がします。

HSTX、TMDS encoder

よくわかってないのですが、DVI 出力用の何からしいです。

POWMAN

これもあまり理解できてないんですが、RP2350 は RP2040 よりも細かな電源管理ができるようになっています。RP2040 は全体で SLEEP/DORMANT を切り替えていたのが、以下の5つの「power domain」ごとに切り替えられるようになるらしいです。以下はデータシートの「6.2.1. Core Power Domains」に載っていた説明:

  • AON - Always On - a small amount of logic that is always powered on when chip’s core supply (DVDD) is available
  • SWCORE - Switched Core - the remaining core logic functions, including processors, bus fabric, peripherals, etc.
  • XIP - XIP cache SRAM and Boot RAM
  • SRAM0 - SRAM Power Domain 0 - the lower half of the large SRAM banks
  • SRAM1 - SRAM Power Domain 1 - the upper half of the large SRAM banks, and the scratch SRAMs

この辺をいろいろコントロールするために用意されているレジスタがPOWMAN(POWer MANagement)です。いろいろ計画はあるみたいですが、まだ「An always-on timer (AOT) with alarm」にしかチェックが入っていません。

https://github.com/rp-rs/rp-hal/blob/f23f87709dadb045a55e68937f0cda28a3bc32da/rp235x-hal/src/powman.rs

ちなみに、「An always-on timer (AOT) with alarm」がなぜ必要かというと、RP2040 にあった RTC は RP2350 ではなくなっていて、代わりにこの AOT を使うことになっているからのようです。以下はデータシートの「12.10.2. Changes from RP2040」にあった説明:

The RP2040 Real Time Clock (RTC) is not used in RP2350. Instead, RP2350 has a timer in the Always-On power domain
which is used for scheduling power-up events and can also be used as a real-time counter. The AON Timer works
differently from the RP2040 RTC. It counts milliseconds to 64 bits and this value can be used to calculate the date and
time in software if required.

PSRAM

RP2350 の売りのひとつとして、16MBまでの外部フラッシュメモリ・PSRAM を扱える、というのがありますが、今のところ、フラッシュはサポートされてる(たぶん)けど PSRAM はサポートされていないようです。

ちなみに、Raspberry Pi Pico 2 にはフラッシュも PSRAM もついてないので、とりあえず Pico 2 で遊ぶだけなら悩むことは何もないです。Spark Fun のとか Pimoroni のとかは PSRAM ついてるみたいです。

RP2350B

RP2350B は単純に GPIO の数が多いので、まだテストできてなくてうまく動くか分からない、ということのようです。ちなみに、RP2350B になると ADC が8個あります。Pico 2B みたいなやつ出ないかな...

関連レポジトリの状況

rp-hal

rp-hal には、↑で見たようにすでに rp235x-hal という crate ができています。ただし、まだ crates.io には公開されていません。

https://github.com/rp-rs/rp-hal/tree/main/rp235x-hal

probe-rs

上に書いたように未対応。とりあえずこの issue を追っておけばよさそうです。

https://github.com/probe-rs/probe-rs/issues/2787

embassy

冒頭のブログを書いた人は embassy の開発者でもあるので、embassy はすでに RP2350 をある程度はサポートしているみたいです。実際どれくらい動くのかは未確認です。

https://github.com/embassy-rs/embassy/tree/main/examples/rp23

RTIC

RTIC はまだ対応中です。3週間前に pull request は出ていますが、それ以降特に動きはないみたいです。動きそうな感じもするんですが、何かブロッカーがあるのかよくわかりません。メンテナが忙しいだけ?(2024/10/3 追記:今見たらマージされてました)

https://github.com/rtic-rs/rtic/pull/970

rp2040-project-template

rp2040-hal に対しては、プロジェクトテンプレートが用意されてるんですが、rp235x-project-template みたいなレポジトリは今のところ特にできてないみたいです。まあ、rp235x-hal はまだ crates.io にすら上がってない状態だし、テンプレートつくるとしてもまだまだこれからですよね。

https://github.com/rp-rs/rp2040-project-template

感想

やっぱ probe-rs 未対応が痛いかな...。あとは、RTIC 使ってるので、これを機に embassy に乗り換えようと思いました。

Discussion