Workbench

日付

著者

Workbench

Qpico:USB-C搭載のRaspberry Pi Pico「クローン」

日付

初回公開日

October 13, 2024

シリーズ全体を読む

/ 6

この記事は、Quilterの物理法則に基づくレイアウト自動化を使い、NXP i.MX 8M Mini搭載コンピューターを再現した過程を詳しく紹介するシリーズの一部です。 

Quilterには、オープンソースハードウェアをベースにしたサンプル設計がいくつか用意されています。そのひとつが、人気のRaspberry Pi Picoの「クローン」です。私たちはこのサンプルを「Qpico」と呼んでいます。

配置と配線が完了した基板ドキュメントがあるだけでは不十分で、「論より証拠」と言われるように実物で確かめてこそ意味があります。そこで、あるコンパイル実行で得られた配置・配線100%完了の候補を確認し、その中からひとつを選んで実際に製作し、立ち上げてみました。

オリジナル設計のクレジット

まず、功績は正当に評価しておきたいと思います。このプロジェクトは、オープンソースの「AvocadoPi」をベースにしています。これはUSB Type-Cコネクタを備えたRaspberry Pi PICOのバリエーションで、設計者のSindre Hovland氏がGitHubで公開しているものです。

AvocadoPi自体は、RP2040マイクロコントローラーの開発元であるRaspberry Pi LtdによるオリジナルのRaspberry Pi PICOをベースにしています。丁寧に設計されており、3Dモデル付きの高品質なフットプリントも含まれています。

TL;DR:JLCPCBで製造・実装したQuilterのQpico設計は問題なく起動しました。

これがその成果です。USB-Cホストコネクタを備えた、完全実装済みの青いPi Picoのセットで、配線は100% Quilterが行いました。

The fully assembled QPICO board from JLCPCB
JLCPCBから届いた完全実装済みのQPICO基板

Raspberry Pi PICO SDKのサンプルから、お約束の「blink」を書き込んでみます。

Qpicoプロジェクトの詳細

Qpicoは、私たちの「インスタントサンプル」のひとつになる予定です。Raspberry Pi Ltd.は最近、次世代のデュアルコアマイクロコントローラー(RP2350)をリリースしたので、サンプルを入手でき次第、この新しいチップを使った新バージョンをすぐに作るつもりです。とはいえ現時点でも、RP2040は非常に多くのプロジェクトに使える、とても魅力的なプラットフォームです。

このバージョンのQpicoの構成はシンプルです。

  • RP2040マイクロコントローラー(デュアルARM Cortex-M0+)
  • USB Type-Cホストインターフェース
  • USB VBUSから3.3Vへのスイッチングレギュレーター
  • プログラム用(および不揮発性データ保存用)の16Mbit QSPIフラッシュ
  • GPIO25に接続した超高輝度の緑色LED
  • クロック、バイパス、ブート用の各種周辺部品

この設計の本来の目的は、Pi PicoにUSB Type-Cホストコネクタを搭載して改良することです。USB Type-Cは、オリジナルのUSB micro-Bタイプより(大差で)優れているからです。Quilterは差動ペアに対応したので、この種の基板でのUSB 2.0の配線は、直列終端抵抗を経由する場合でも簡単です。

結果をもう少し速く得られるように、またQuilterにとってのボトルネックをいくつか取り除くために、Sindre氏のオリジナル回路図にわずかな変更を加えました。その内容を少し見ていきましょう。手元で確認しながら読みたい方は、こちらからファイルを閲覧またはダウンロードできます。

回路図の変更点

公式のオリジナルRaspberry Pi PICO設計には、USBのDP/DMペア、LED(GPIO25)、GPIO23、QSPIのSSピン、そしてもちろんGNDにアクセスするためのテストポイントがいくつか含まれています。

これらはどれも使う予定がなく必要もないため、最初に回路図上のすべてのテストポイントをAltiumの「Compile Masks」で覆いました。これにより、マスクの下にあるオブジェクトはPCBドキュメント上に配置されず、フットプリントとしても含まれなくなります。以下の例は、USBペアのテストポイントをマスクで覆った様子です。

