UART vs. SPI vs. I2C: 配線とレイアウトのガイドライン

Zachariah Peterson
|  投稿日 九月 27, 2020  |  更新日 十月 27, 2020
I2C vs SPI vs UART の LCD スクリーン

プロジェクト用の開発ボードを構築している場合や、一般的なMCUを使用している場合、他のアクティブコンポーネントと通信するための多くのプロトコルが見つかります。USBやEthernetのような標準は、ほとんどのコントローラに組み込まれており、コンピュータ周辺機器との作業に使用されます。それでも、I2C、SPI、UARTなどのプロトコルは、下流のMCUやプログラマブルICとのインターフェースに使用されます。SPIとI2CとUARTバスの違いは単純で、MCUを使用しているデザイナーは、これらのプロトコルのルーティングとレイアウトガイドラインに従う方法を知っているべきです。

これらのプロトコルは低速信号規格なので、これらのプロトコルを使用している場合、インピーダンス制御や伝送線の挙動などのことを心配する必要はほとんどありません。しかし、バスラインの信号が受信機に正しく読み取られることを確実にするために考慮すべきいくつかの重要な設計ポイントがあります。アドレッシングの問題もありますが、特定の製品とあなたのコードがこの点を処理できます。さて、これら3つの一般的なプロトコルをPCBレイアウトでどのように使用できるか、いくつかのレイアウト/ルーティングガイドラインを確立し、信号整合性を維持するためのいくつかの重要な点に触れてみましょう。

I2CとSPIとUARTの違いとそれらのレイアウトガイドライン

8ビットから32ビットのMCUは、プログラム可能性を持たせ、シンプルな周辺機器に信号を送るために、これらのプロトコルの少なくとも1つをGPIOと共に使用します。これら3つのシリアルプロトコルはバスプロトコルであり、I2CとUARTはアドレッシングスキームを使用し、SPIはアドレスレスです。SPIはアドレスレスですが、バスプロトコルであり、データを受信する下流デバイスを選択するために依然として使用できます。

I2Cプロトコルのルーティングとレイアウトガイドライン

I2C(I二乗Cと発音されることもあり、またはインターインテグレーテッドサーキットのためにIICと呼ばれることもあります)は、他のデバイスを制御するために2本の線(標準、高速、高速プラスモード)を使用します。1本はクロック線(SCL)、もう1本はデータ線(SDA)です。以下の表にまとめられた3つのモードがあります。上昇/下降時間の値は、I/Oに典型的なシリーズ抵抗が取り付けられていることを前提としています。

モード

データレート/クロック速度

最大上昇/下降時間

最小上昇/下降時間

方向性

標準

100 kHz

1000 ns

-

双方向

高速

400 kHz

300 ns

20 ns*

双方向

高速プラス

1 MHz

300 ns

20 ns*

双方向

高速

3.4 MHz (100 pFバス)

1.7 MHz (400 pFバス)

120 ns**
240 ns**

15 ns**
30 ns**

双方向

超高速

5 MHz

50 ns

25 ns

単方向


*VDD/VCC = 5.5 Vと仮定。VDD/VCCが低い場合は線形にスケールダウンします
**これらの値はクロックラインに対して2で割ります

超高速モードでは、下流への書き込み操作のみに通信が使用される唯一のモードであることに注意してください。このモードは、バスインピーダンスをマッチさせる必要がある時期を確認するのにも重要ですが、実際にはほとんど必要ありません。重要なラインの長さに対して非常に保守的な10%の制限を設けた場合、これらのラインの重要な長さは0.32 mであり、これはI2Cを使用するほとんどのボードのサイズよりもはるかに長いです。最小の立ち上がり/立ち下がり時間に対する膝周波数を使用し、重要な長さに対する10%の制限を設けると、はるかに長い0.92 mの値になります。超高速モードについては、より保守的な0.32 mの数値を採用すべきです。この値より短いI2Cラインは伝送線として振る舞わず、終端方式についてのみ心配すればよいのです。

終端における重要な点は、適切なプルアップおよび直列抵抗器を選択することです。プルアップ抵抗器とVDD/VCCラインバスの容量は、ドライバーが切り替わるときに受信機に信号を提供する放電および充電RC回路を形成します。信号線とクロック線のプルアップ抵抗値(Rp)は、次の不等式に従わなければなりません:

 I2C pull-up resistor value
I2C pull-up resistor value.

分母にある数値は、I2C仕様で標準とされている30%から70%の遷移時間に対して定義されています。10%-90%の遷移時間については、0.8473を2.2に置き換えてください。これにより、プルアップ抵抗の値がさらに制限されます。

PCB layout topology for I2C
I2C layout topology.

VCCバスのインピーダンスに対する標準式を使用してバス容量を決定します。これは、伝送線(マイクロストリップまたはストリップライン)に使用するのと同じ方程式を使用して計算できます。次に、インピーダンスと線の伝搬遅延を使用してバス容量を解くことができます。その計算を行いたくない場合は、オンラインで見つけることができるI2Cバス容量計算機を使用できます。最後に、I2C標準では直列抵抗はオプションですが、電圧スパイクからデバイスを保護し、立ち上がり/立ち下がり時間を遅らせるために含めることができます。I2C標準の59ページにある図46を見て、プルアップ抵抗の値に合わせる適切な直列抵抗の値を決定してください。

SPIプロトコルルーティング&レイアウトガイドライン

SPIプロトコルはI2Cに似ています。このバスでは合計4本の線が使用され、コンポーネントは2つの可能なモードで配置できます。単一のコントローラデバイスが単一の下流デバイスをトリガーする場合、トポロジーは単純にポイントツーポイントです。複数のデバイスをトリガーするには、ドライバーによって提供されるチップセレクト出力の数に依存します(標準モード)。2番目のモードはデイジーチェーンを使用し、単一のデバイスセレクト出力がデイジーチェーン内の各デバイスを順番にトリガーします。


