RP2040の基板を自作する
はじめに
Raspberry Pi Picoは使いやすく、組み込み開発の入門・学習としては最適だと思います(WindowsではC/C++による環境構築が少し複雑ですが) ただ、Raspberry Pi Picoはソフトのデバッグや動作確認をするには充分ですが、何か完成品を作ろうとすると、冗長であったり、物足りなかったりする部分があります。
例えば以下のような点が想像できます:
- ほとんどのIOピンを2.54mmピッチに並べているので、基板サイズが大きい
- USBコネクタがmicro-B(主流のType-Cではない)
- BOOTSELスイッチはあるが、リセットスイッチがない
このような点は他の開発者も感じているらしく、サードメーカーから様々な基板が販売されています。
有名なものだと、Seeed XIAO RP2040があり、コンパクトでUSB端子もType-Cになています。
Seeed XIAO RP2040を使用してもいいですが、これでも自分が開発したプロダクトと仕様が一致しなかったり、すべてを1枚の基板に収めたい場合は使用できません。
Raspberry Pi Picoは開発基板であり 、実際に動作しているのは中央にあるRP2040というSocです。 RP2040は単価も安く、在庫も豊富にあって、日本での入手性も高いです。
Raspberryシリコン - RP2040(10個パック)
Raspberry Pi財団による、最初のインハウスデザインマイコンです(Raspberryシリコンと呼びます)。10個パック。カットテープの状態で供給します。
このドキュメントは、RP2040を使用したRaspberry Pi Picoに代わる自作基板を製作する方法について記載します。
このドキュメントのターゲット
このドキュメントは以下の人をターゲットにしています
- RP2040を使用した基板を自作したい人
- KiCad等の回路設計CADを使用できる人
- ある程度回路図が読め、趣味で電子工作等をしている人
- Raspberry Pi Picoの内部がどうなっているか知りたい人
このドキュメントでは以下の内容には触れません
- RP2040のプログラムを作成する方法
- 回路設計CADの使用方法
- RP2040のアーキテクチャ
RP2040について
RP2040の基板設計は、公式のドキュメントをベースに行います。
ここでは記載されている内容について、訳と説明を記載します。
RP2040は低コストで高性能なマイクロコントローラデバイスであり、柔軟なデジタルインターフェースを備えています。主な特徴は以下の通りです:
- デュアルCortex M0+プロセッサ、最大133MHz
- 6バンクにわたる組み込みSRAM 264kB
- 30個の多機能GPIO
- SPIフラッシュ用の専用I/O 6ピン(XIP対応)
- よく使用される周辺機器のための専用ハードウェア
- 拡張された周辺機器サポートのためのプログラマブルI/O
- 内部温度センサー付き4チャンネルADC、500ksps、12ビット変換
- USB 1.1 ホスト/デバイス
RP2040には内蔵のROMがありません。そのため必ず外部にフラッシュメモリが必要になります。
SPIフラッシュ用の専用I/Oピンがあるのはこのためで、外部フラッシュメモリに接続します。
基板と部品選定
Raspberry Piの公式は、RP2040を使用するための、最小構成のKiCad用回路図を公開しています。
この回路図は2層基板で構成され、部品はすべて上面にのみ配置されており、製造コストが安くなるような設計になっています。
また、比較的大きな配線幅、クリアランス、ビアサイズなので、一般的な基板製造サービスでも充分製作できます。
ただし、使用されている部品は小型の表面実装部品が多く、手はんだ(はんだごてを使用したはんだ付け)では実装が難しいかもしれません。
そもそもRP2040が56ピン、7x7mmのQFN(Quad Flat No-leads)パッケージであり、ピン間隔が小さい(0.4mm)ので、手はんだはかなりの技術を要します。
そのため以下のような関係になり、小型の表面実装部品を採用しています。
- RP2040が手はんだできる: 小さい表面実装部品も手はんだできるはず
- RP2040が手はんだできない: ステンシルを一緒に注文してリフローはんだするので、小さい表面実装部品でも問題ない
リフローはんだの歩留まりを気にする人は、実装部品のサイズを大きくしてもいいかもしれません。
電源
入力電源
RP2040は3.3V
(I/O用)と1.1V
(チップのデジタルコア用)の2種類の電圧供給が必要です。
しかし、デバイス内部にレギュレータ(LDO)があり、3.3V
を1.1V
に変換してくれるので、1.1V
の供給についてはあまり心配する必要はありません。
3.3V
をどのように供給するかはユーザーの設計に依存します。
Raspberry Pi PicoのようにUSBコネクタから電源を供給する場合、5V
から3.3V
に変換する外部レギュレータを設置する必要があります。
USB PDに対応する場合は、CC
のラインを抵抗でプルダウンします(5V
の場合は5.1kΩ
)
外部のコネクタやピンヘッダから電源を供給する場合もほとんど同じで、3.3Vに変換する外部レギュレータを設置します。
外部レギュレータにはコンデンサを設置します。
バイパスコンデンサ
RP2040の電源設計を行う場合、バイパスコンデンサが必要になります。
バイパスコンデ ンサには以下の2つの機能があります:
- 電源ノイズを除去する
- RP2040内部の回路が使用できるローカル電荷を供給する
特に2つめの機能があるおかげで、急激に電流が増えた場合でも電圧レベルが過剰に低下することを防ぐことができます。そのため、電源ピンの近くにバイパスコンデンサを設置する必要があります。
バイパスコンデンサの詳細な内容については、こちらがおすすめです。 https://techweb.rohm.co.jp/trend/glossary/18773/
RP2040では通常、各電源ピンで100nFのコンデンサを使用することを推奨しています。
最初に、配線するための充分なスペースを確保するため、使用するバイパスコンデンサーの数を絞り込む必要があります。
設計によっては、デバイス上のスペースにあまり余裕がないため、複数のピンで同じコンデンサを共有することもあります。
スペースの問題は、小さな部品や、両面に部品が配置された4層PCBなど、コストのかかる高度な技術を使用すれば解決することができます。
サンプル基板では、使用するバイパスコンデンサの数を減らし、最適な距離よりも少しだけピンから離れた位置にコンデンサを配置することにより、複雑さとコストを低減しています。
内蔵電圧レギュレータ
内蔵電圧レギュレータは、3.3V入力から1.1Vの電圧が供給されます。
通常の設計では、VREG_OUT
ピンをDVDD
ピンに接続します。
1.1Vを安定して供給するために、入力(VREG_IN)と出力(VREG_OUT)の近くに1μFのコンデンサーを配置する必要があります。
内蔵電圧レギュレータの詳細については、On-Chip Voltage Regulatorを参照してください。
フラッシュストレージ
RP2040を起動して実行するためのプログラムコードを格納するには、フラッシュメモリ(クワッドSPIフラッシュメモリ)を外部に実装する必要があります。
RP2040は最大128Mbit(16MByte)のメモリーサイズをサポートしています。
それほど多くのストレージ(ROM容量)を必要としないアプリケーションを開発する場合は、コストと見合わせて容量が少ないメモリを使用することも可能です。
フラッシュメモリと通信するデータバスは、周波数が非常に高く、使用頻度も高いため、短い経路でRP2040のQSPI
ピンを直接接続する必要があります。
これにより、クロストークによる信号の劣化を防ぐことができます。
クロストークとは、隣接する信号線間で互いに影響を及ぼし合う現象です。 これは特に高密度の配線が行われているプリント基板で問題になります。 詳しくは別の記事に記載する予定です。
QSPI_SS
信号は、