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

今回はRP2040を使ったハードウェアの設計のマニュアルを読んでいきたいと思います。

このマニュアルは30ページで、二つのパートに分かれています。一つ目のパートはRP2040チップを使ったミニマムな基板のデザインを解説するパートです。二つ目はRaspberry Pi Picoの拡張ボードのデザインを解説するパートです。

ちなみにこのマニュアル、結構面白いです。普通の技術文書だと思って読み始めたら、むしろトランジスタ技術やインターフェースのようなノリで書かれていました。PCBのデザインについても、なぜそのようにしたのかわかりやすく細かく書かれています。 読者として、プロの技術者ではなくホビイストや学生などを想定して書かれていると思われます。

それではまず、最初のパートであるRP2040を使った基板のデザインを見ていきます。

このパートは 、RP2040を使うために必要な「最小限の」周辺回路を持つボードの設計について解説されています。 最小限とは、電源、プログラム格納用のフラッシュメモリ、BOOTSELモードにするためのジャンパピン、それにクロック用のオシレータ(RP2040は内蔵オシレータもあるので、必須ではありませんが)です。基板は2層で、デザインは公開されています

現在、RP2040はチップ単体では販売されていないようですが、このようなマニュアルが出ているからには、おそらく遠からずチップ単体の販売も始まるものと思われます。

ちなみにRP2040は、56ピンの QFNパッケージです。ピン間隔は0.4 mm とかなり小さいですが、ひっくり返してポリウレタン線で配線することも(もしかしたら)可能かもしれません。

電源は、RP2040では3.3Vと1.1Vが使われます。ただし、RP2040にはLDOレギュレータが搭載されており、1.1 V を3.3 V から生成することができます。ですので、外部から供給するには3.3Vがあれば十分です。このボードでは、マイクロ USBから5Vを供給し、それをレギュレータで3.3 Vに降圧しています。

次にフラッシュメモリーですが、128Mbitのチップを使用しています。これはRP2040で使える最大容量(16 MB)のフラッシュメモリです。

最後にオシレーターは、12MHzの水晶発振子が使われています。

以上がこのボードのすべてで、上記に必要な信号線以外の全てのGPIOはピンヘッダへ配線されています。

次に、二つ目のパートであるPicoの拡張ボードの設計に関する解説パートです。

このボードには VGA(RGB565またはRGB555)、マイクロSDカード、PWMオーディオ出力(ステレオ)、DACを介したPCMオーディオ出力(ステレオ)、3つのタクトスイッチ(ユーザボタン用)、UARTとSWDを接続するピンヘッダ、リセットボタンが搭載されています。 なお、このデザインは公開されており、このデザインに基づいた拡張ボードがpimoroniから発売されています。またこのボードを使うためのソフトウェアは、githubで公開されています

PicoはRP2040の30本のGPIOの内、4つを使用していますので、利用可能なGPIOは26本です。このボードでは26本のGPIOをやりくりして上記の機能を実現しています。

最初に解説されるのは、電源の供給方法です。

Picoは5Vまたは1.8V~5.5Vを供給すれば動作します。また、この拡張ボード自身は搭載しているDACチップなどのために3.3Vを必要とします。

Picoには5V→3.3Vのレギュレータが載っていますし、RP2040にも内蔵のLDOが搭載されているので、Picoに5Vを供給すれば、Picoからボードへ3.3Vを供給することができます。

一方、ボードからPicoへ電源を供給することもできます。ボードには、

・ボードに直接5Vを供給する電源ピン(通信機能無しのMicroUSB)
・PicoをUSBホストモードで使うときのためのジャンパピン

が搭載されています。

なぜここでUSBに関するジャンパピンが登場するかというと、電源を上記の電源ピンとPicoのマイクロUSBのどちらで供給するかは、PicoのUSBをどう使用するかの選択が影響するからです。

電源供給とUSB利用のパターンとしては、以下の三つがあります。

