I2C
先ほど、シリアル通信プロトコルを見ました。これは非常に広く使われているプロトコルです。とても シンプルであり、そのシンプルさのおかげで Bluetooth や USB のような他のプロトコルの上にも実装しやすいためです。
しかし、そのシンプルさは欠点でもあります。デジタル センサーの読み取りのような、より複雑なデータ交換を行うには、センサーベンダーがその上にさらに別の プロトコルを考案する必要があります。
私たちにとって(不)幸いなことに、組み込み分野には非常に多くのほかの通信プロトコルがあります。その 一部はデジタルセンサーで広く使われています。
私たちが使っている micro:bit ボードには、2 つのモーションセンサーが搭載されています。1 つは加速度計、 もう 1 つは磁力計です。これら 2 つのセンサーは 1 つのコンポーネントにまとめられており、 I2C バス経由でアクセスできます。
I2C は Inter-Integrated Circuit の略で、同期式のシリアル通信プロトコルです。データのやり取りには 2 本の線を使います。データ線(SDA)とクロック線(SCL)です。通信の同期にクロック線が 使われるため、これは 同期式 プロトコルです。
このプロトコルは、コントローラ ターゲット モデルを使用します。コントローラは、ターゲットデバイスとの通信を 開始し、その通信を進める側のデバイスです。コントローラとターゲットの両方を含む複数のデバイスを、 同時に同じバスへ接続できます。コントローラデバイスは、まず対象のアドレスをバスにブロードキャストすることで、特定のターゲット デバイスと通信できます。このアドレスは 7 ビットまたは 10 ビット長です。 いったんコントローラがターゲットとの通信を開始すると、コントローラがその通信を停止するまで、 ほかのどのデバイスもそのバスを利用できません。
クロック線は、データをどれだけ高速にやり取りできるかを決定し、通常は 100 kHz(標準モード)または 400 kHz(高速モード)の周波数で動作します。