http://www.robot-electronics.co.uk/images/i2c.GIF
http://chiachun-ariel.blogspot.tw/2007/08/i2c.html
原則: bus出現以下兩種狀況時表示變成busy或是不再busy
起始傳輸: SCL為高時,SDA由高被拉低
傳輸結束: SCL為高時,SDA由低被放高
平常:
SCL, SDA為high
傳輸過程中:
只有當SCL為低時,才能為了傳輸下一個位元資料而改變SDA
分解動作開始:
送出端把SDA拉低
經過一小段時間後,接著把SCL拉低
SCL為低時,送出端按照要送出的資料bit而調整SDA電位,調好後把SCL放高
>>接收端看到SCL變高了就讀取SDA狀態抄下來
每傳完八位元,
送出端釋出SDA控制權給接收端(作法就是不拉低SDA)一個時脈周期的時間,這時間內接收端可以把SDA拉低,表示ACK bit, 資料都成功收到了。
如果此時接收端想花點時間處理收到的資料,希望傳送端暫時別送資料過來的話,就把SCL持續拉低,直到已經準備好接收資料時才放高SCL
若已把所有資料傳出,就在SCL為高時,把SDA由低放高,釋放bus使用權出來
沒有留言:
張貼留言