image.png
変更後のUSB-Cコネクタのピン配置を示す回路図

USB Type-Cフットプリントの工夫と事前配置部品

また、このUSBコネクタのシンボルをよく見ると、通常のピン番号の並びから5番ピンと6番ピンが抜けていることに気づくかもしれません。これは、USB Type-Cコネクタのシンボルとフットプリントを変更したためです。

ご存じのとおり、USB Type-Cではケーブルを表向きにも裏向きにも挿すことができます。USB Type-Cでは、上面と下面の中央ピンがリバーシブルなD_P/D_Nペアを構成します。通常、これはUSB 2.0の差動ペアをコネクタ上面と下面の両方のピンペアに配線する必要があることを意味し、そのためにはクロスオーバーが必要になります。下のスクリーンショットはSindre氏がもともと行っていた方法で、差動ペア上のビアはテストポイントがある下面層へとつながっています。

image.png
オリジナル基板上のUSB-Cフットプリント。コネクタ中央にあるUSB 2.0信号ペアの「入れ替え」接続に注目してください。

Quilterは現在差動ペアに対応していますが、こうしたより複雑な構造や層の切り替えに対応できるよう、まだトレーニングを進めている段階です。そこで本稿執筆時点では、反転接続をフットプリントの一部として組み込んだUSB-Cコネクタのフットプリントを作り直すだけで対処しました。これで完璧に動作します。

これがそのフットプリントです。

image.png
USB 2.0の「入れ替え」をコネクタのPCBフットプリントに組み込むことで、同じことを実現しました。

また、入力保護ダイオードD1と降圧型電圧レギュレーター(U1、L1、C16)を意図的に事前配置している点にも注目してください。この事前配置により、Quilterがこの電源をどのように配線するかをコントロールし、U1、インダクタL1、出力コンデンサC16の間の電流ループを小さく保つことができます。

USB-Cコネクタと40ピンの「DIP」キャスタレーション(端面スルーホール)モジュールのフットプリントも、当然ながらRaspberry Pi Picoのオリジナルの寸法とピン配置に合わせて事前配置しています。

Quilterへの入力と制約

入力ファイル

Altiumのソースドキュメントをアップロードする前に、回路図とPCBの間にほかの同期の問題がないことを確認しました。Picoのキャスタレーションモジュール(J1)、USB Cコネクタ、降圧レギュレーターという重要部品の事前配置が済んだので、残りはすべて任せられる状態になりました。

image.png
PCBエリア上に部品を事前配置したAltium DesignerのソースPCBDocファイル

上のAltium Designer PCBDocに見られるように、BOOT押しボタンも事前配置しました。Quilterは層構成と製造業者ごとにルールセットを自動で割り当て直すため、ソースファイルの設計ルールには一切変更を加えていません。

Quilterでの設計

事前定義した配置を含むQpicoのPCBをQuilterアプリにアップロードしました。簡単に目視確認すると、事前配置したUSB-Cコネクタに問題がないことがわかります。

2024-09-09_17-06-28.png
Quilter.aiで事前配置したUSB-Cコネクタを確認しているところ

物理制約

PcbDocファイルとSchDocファイルをQuilterの新しいレイアウトジョブにアップロードしたうえで、配線制約を次のように設定しました。

  • 大電流ネット(配線幅)ルール:
    • VBUS
    • VBUS → 500mA(USB規格)
    • VSYS → 500mA(保護ダイオードを経由したVBUS)
    • NetL1_1 → 300mA(降圧レギュレーターのスイッチングノードから出力インダクタL1まで)
    • 3V3 → 300mA(GPIOとフラッシュメモリへの給電に使用)
    • 1V1 → 200mA(CPUコア内部の電源)*
  • 差動ペア:
    • P_P:P_N → 85Ω
    • USB_P:USB_N → 85Ω

USBでは相互接続の差動インピーダンスを75〜100Ωと規定していますが、一般的には85Ωまたは90Ωに合わせておくのが、良好なシグナルインテグリティを得るうえで最適です。

ℹ️

