By | March 9, 2022

この記事は、もともとフィリップスによって開発されたI2Cプロトコルのより「微妙な」側面を説明するシリーズの最初の記事です。

このシリーズを読んでいるので、I2Cバスが何であるかをすでに知っていると思います。また、プロジェクトで使用する必要がある場合は、多少の苦痛を避けたいと考えています。 もしそうなら、あなたは正しい場所に来ました。 そうでない場合は、すぐに私のWebサイトでI2Cの紹介情報を追加します。

明確にするために、このシリーズには高速モードのカバレッジは含まれていません。これは、通常の2線式共有バス実装の設計と動作とは大幅に異なり、一般的に使用されているものでもないためです。 このモードをカバーする優れた参考資料がWeb上にたくさんあります。

これは、シリーズの残りの部分でカバーされる内容の簡単なリストです。

  • STARTがありません
  • STOPがありません
  • 繰り返しスタート
  • 欠測データビット
  • ACK / NAKがありません
  • NAK後のデータ
  • 連続したエラー
  • プルアップ抵抗
  • バスリピーター
  • フルハードウェアTWIまたはI2Cペリフェラルを使用した実装
  • USIペリフェラルを使用した実装
  • USARTペリフェラルを使用した実装
  • I2CとのSMBusの違い

さて、良いものに移りましょう!

この記事では、今日の設計に見られる3種類の実装に焦点を当てます。完全なハードウェア、ハードウェアとソフトウェアの組み合わせ、および完全なソフトウェア(または「ビットバン」と呼ばれることもあります)です。

今日の多くのマイクロコントローラーは、一部のローエンドデバイスでさえ、完全にハードウェアのI2C周辺機器を備えています。 Atmelは彼らをTWIと呼び、Microchipは彼らをI2Cと呼びます。 他のベンダーも同様の命名を使用しています。 完全なハードウェアアプローチを使用する場合、周辺機器がどのように機能するか、または正しいI2Cバスシーケンスがどのように見えるかを誤解しない限り、実際にはあらゆる種類のバスエラーを生成することは困難です。 ただし、一般的に、このアプローチでは、プロトコル自体を最も深く理解する必要はありません。

一部のAtmelデバイスに見られるUSI周辺機器は、完全な実装にするためにソフトウェアの相互作用に依存する最小限のハードウェア設計です。 この用途の広いペリフェラルは、実際にはI2C、SPI、およびUART構成に使用でき、3つのペリフェラルすべてを追加するのにコストがかかるローエンドデバイスに適しています。 TWIまたはフルハードウェアI2Cペリフェラルよりも多くのコーディングが必要ですが、いくつかの点でより柔軟性があります。 このアプローチでは、ある状態から次の状態に移行する責任があり、間違った方向に進む可能性があるため、プロトコルをより深く理解する必要があります。

最後に、100%ソフトウェアアプローチを実装するには、I2Cプロトコルを完全に理解する必要があります。 事実上すべてのマイクロコントローラーベンダーが、純粋なソフトウェアソリューションを使用してI2Cマスターデバイスを作成するためのアプリケーションノートとコード例を提供しています。 UARTとは異なり、I2Cは(時間指定ではなく)クロックプロトコルであるため、プロトコルの実行の中断は十分に許容され、データの損失を心配することなく割り込みを処理できます。 ソフトウェアベースのソリューションの最大速度は、最終的にCPUクロック速度によって決定され、通常、マスター実装は簡単に400KHzの速度に達することができます。

スレーブデバイスのソフトウェアベースの実装は、はるかに困難です。 ハードウェアサポートがない場合、ソフトウェアは、クロックエッジを検出し、SCLの立ち上がりまたは立ち下がり前のSDAラインの状態を確実に知るために、SDAラインとSCLラインの両方を同時に監視する必要があります。 STARTまたはSTOP状態を検出するには、通常、割り込みを使用する必要があります。そうしないと、SCLおよびSDAの監視でソフトウェアを100%消費する必要があります。 ソフトウェアベースのスレーブの実装はCPUに依存する傾向があり、100KHzの動作を実現するには複数のMIPSが必要です。 したがって、真のソフトウェアのみのスレーブ実装は、一部のマイクロコントローラファミリには存在しない場合があり、その他の実装は100KHzのバス速度に到達できない場合があります。

このハードウェアとソフトウェアの基盤が整ったので、次の記事でプロトコル自体をさらに深く掘り下げます。 読んでくれてありがとう!

(Copyright 2010 Robert G. Fries)