この動画では、組み込みマイコン開発の基礎として、今回はI2Cについて紹介します。
マイコンの通信方法には長く使われてきた方式が3つあります。
I2C、SPI、UARTの3つですね。
これらはいずれも1本の通信線で1ビットずつ通信をすることから、シリアル通信と呼ばれます。
最近ではI3CやQuad SPIなど、改良されてきてはいるのですが、まずはこの3つの基本を押さえておきましょう。
I2Cの配線方法

早速ですが、I2Cの配線方法について紹介します。
はじめに、マイコンからSCL、SDA、VCC、グラウンドの4つの線を外に出して、この4つの線に対してそれぞれモジュールを接続する形になります。
- SCLはクロックですね。データのやり取りをするための基準になる信号です。
- SDAがデータ線です。データ線の0と1を制御することで、データを送受信することができます。
- VCCは電源、グラウンドは0Vです。
I2Cのメリットとしては、この4線だけをつなげば通信ができることです。
通信の確立

次にI2Cの通信の確立について説明します。
まず、マイコンから通信線につながっているセンサーモジュールに対して、「いるか?」と聞きます。
例えば、「モジュール1、いますか?」と聞いたら、モジュール1は「いるよ」という返事をします。
ここで通信が確立されます。
これはどういう仕組みになっているかというと、各センサーモジュールは固有のスレーブアドレスというものを持っています。
例えば、モジュール1だと0x11、モジュール2だと0x22のような形で持っていて、
「モジュール1いますか?」と言っているのは、スレーブアドレス0x11はありますか? と聞いていることになります。
ビット表現で表すと、0x11は「0001 0001」ですが、最初の数字は取り除いて表現するのがポイントです。
そして、この信号を送るときに基準になるのがクロックで、周期的に0101と変わります。
クロックが0から1になった瞬間のSDA(データ線)の0か1、この情報を各センサーモジュールに送信しています。
そして、マイコンから送ったスレーブアドレスに相当するセンサーモジュールは「います」という返事をするのですが、これはアクノリッジという1ビットの信号で表現します。
実際には、マイコンからスレーブアドレス7桁を送って、この後、マイコンがセンサーモジュールに対して書き込むのか、読み出すのか、ということの0か1の信号を入れてやった後に、センサーモジュールからアクノリッジ信号が返ってきます。
このアクノリッジが0だった場合は、その対象からの応答があったことを示し、1だった場合は応答がないことを表しています。
そして、この後、マイコンからモジュールに対して何かしら要求するコマンドを送るという形になります。
実例紹介(SHT30)

実際のICのデータシートを見てみましょう。
参照するのはSHT30という温湿度センサーになります。
まず通信の確立ですが、これは先ほど紹介した部分で、ここで通信が確立できたら、その後コマンドを送ります。
もともとSHT30には「このコマンドを送ったらこれをします」というのがデータシートに書かれており、この画像に示しているのが測定データの取り込みコマンドです。
この場合、2バイトを送る必要があり、最初に0xE0、続いて0x00の2バイトを送ることで、SHT30は測定データを取り込みます。
続いて、マイコンから先ほどの通信確立と同じ方法でアドレスを送りますが、アドレスの最後を読み出しの形にしてセンサーに対して通信を確立します。
するとSHT30は取り込んだ測定データをデータシートに書かれている形で出力します。
そして、マイコン側で1バイトずつ送られてくるので、このデータはどうやって換算するかということを計算し、LCDなどに表示するという形です。
まとめ
I2Cの長所と短所をざっとまとめておくと、
長所としては、4本の線だけで済むので配線が楽です。
デメリットとしては、いくつかの点が挙げられます。
- センサーモジュールに固有のスレーブアドレスがあるため、これがセンサーによって同じアドレスを持っている場合、どちらか片方しか使えず、少し不便に感じることがあります。
- 1バイト送るごとにアクノリッジ信号を都度確認しなければならず、無駄にデータのやり取りをしなければならない点が煩わしいです。
- クロックが遅いというデメリットもあり、速度としては最大1Mbps程度です。
簡単にまとめると、I2Cは電源と通信線の4本だけで済み、通信の確立、コマンド送信、受信の要求、実際の受信のステップが必要です。
配線が楽なのは良い点ですが、デメリットも多い通信方式だと思います。
以上で終わります。ありがとうございました!
コメント