上記の例では、コントローラには2つのチップセレクト出力があり、周辺機器がホストからデータを受信して受け入れるタイミングをトリガーするために使用されます。シリアルデータがコントローラから出力されると、データフレーム中にコントローラによって必要な周辺機器もアクティブ化される必要があり、その周辺機器がデータを受け入れて読み取ります。これはコントローラのロジックにプログラムされています。例えば、マイクロコントローラやFPGAがコントローラとして使用される場合、デバイスのアプリケーションのコードに実装されます。

I2Cとは異なり、SPIのさまざまな信号パラメータは高度に設定可能です。上記で示されたトレース容量を持つRC放電方法は、インターフェースからの出力電流と立ち上がり/立ち下がり時間を制御できます。SPIはプッシュプルインターフェースであり、プルアップ抵抗を通じて電力が引き出されることはありません。立ち上がり時間は外部容量とドライバーの出力インピーダンスによって支配されます。ホストコントローラーのSPI仕様では、特定の全体容量(おそらく50または100 pF)に対して、バスに流れる特定の電流での特定の立ち上がり時間が指定されているかもしれません。たとえば、PIC32 MCUのSPIバスでは、外部容量が50 pFの場合の出力遷移時間が5 nsと指定されています。したがって、10 pFに下がると、与えられた電流出力と電圧レベルで立ち上がり時間が1 nsに低下すると予想されます。その場合、非常に保守的な10%の不一致長の制限で大まかな近似値として0.6インチの長さ許容値が得られます。その後、線が非常に長く立ち上がり時間が短い場合にドライバーの低インピーダンス出力を終端するために、直列抵抗を使用できます。

UARTプロトコル ルーティング&レイアウトガイドライン

ユニバーサル非同期受信送信機(UART)プロトコルは、I2CやSPIに似ています。これらのインターフェースの最大データレートは約5 Mbpsです。UARTデバイスは、デバイス間でクロックが送信されないため、扱いやすいです。すべてが非同期で行われます。各UARTデバイスの内部(システム)クロックは、ボーレートの何倍かで動作しなければならないことに注意してください(つまり、各ビットはN回サンプリングされます)。通信には、単一のコントローラデバイスと単一の下流デバイス間で2本のワイヤーのみが使用されます。

UARTデバイスのデータ形式、信号レベル、およびボーレートは、外部ドライバ回路で設定可能であることに注意してください。RS-232またはRS-485の信号レベルで送信しているかどうかによって、高速信号の挙動が見られるかどうかが決まります。通常、RS-232レベルのUART信号は、エッジレートが遅いため、終端抵抗なしで行われます。しかし、RS-485を使用したUART信号では、通常、終端抵抗が必要です。終端が必要かどうかを判断するためには、標準の高速設計ガイドラインに従い、伝送線の挙動への移行を見てください(上記の記事を参照してください)。

オーバーシュートが発生した場合にそれを減少させる典型的な終端方法は、直列終端を適用することです。UARTは高レベルまたは低レベルでアイドル状態になる可能性があることに注意し、必要なアイドルレベルを設定するためにプルアップ抵抗が必要になる場合があります。プルアップ抵抗を追加する前に、コンポーネントの仕様を確認してください。

同期バスと非同期バスのタイミングの違いについては、この2018年のAltiumLiveプレゼンテーションでMax Seeleyによる説明を読むことができます。

要約

SPIとUARTのルールが少し曖昧に感じられるのは、ファームウェアレベルでインターフェースを設計する自由度があるからです。これらの規格が高速エッジレートで動作すると、高速信号規格と同様にクロストークの影響を受けやすくなります。しかし、仕様にかなりの柔軟性があるため、通常はトレースを低インダクタンスで設計し、誘導性クロストークを減少させることができます。これらの信号をルーティングする際にはある程度の柔軟性があり、次のデジタルシステム内で非常に扱いやすくすることができます。

デジタルシステムを一般的な信号規格で設計する際には、Altium Designer®の設計ルールを使用して、I2CとSPI、UARTのレイアウトガイドラインの違いを設計することができます。レイヤースタックマネージャーとSimberianからの統合3Dフィールドソルバーは、ボードのジオメトリとトレースのジオメトリを使用して信号線の寄生を抽出し、信号が長すぎる長さや高速になった場合にインピーダンスを決定するのに役立ちます。

Altium 365上のAltium Designerは、これまでソフトウェア開発の世界に限定されていた前例のないレベルの統合を電子業界に提供し、設計者が自宅で作業し、前例のない効率レベルに達することを可能にします。

Altium 365上のAltium Designerで可能なことの表面をかすめただけです。製品ページでより詳細な機能説明を確認するか、オンデマンドウェビナーのいずれかをチェックできます。

筆者について

筆者について

Zachariah Petersonは、学界と産業界に広範な技術的経歴を持っています。PCB業界で働く前は、ポートランド州立大学で教鞭をとっていました。化学吸着ガスセンサーの研究で物理学修士号、ランダムレーザー理論と安定性に関する研究で応用物理学博士号を取得しました。科学研究の経歴は、ナノ粒子レーザー、電子および光電子半導体デバイス、環境システム、財務分析など多岐に渡っています。彼の研究成果は、いくつかの論文審査のある専門誌や会議議事録に掲載されています。また、さまざまな企業を対象に、PCB設計に関する技術系ブログ記事を何百も書いています。Zachariahは、PCB業界の他の企業と協力し、設計、および研究サービスを提供しています。IEEE Photonics Society、およびアメリカ物理学会の会員でもあります。

関連リソース

関連する技術文書

ホームに戻る
Thank you, you are now subscribed to updates.