Raspberry Pi Picoの仕様書を読んでみる(4)

それでは前回に続き、RP2040のマニュアルの第4章、ペリフェラルの解説を見ていきたいと思います。
RP2040の外部ペリフェラルは、それほど変わったものはありません。列挙すると以下のようになります。

・USB ×1(デバイスコントローラ、ホストコントローラ)
・UART ×2
・I2C ×2
・SPI ×2
・PWM ×16
・タイマ ×1(64bit、アラーム×4)
・ウオッチドッグタイマ ×1
・リアルタイムクロック ×1
・ADC ×5(そのうち一つは内蔵の温度センサに接続)
・SSI ×1(外付けフラッシュのExcecute-In-Placeで使用)

この中では USBホストコントローラがあることと、PWMが16チャンネルあるところが少し目立つと思います。
それでは順番に見ていきます。

USBはデバイスモードとホストモードの両方をサポートしています。通信速度は12Mbps(Full Speed、USB1.1)です。

デバイスモードはRP2040でUSBデバイスを作る時に使います。
ホストモードでは、USBキーボードなどのUSBデバイスをRP2040から制御することができます。

ただ USBホストの動作はかなり複雑 ですので、ハードウェアだけでなく、ドライバソフトウェアも重要になります。RP2040のSDKでは、TinyUSBというプロトコルスタックが使われています。現状ではREADMEに、このソフトウェアはデバイスモードの実装が主となっており、ホストモードについてはリワーク中でありテストされていない部分も多い、との記述があります。キーボードやマスストレージは使えるかもしれませんが、WiFiやEthernetなどは難しいかもしれません。

UARTは二つ搭載されています。 これは Raspberry Pi に載っているのと同じく、ARMのIP製品であるPL 011ベースのものと記載されています。

I2Cは二つ搭載されています。マスターとスレーブがサポートされています。特に変わったところは無さそうです。

SPIも二つ搭載されています。これはARMのPL022ベースのものと記載されています。

PWMは16チャネルですが、内部構成は2×8となっています。
8つの「スライス」があり、1つのスライスが2つのPWMチャンネルを出力します。つまり、2つのPWMが1つのスライスを共有します。カウンタやクロックディバイダはスライスに1つなので、これらは2つのPWMで共有されることになります(下図)。

スライスに通し番号をつけ、2つのPWMチャネルをAチャネルとBチャネルと呼ぶと、PWMチャネルは0A、0B、1A、1B、・・・7A、7Bと名付けることができます。各GPIOは1つのPWMチャネルと結びつけられており、GPIO0とGPIO16がPWM0A、GPIO1とGPIO17がPWM0B、というように対応付けられています。

スライスに内蔵されているカウンタは16ビット、その前段にあるクロックディバイダは整数部8ビット小数部4ビットの固定小数点数です。クロックは125MHzですが、カウンタとクロックディバイダで24ビット=1670万分の1まで分周できますから、生成できる信号の周波数の下限は約7.5Hzとなります。

次にタイマーです。PWMが実際にはタイマーとしての機能(カウンタが規定値に達すると割り込みがかかる)を持っているためか、PWMと関係ない専用のタイマーは1つだけです。

タイマーは64ビットのカウンタで、値は1マイクロ秒ごとに増えていきます。
32ビットのアラームが四つ付いており、カウンターの下位32ビットと一致した時に割り込みがかかります。

なお、このタイマー以外に、2つのCPUコアのそれぞれに24ビットのカウンタが1つあり、SysTickの値を生成するために使うことができます。

ウォッチドッグも同じく1マイクロ秒ごとに値が減っていきます。値が0になるとリセットがかかります。 タイマーとウォッチドッグのクロックは共有されています。

年月日と時分秒を保持するリアルタイムクロックも搭載されています。これは Raspberry Pi には無かった機能です。

ADコンバーターは5つあり、そのうち一つは内蔵の温度センサーがに接続されています。
ADコンバーターは解像度12bit、読取速度は500Kサンプル/秒です。 連続的に読み取るモードがありますが、その際にサンプリングスピードをクロックディバイダによって下げることができます。クロックディバイダは整数部16ビット小数部8ビットですので、毎秒10回程度にまで下げられることになります。

最後に、SSI というインターフェースの情報が記載されています。これはXIPの一部として使われているようです 。自分で新しいボードを設計する場合などでないと、ここで記載されている情報はあまり使うことはないかもしれません。

以上、駆け足でしたが、RP2040のマニュアルの第4章の内容でした。USBホストコントローラがどこまでソフトウェアでサポートされていくのかは、ちょっと気になります。RP2040はWiFiやEthernetなどの通信機能がありませんが、もしUSBで通信機能を拡張できたら、面白いかもしれません。

コメント