・Picoのマイクロ USBから給電
PicoをUSB デバイスとして利用する場合はこの方法が使えます。

・ボードからPicoのVBUS端子へ5Vを供給
PicoがUSBホストとなる場合には、この方法が必要です。

・ボードからPicoのVSYS端子へ3.5~5.5Vを給電
PicoのマイクロUSBを使用しない場合はこの方法が使えます。供給する電圧は自由度があります。Picoに供給できる電圧は下限1.8Vですが、このボードはオーディオ用にレギュレータで3.3Vを生成しているため、3.5V以上の電圧が必要です。

これらの電源供給方法は、オリジナルの拡張ボードを作る場合にも参考になりそうです。

電源の次は、VGA出力の解説です。

VGA信号は、RGBの各アナログ信号と水平同期・垂直同期の、合計5種類の信号が必要です。この拡張ボードでは RGB合計で16ビット、それに水平同期と垂直同期で、合計18本のGPIOを使っています。

色信号はR・G・Bを5・6・5ビットで表現する、よくある構成です。アナログ信号は抵抗器を使った簡易的なDAコンバーターで生成します。

シンプルな回路ですが、RP2040のGPIOは全部で30本ですから、そのうち18本を使うということは、半分以上の割合を占めていることになります。

しかもこの他に、Pico自身が4本のGPIOを使用していますし、後で述べるようにオーディオ出力に3本のGPIOが必要です。さらに SD カードとユーザーボタンまで考えると、GPIOが足りなくなります。

そこでこのボードでは、RGB各色の最下位ビットをユーザーボタンの入力にも使用するという、ややトリッキーなことをしています。 VGA信号には、ブラウン管の走査線を画面の端から端まで戻すための「ブランキング期間」があります。走査線が戻る間は色信号は必要ありませんので、ブランキング期間中だけGPIOを入力に切り替え、ユーザーボタンからの入力を受け付ける、ということをしています。

もちろんユーザーボタンが押されているときに色信号を出力すると、色信号に影響を与えます。ただ、入力と兼用で使っているGPIOは各色の最下位ビットなので、色に与える影響は1ビット分だけですみます。

RGBそれぞれの出力のLSBをユーザボタンの入力と兼用しているので、ユーザーボタンは三つとなっています。

次に SD カードインターフェースです。

必要な信号線はCLKとCMD、それにデータバスです。SDカードとのデータバスは、1bit 、2bit、4Bit という異なるモードが利用可能です。このボードのSDカードインターフェースでは、データバスのビット1とビット2をUARTと共用する設計となっています。

SDカードのデータバスを4ビットで使いたい場合は、上の図の1-2間および3-4間をジャンパでショートします。その場合はチップ内のハードウェアUARTは使えなくなります。(UARTも同時に使いたければ、PIOでUARTを実装するという対策が可能です。)

最後に音声出力です。

ボードにはステレオミニジャックが二つ付いています。 一つ目のジャックはGPIOから PWMで音声信号を出力する回路、もう一つはI2Sで接続したDAC から音声信号を出力するための回路が接続されています。

PWMによるオーディオ出力回路は、初代Raspberry Piから使用されているものと基本的には同じで、PWM信号をローパスフィルタに通して音声信号を得ます。I2Sでの出力回路は、DACとしてPCM5101Aが接続されています。

PWMでは2本のGPIO、I2SはSPIと似た構成で3本のGPIOを使いますが、これら二つの回路は同じGPIOを共有しており、どちらか一方の音声出力しか使えません。

以上がハードウェア設計マニュアルの概要です。

このマニュアルには回路の解説のほか、PCBのデザインについても触れられています。ここでは紹介しませんが、初心者向けに書かれていますので興味のある方は読んでみて下さい。

このシリーズはこれで終了です。
RaspberryPi Picoの実物が届きましたので、次回は実物をいじっていきたいと思います。

コメント