*注:RP2040のデータシートには、フルクロック周波数(133MHz)かつフル稼働(デュアルコアFFTアルゴリズム)で両方のCPUコアを動作させた場合の消費電流は最大約40mAと記載されていますが、余裕を持たせ、CPUコア電源ネットのインピーダンスを下げるために200mAの電流を指定しています。

2024-09-06_13-56-45.png
制約を入力する前の入力内容の目視確認

出力ファイル

Quilterがジョブを完了すると、100%完了した候補が複数あり、その中から選ぶことができました。4層、最小穴径10milのビア、最小クリアランス5milという条件で結果を絞り込み、Candidate 56を選びました。この構成はMacrofab向けですが、ほかの多くのクイックターンPCBメーカーでも使用できます。今回は内層2層がGNDなので、信号配線はすべてマイクロストリップ線路になります。

Candidate 56をダウンロードし、そのPCBDocを元のAltium Designerプロジェクトに追加しました。参考までに、上面層と下面層の銅箔ビューを示します。

赤色の配線と銅箔ベタを表示したQpico基板の表面銅箔層。
ポリゴンを再流し込みした後の結果の上面(左)と下面(右)
青色の配線と銅箔ベタを表示したQpico基板の裏面銅箔層。

Altium DesignerのReport » Measure Distanceコマンドを使い、基板上のいくつかの箇所を簡単にチェックしました。特に85Ω差動ペアの寸法とクリアランスを確認しています。これらはQuilterで定義した層構成に対して行われたインピーダンス計算と一致しており、すべて正しいことがわかりました。

差動ペアの配線幅と間隔は特定の層構成に依存する目標インピーダンスに合わせて計算されていますが、今回はばらつき(もしあったとしても)をあまり気にしていません。RP2040チップはUSB 1.1の速度(12Mbit/s)にしか対応しておらず、USB 1.1準拠の規格は許容範囲が広く、75Ωから120Ωまでの差動インピーダンスが認められているからです。

設計検証とクリーンアップ

この設計は層構成と製造上のクリアランス制約を満たしていますが、量産に進む前にいくつか整理が必要な点があります。

  • 信号層上のGNDポリゴンに、未接続の「島」がいくつか含まれている。
  • シルクスクリーン(レジェンド)の文字や要素が配置されておらず、人の手による調整が必要。
  • ソルダレジストのスリバー(細片)領域の一部が狭すぎる。

候補基板に対してAltium Designerで設計ルールチェックを実行すると、これらの問題が検出されます。

シルク印刷の調整設定と設計ルール違反レポートを表示した、Altium上のQpicoレイアウト。

そこで、ほぼすべてのシルクスクリーン文字(部品の参照記号)を手作業で移動し、さらにデフォルトのシルクスクリーンクリアランスとソルダレジストスリバーの設計ルールを少しだけ緩めるという「ずる」もしました。また、Solder Mask Expansionの設計ルールを0milに変更しました。これは、すべての部品パッドについて、ソルダレジストがパッドの縁ぎりぎりまで来ることを意味します。理論上は製造工場での画像の位置合わせが完璧であることが前提になりますが、実際には最近の製造業者はたいていこれで問題なく受け付け、必要に応じてわずかな修正を加えてくれます。

また、差動ペアに追加のクリアランスを持たせるよう、Altium Designerのクリアランスルールも更新する必要がありました。Quilterはすでにインピーダンスプロファイルに従ってペアのクリアランスを確保していましたが、ポリゴンのクリアランスはPCBの設計ルールに追加されていませんでした。そのため、ポリゴンを再流し込みするとインピーダンス制御用のギャップが消えてしまいます。

そうそう、下面層のシルクスクリーンにQuilterのロゴと「Qpico」の文字も追加しました。

こうした細かな変更を加えてクリーンアップを終えると、Altium DesignerのDRCはエラーゼロでクリアしました。

修正済みのQpicoレイアウトと、警告およびルール違反がゼロのAltiumレポート。

これで製造に回す準備が整いました。

Qpicoを製造へ

