I2C

ここまでシリアル通信プロトコルを見てきました。シリアル通信はその単純さから広く使われているプロトコルです。シンプルな設計ゆえに、BluetoothやUSBのような別プロトコルの上に実装することも容易です。

ですが、単純さには欠点もあります。デジタルセンサの読み込みなど、より手の込んだデータのやり取りには別プロトコルが必要となります。

幸か不幸か、組込みの世界には他にもたくさんの通信プロトコルが存在します。中には、デジタルセンサで広く使われているものもあります。

私たちが使っているmicro:bitは、ふたつのモーションセンサを持っています。加速度計と磁力計です。その両方はひとつのコンポーネントとしてパッケージ化されており、I2Cバスでアクセスできます。

I2Cは、Inter-Integrated Circuitを意味し、同期 シリアル通信プロトコルのひとつです。データのやり取りには、データ線(SDA)とクロック線(SCL)の二本の信号線を使います。クロック線で通信を同期させるので、同期プロトコルというわけです。

このプロトコルはマスター・スレーブモデルにのっとっており、マスターが通信を開始し、スレーブとのやり取りをリードします。同じバスに複数のデバイス(マスターでもスレーブでも)を接続することも可能です。特定のデバイスと通信するために、マスターはまず対象となるデバイスのアドレスをバスにブロードキャストします。アドレスは7ビット長、あるいは10ビット長です。一度マスターがスレーブとの通信を開始すると、マスターが通信を停止するまで他のデバイスはバスを使用できません。

クロック線が通信速度を決定します。通常は100 kHz (標準モード) か 400 kHz (ファーストモード)の周波数で動作します。