通信プロトコル
I2Cに少し詳しい説明をいたします。 通信プロトコルはいくつかのフェイズに別れます。
- バスフリーフェーズ
- バススタートフェーズ
- アドレスフェーズ
- アクノロジビット
- データバイトの切れ目
- データフェーズ
- バス終了フェーズ
- バス再スタートフェーズ
- バスの競合調停方法
それぞれのフェーズでの信号線の使い方、考え方を説明します
バスフリーフェーズ
バスフリー状態はいずれのノードも通信ラインを使用していない状態です。 この状態ではデータ、クロック、いずれもどれからもドライブされていませんので終端抵抗でプルアップされて’H’の状態です。 この状態から何れのノードからでも自由にアクセスでいきます。 バスフリー状態ではいずれのノードも同じ優先権でバスの使用ができますのでバスの競合の問題もあります。
バススタートフェーズ
このフェーズは通信を開始するフェーズです。 通信を始めるノードはマスターと呼ばれ、通信により選択されるノードをスレーブと定義します。 マスターはクロックを’H’にしたままデータだけを’L’にします。 クロック’H’はドライブしていない状態が’H’なのでデータだけを’L’にドライブするわけです。 これがどうしてスタートコンディションになるのかと言うと、I2Cでは通常データラインはクロックが’L’のときのみ変化できる(変化させる)ことが約束にしていますので、クロックが’H’の時にデータが’L’になるのは通常あり得ないコンディションです。 それでスタートコンディションなのかデータ転送中なのかを見分けるわけです。 すべてのノードがこのスタートコンディションをモニターしている必要があります。
アドレスフェーズ
データをクロックに同期して最初に送りだす8ビットをスレーブノードアドレスに定義されています。 データはシリアルでクロック同期して送りだしますが、データの変化はクロックの’L’のときにしかし行いません。 データはクロックの立ち上がりエッジでサンプルする必要がありますがクロックが’H’のあいだデータは変化しないことになっているので立ち上がりからソフトで見ても(おそい通信レートで)十分時間があることになります。 クロック’H’の時間はマスターがきめますが、データレートの上限がきめられていますので最小時間はきめられています。
|