Pico三昧(41) ラズパイPico2:RP2350、Pico:RP2040、UART比較

Joseph Halfmoon

前回GPIOの「違い」を眺めました。今回はUARTです。RP2040でもRP2350でも、搭載しているUARTのユニット数は2個。Arm社のIPであるArm PrimeCell UARTのまったく同じバージョンを搭載してます。「相違なんかない」と思いきや、「IPの外側で」微妙に差別化?してました。コマケー話なんだが。

※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。

※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。

Pico-series Microcontrollers

Arm PrimeCell UART (PL011)

PicoのRP2040、Pico2のRP2350の両チップともハードウエアのUART(Universal Asynchronous Receiver Transmitter)回路として採用しているのはArm社提供のArm PrimeCell UART (PL011)というIPだと書かれています。どちらも同じリビジョンです。

Revision r1p5

そしてArm社の該当IPのページが以下に

https://developer.arm.com/documentation/ddi0183/latest/

ここだけみると「じゃ、まったく同じなんだ」と思ってしまうのですが、実はIPの外側の回路が微妙に違ってました。その件は後で表にまとめました。

先にこのIPについてお惚け老人は微妙に「ひっかかる」ところがあったので、そのことを書いておきます(書いておかないとすぐに忘れてしまうんだ、これが。)

このIP、”industry-standard”な16C650 に似た、という記述があるのですが、参照されているチップの型番ですな。UARTの業界標準といったら

16550

じゃなかろうか。16C650かよ? 単体チップとしては16550の時代が最後くらいでその後は16550と「上位互換」をうたうASICの時代になって各種のSuperIOチップなどの中に組み込まれていった遠い記憶。結果、UART=16550互換だと。

16550の源流をたどれば、National Semiconductor(ナショセミ、NS。TI社に買収された。)社製のUART、8250です。IBM PC系のパソコンが 8250 をUART(主にRS-232C経由でモデムに接続するためだったと思う)として採用(拡張アダプタにだけれども)したために、8250⇒16450⇒16550という流れがUARTの本流となったような気がします。その中で16550こそはFIFOを搭載し、「速い通信」でもデータを取りこぼさないということで決定版、業界標準となったハズ。ただし、日本ではNEC系のパソコン(PC-8001)がインテル8251 USARTを搭載していたので、日本ローカルは8250より8251だったような気がしないでもないっす。

調べてみると16C650は、16550の系譜を引継ぐものでした。ピンコンパチブルね。ソフト的にも同様で使えるみたい。ソースは米国のナショセミではなく、欧州のST社?かも、もしかするとフィリップス(NXP)かも。ざっくり言うと16550の16バイトのFIFOを32バイトに拡張したUARTってな感じデス。そゆこと?

RP2040とRP2350のUARTの微妙な違い

さて本題のRP2040とRP2350の違いは以下です。

UART RP2040 RP2350
UART0 base address 0x40034000 0x40070000
UART1 base address 0x40038000 0x40078000
UART0 TX pins 0,12,16,28 0,12,16,28 : 2,14,18
UART0 RX pins 1,13,17,29 1,13,17,29 : 3,15,19
UART1 TX pins 4,8,20,24 4,8,20,24 : 6,10,22,26
UART1 RX pins 5,9,21,25 5,9,21,25 : 7,11,23,27

まず、RP2040とRP2350ではメモリマップされたアドレスが上記のように異なってます。まあ、SDKの定義文字列を使っているなら何も気にする必要はないですが、無作法にもハードコードなどしていると差が見えます。

その下のピンの話は、前回のGPIOの回で分かった差です。GPIOのどのピンにTXとRXをアサインするかです。RP2350では、RP2040と同じ番号のGPIOにTX、RXがアサインできるようになっています。しかしRP2350では、RP2040のときにUARTのハードウエアフロー制御端子(CTS、RTS)にアサインされている端子をつぶしてTX、RXに割り当てることも可能になってます。

なお、上記はGPIOのバンク0の下位の30ピン部分(RP2040、RP2350A共通)のみの比較です。RP2350B(80ピン版)の拡張された端子部分や、バンク1への割り当て機能についてはそもそもRP2040に設定が無いです。

Pico三昧(40) ラズパイPico2:RP2350、Pico:RP2040、GPIO比較 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です