NO IMAGE

I2C slave simulatorを作る(1)(内容が古くなりましたが記録として残します)

  • 2019年4月24日
  • 2019年4月24日
  • IoT
  • 24view
IoT NO IMAGE

slave simulatorを作る前に、I2Cプロトコルをもう一度おさらいします。

(1) SCL=highのとき、SDA=fallを検出すると”START condition”と認識する。

(2) SCL=highのとき、SDA=riseを検出すると”STOP condition”と認識する。

(3) SCL=riseのとき、receiver側がSDAの状態を読み取る。

(4) SCL=fallのとき、transmitter側がSDAの次の状態を出し始める。

slaveがreceiverまたはtransmitterのときの動作で書き直すと

receiverのとき

(3′) SCL=riseのとき、SDAの状態を読み取る。

(4′) SCL=fallのときは何もしない。

transmitterのとき

(3”) SCL=riseのときは何もしない。

(4”) SCL=fallのとき、SDAにデータを載せ始める。

ではreceiver/transmitterはいつ切り替わるのか?

===

ここでは説明の都合で「8bitデータをtransmitterからreceiverに送り、transmitterがACKかNACKを返すまで」を「バイト転送」と定義しておきます。

仕様では「全てのtransactionはSTARTで始まりSTOPで終わる」とありますが、transactionの中身を分解すると

「START、slave address7bit+R/W1bitのバイト転送(1)、バイト転送(2)(の連続)、STOP」

となります。バイト転送(2)の向き、つまりslaveがreceiverなのかtransmitterなのかはその前のR/W bitで決まります。

日本語で説明するとややこしいので後日ソースコードで公開することにします。

ここまで

NO IMAGE
最新情報をチェックしよう!