当初の計画では、懇意にしているMacrofabに標準の4層サービスで製造してもらう予定でした。ところが、部品表(BOM)を精査する過程でいくつか問題にぶつかりました。

  1. USB Type-Cコネクタは米国内の在庫ではすぐに入手できない(アジアでは広く流通している)。
  2. RP2040マイクロコントローラーは、米国の主要な販売代理店で在庫がない(Raspberry Pi Ltd.から直接販売されることのほうが一般的)。
  3. ソース設計では2016サイズの水晶振動子が指定されていた。しかしRP2040チップには12MHzの周波数が必要で、2016サイズは12MHzの水晶振動子を収めるには物理的に小さすぎる。

残念ながら、3点目の問題のため、水晶振動子のフットプリントを2520サイズに変更するしかありませんでした。幸い、2520の水晶振動子パッケージはまったく同じ位置に周囲の余裕をもって収まり、配線を一切動かす必要がなかったため、基板の実際の配線には手を加えずに対応できました。必要だったのは上面のグランドポリゴンを再流し込みすることだけです。DRCも引き続きパスしています。

MacrofabからはRP2040チップとUSB-Cコネクタを支給部品として扱うことを提案されましたが、そのためには自分でアジアから部品を注文し、配送を待ってからキットとしてMacrofabに送る必要がありました。そこまで長く待ちたくなかったので、今回はJLCPCBを試してみることにしました。

JLCPCBでは実装の手配が少し複雑でした。というのも、10ドルを追加で支払うと基板上の抵抗とコンデンサに適した汎用部品を選定してくれる新しいサービスを利用したからです。1日半ほど待ち、そのステップが完了した後は、実装サービス付きで基板を再注文するだけでした。その時点で、シンプルな形式の部品表と部品実装データのCSVファイルをアップロードしました。

続いて部品表を簡単に確認します。ここでもUSB-CコネクタとRP2040のSKUだけを、同社の部品調達サイトLCSCから指定する必要がありました。それが済めば、あとは順調に進みました。1週間半ほどで、完全実装済みのQpico基板が手元に届きました。

製造用パネル内にある、実装済みの青色Qpico基板。

立ち上げと検証

私は少しせっかちですが、この基板設計はよく知られ十分にテストされたRaspberry Pi Picoに由来しており、回路図の正しさも入念に確認していたので、問題は起きないと確信していました。

そこで、1枚目の基板(10枚注文しました)を動かしてみようと、USB-C経由でホストPCに接続しました。すると、おなじみのWindowsの「新しいデバイスが見つかりました」というサウンドが鳴り、新しいUSBドライブ M:(RPI-RP2)が接続されたというトレイ通知も表示されました。やった!

電源

配線電流にはかなり大きめの制約を設定しましたが、それでも計算ツールでは、20°Cの温度上昇に対して配線をかなり細くできます。さらに、500mAという制約電流は、この基板とマイクロコントローラーが実際に使用する電流をはるかに上回っています。RP2040のデータシートによると、シングルコアをフル稼働させた場合の消費電流は18mA弱です。両コアをフル稼働させても消費電流が40mAを超えることはないため、1.1Vコア電源に200mAの制約を設けるのは過剰です(配線幅が好みより細くなりすぎないよう、意図的にそうしました)。

とはいえ、3.3Vの基板電源を供給するDC-DCコンバーターはしっかりと役目を果たしており、外付けの1.8インチTFTディスプレイとそのバックライトにも問題なく給電しています。

TFTの例

「blinky」プロジェクトより手の込んだものも動かせることを示すために、ST7735S TFTディスプレイドライバーを使うライブラリのサンプルを紹介します。このサンプルはSPI 1インターフェースを使用します。これはRP2040に内蔵されたハードウェアSPIペリフェラルで、専用のクロックピンとデータI/Oピンを備えています。

ST7735Sディスプレイデモのソースコードはhttps://github.com/bablokb/pico-st7735-demoからダウンロードできます。このリソースを提供してくれたbablokb氏に感謝します。

デモプロジェクトのmakefileで定義されている、ハードウェアSPI 1インターフェースのピン配置を使用しました。

