過去回で何度も登場しているGPIOです。しかしRP2040とRP2350のGPIO機能をとりだして比較してなかったです。そこで今回は2チップのGPIO機能を表にして比べてみました。概ね「似たようなもん」ということで使えるのではないかと思います。しかし細かく見るとRP2350の方はいろいろと機能強化されています。
※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。
※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。
RP2040/RP23502のGPIO
他の多くのマイコンと比べてRP2040/RP2350のGPIOのユニークな点は、ソフトウエアによるGPIO操作がSIO(Single Cycle IO)を通じて行われるところじゃないかと思います。他のマイコンではAPBバス(速いシステムバスの先に接続されている遅い周辺回路用のバス)の先っぽに接続されていることが多いGPIOポートです。しかしRP2040/RP2350では、プロセッサに直結しているSIO経由で直接制御できるようになってます。プロセッサ上での命令実行と固定のタイミングでのGPIOの入出力が制御できる筈。特に何の準備も必要とせず無意識に使用できる機能ですが、何気にPico/Pico2の設計思想を体現している機能かもです。
GPIOにはBank0と1がある
Pico/Pico2のGPIO端子をプログラムしている分にはまず意識する必要はないかと思いますが、RP2040、RP2350ともにGPIOは2つの「バンク」に分かれてます。ざっくり言うとこんな感じです。
-
- Bank0、通常のGPIO端子はすべてこちら
- Bank1、通常は専用機能で使われているけれども、それら機能を使用しない場合にGPIOに転用可能な端子
RP2040とRP2350の端子数を以下で比べてます。
GPIO | RP2040 | RP2350 |
---|---|---|
Bank 0 | 30 | 30:RP2350A, 48:RP2350B |
Bank 1 | 6(XIP) | 8:6(QSPI)+2(USB DP/DM) |
Bank 0は通常30本づつで同じですが、RP2350には80ピンQFN版のRP2350Bがあるので、そのときには18本も端子数が増えます。
Bank 1は、Flashに接続している6端子については呼び名と拡張性はともあれRP2040とRP2350で同じだと思います。RP2350ではUSBを使わないときに、DP、DMの2端子までGPIOに使う機能が増えてます。
機能の違い
決定的な違いがあるのが、RP2350で導入されたパワードメインとパワーダウン制御、セキュア/ノンセキュアの制御に対応するためのGPIO機能です。ここの部分についてはRP2350特有なのでRP2040には機能そのものが不在。比較は不能。
上記以外の機能についてもいろいろRP2350とRP2040との間に差があるため、あちこち微妙に異なってます。
まずはBank 0のGPIO端子の機能割り当て。機能はF0からF11までの12の選択があるのですが、RP2040では選択できないファンクションもあります。
GPIO Bank 0 | RP2040 | RP2350 |
---|---|---|
F0 | none | HSTX(*) |
F1 | SPI | SPI |
F2 | UART | UART |
F3 | I2C | I2C |
F4 | PWM | PWM |
F5 | SIO | SIO |
F6 | PIO0 | PIO0 |
F7 | PIO1 | PIO1 |
F8 | CLOCK(*) | PIO2 |
F9 | USB | CLOCK/TRACE/QMI(*) |
F10 | none | USB |
F11 | none | UART(*) |
なお、(*)と書かれている機能は、一部の端子のみアサインされていて、一部の端子には設定がないものです。
ざっと見渡すと、HSTXはRP2350で新たに導入されているのでRP2040には不在です。またPIO(Programmable I/O)も過去回でみたとおりRP2040は2個、RP2350では3個と搭載個数が異なるので差がでてます。またCLOCK関連機能はRP2040でもRP2450でも設定がありますが、RP2040で使われていなかった端子を使ってRP2350ではTRACE機能やQMI(PSRAM接続などに使うのだと思う)などの追加機能がアサインされています。
また、RP2040、RP2350ともUART機能はF2にアサインですが、F2ではRX、TX以外にRTS、CTSも端子にだしています。RTS、CTSを使わないケースも多いからか、RP2350ではF2でRTS、CTS端子アサインの端子に、F11でRX、TXをアサインしてくれてます。これで全端子にRX、TXのどちらかがアサイン可能となってます。便利?
つづいてBank 1のGPIO端子の機能割り当て。RP2040のBank 1はFlashインタフェースに使うか、GPIOに使うかの2択だったのですが、RP2350ではUARTとI2Cが使えるようにちょい強化されてます。
GPIO Bank 1 | RP2040 | RP2350 |
---|---|---|
F0 | XIP | QMI |
F1 | – | – |
F2 | – | UART |
F3 | – | I2C |
F4 | – | – |
F5 | SIO | SIO |
F6 | – | – |
F7 | – | – |
F8 | – | – |
F9 | – | – |
F10 | none | – |
F11 | none | UART(*) |
細かくテコ入れしてんじゃん。