RP2350 の Rust まわりの対応状況メモ(2024年9月末)
Raspberry Pi Pico 2 が Rust で触れるようになるまでにはまだ時間かかるんだろうなあ、と思っていたのですが、チップが rp-rs のメンバーの人に先行で公開されて開発が進められていたらしいです。
これが RP235x の発表と同時に公開されたその人のブログです。
こっちがもう少し最近、9月の頭に Raspberry Pi 公式のウェブサイトに載った寄稿文です。
ということで、かなりの部分はすでに動くようになってるっぽいです。
まだ動かないもの
とりあえず、上のブログ記事の最後に書かれていた、まだ動いていないとされている部分を見ていきましょう。
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」にしかチェックが入っていません。
ちなみに、「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 には公開されていません。
probe-rs
上に書いたように未対応。とりあえずこの issue を追っておけばよさそうです。
embassy
冒頭のブログを書いた人は embassy の開発者でもあるので、embassy はすでに RP2350 をある程度はサポートしているみたいです。実際どれくらい動くのかは未確認です。
RTIC
RTIC はまだ対応中です。3週間前に pull request は出ていますが、それ以降特に動きはないみたいです。動きそうな感じもするんですが、何かブロッカーがあるのかよくわかりません。メンテナが忙しいだけ?(2024/10/3 追記:今見たらマージされてました)
rp2040-project-template
rp2040-hal
に対しては、プロジェクトテンプレートが用意されてるんですが、rp235x-project-template みたいなレポジトリは今のところ特にできてないみたいです。まあ、rp235x-hal はまだ crates.io にすら上がってない状態だし、テンプレートつくるとしてもまだまだこれからですよね。
感想
やっぱ probe-rs 未対応が痛いかな...。あとは、RTIC 使ってるので、これを機に embassy に乗り換えようと思いました。
Discussion