# library configuration (override if necessary, see pico-st7735 for a complete list)
set(SPI_TFT_PORT "spi1" CACHE STRING "TFT spi port-name")
set(SPI_TFT_CS   "9"    CACHE STRING "TFT CS  pin number")
set(SPI_TFT_DC   "10"   CACHE STRING "TFT DC  pin number")
set(SPI_TFT_RST  "11"   CACHE STRING "TFT RST pin number")
set(TFT_OPTIONS TFT_ENABLE_BLACK TFT_ENABLE_RESET TFT_ENABLE_TEXT TFT_ENABLE_SHAPES
               TFT_ENABLE_ROTATE TFT_ENABLE_SCROLL
           CACHE STRING "TFT options/functions")

#program configuration
set(SPI_PORT "spi1" CACHE STRING "spi port-name")
set(SPI_RX   "12"   CACHE STRING "RX  pin number")
set(SPI_TX   "15"   CACHE STRING "TX  pin number")
set(SPI_SCK  "14"   CACHE STRING "SCK pin number")

Picoボードと小型カラーTFTディスプレイを接続するブレッドボード配線図。

このCirkit Designerの図は、私のブレッドボード上の構成とほぼ同じです。

これで準備が整ったので、Pico Dev Containerでコードをコンパイルします。時間を節約したい方は、以下のテストサンプルからUF2プログラムファイルをダウンロードできます。

BOOT押しボタンを押したままPico基板(Raspberry Pi Picoならどれでも同様です)を接続すると、マスストレージドライブとして認識されます。目的のUF2ファイルをそのドライブにドラッグ&ドロップするだけで基板に書き込まれ、自動的に再起動してファームウェアが実行されます。

blink.uf2

pwm_led_fade.uf2

pico-st7735-demo.uf2

まとめ

このプロセスを通じて、Quilterを「カスタムブレッドボード」ツールとしても手軽に使えることに気づきました。私が手がける多くのデジタル電子工作プロジェクトでは、従来のブレッドボードと大量の「Dupont」ワイヤーから始めることを考えるだけでうんざりします。

短期間で基本的な回路を試すにはそれしか方法がないことも多いのですが、私はQuilterとクイックターンの試作サービスを使うほうがずっと好みです。しかも内層のグランドプレーンのおかげで、ブレッドボードを使う方法よりはるかに優れたシグナルインテグリティが得られます。また、ミスが起きにくく、太い指でワイヤーを引っかけてしまう心配もずっと少なくなります。

設計の改善点

この設計で障害となったのは、部品の入手性に関する問題だけでした。次回は、広く入手可能な2520サイズの水晶振動子、ブートローダーモード用のより一般的な押しボタン、そしてアジアだけでなく米国のサプライヤーからも入手できる別のUSB Type-Cコネクタを使うように更新する予定です。

次のステップ

全体として、非常にうまく機能しています。新しいRaspberry Pi RP2350のサンプルキットもまもなく手元に届く予定なので、RP2350デュアルARM Cortex-M33/デュアルHazard3マイクロコントローラーをベースにした新設計「QPICO2」を楽しみにお待ちください。

リソース

JLCPCBで基板を製作した際にそのまま使用したリソース一式のアーカイブと、テスト用ファームウェア、関連するRaspberry Pi RP2040のドキュメントを以下に掲載します。

Altiumプロジェクト:

JLCPCB用BOMと部品実装データ

Quilterを実際に試す

Project Speedrunは、自律的なレイアウトの実際の姿と、Quilterが実現する時間短縮を示しました。次は、ご自身のハードウェアでお確かめください。

利用を始める

設計の検証

仕上げが完了したら、最後に確認するのはハードウェアが動作するかどうかです。電源投入時には電気的な不具合の多くが現れます。エンジニアにとって、緊張と期待が入り交じる瞬間です。

第4回に進む

設計の仕上げ

自律的なレイアウトにより、DRCを実施済みの完成した設計が得られます。仕上げは、製造に向けて最終調整するための短い精密な作業です。

第3回に進む

設計のコンパイル

設計の準備ができたら、次はQuilterに引き渡します。従来のワークフローでは、この段階でエンジニアとレイアウト担当者が設計意図を確認します。Quilterはこの打ち合わせを回路理解のプロセスに置き換えます。プロジェクトをアップロードし、制約条件がどう解釈されたかを確認して、ジョブを実行します。

第2回に進む