I2C制御コマンドを実装する下準備として、I2C制御コマンドの書式を正確に定義しておきます。
===
1.仮称:
I2C-COM
2.文字:
0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|S|P|R|W|T|K|N
の23文字。その他は全て区切り記号として読み飛ばされる。
3.数値文字:
0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F
の16文字。
4.バイト:
数値文字2桁で表す。範囲は0x00~0xFFである。
5.スレーブアドレス:
7bitを数値文字2桁で表す。範囲は0x00~0x7Fである。
6.制御文字:
S|P|R|W|T|K|N
の7文字であり、以下にそれぞれ説明する。
前提として、1つのトランザクション(ひとまとまりの流れ)はSで始まりPで終わる。その途中に再度Sがあってもよい。
S
・I2C信号線上にSTART条件を出す。リプライはない。エラーもない。
P
・I2C信号線上にSTOP条件を出す。リプライはない。エラーもない。
K
・I2C信号線上でslaveから8bit受信した後ACK条件を出す。8bit受信できなかったらタイムアウトエラーになる。(タイムアウトになる条件は後日)
N
・I2C信号線上でslaveから8bit受信した後NACK条件を出す。8bit受信できなかったらタイムアウトエラーになる。(タイムアウトになる条件は後日)
R
・スレーブアドレスが後に続く。Pを出すまでデータの向きはslave -> masterである。slaveからACKが返らないとタイムアウトエラーになる。(タイムアウトになる条件は後日)
例)R29
W
・スレーブアドレスが後に続く。Pを出すまでデータの向きはmaster -> slaveである。slaveからACKが返らないとタイムアウトエラーになる。(タイムアウトになる条件は後日)
例)W29
T
・バイトが後に続く。Pを出すまでデータの向きはmaster -> slaveである。slaveからACKが返らないとタイムアウトエラーになる。(タイムアウトになる条件は後日)
例)W8A
以上