I2C通訊應用:
- 於Microcontroller中,利用兩根通用的輸入輸出接腳及軟體的規劃,可以讓微控制器控制一個小型網路。週邊應用部份包含,AD Converter、DA Converter、RTC等。
I2C介面包含:
- SCL (Serial Clock),由Master產生Clock信號。
- SDA (Serial Data),SDA使用一上拉電阻,將電壓準位拉為High。
I2C接續說明:
- I2C是一種單工同步串列通訊協定,採用2線接續(SCL、SDA),為Multi-Master - Muti-Slave架構,將所有裝置的SCL並聯、SDA並聯。(http://zh.wikipedia.org/wiki/I%C2%B2C)
I2C通訊說明:
- I2C採用7 bits /10 bits Address進行Slave定址,符合Master定址的Slave裝置,與Master進行通訊。
I2C專有名詞:
- Idle State:SDA與SCL皆為High,2 Bus未被任一Master裝置佔用。
- Active State:SDA與SCL被任一Master裝置佔用。
- Start Condition:Master發出的訊號 (SCL為high時,使SDA由high->low)。
- Addressed Slave:
使用7bits address定址:
Master傳送Start Condition後,會傳送7 bits Address、1 bit Read/ Write Request,
共1Byte的資料至SDA上,Slave裝置的address,若與該address相符, 將會回覆ACK給Master裝置,並開始進行Transmit/ Receive使用10bits address定址:
Master傳送Start Condition後,之後會先傳送11110、10th Address、
9th bit Address、1 bit Read/ Write Request,共1Byte的資料至SDA上,
Slave裝置的address,若與該address相符,將會回覆ACK給Master裝置,
Master再傳送8th~1th address,共1Byte的資料至SDA上,Slave裝置的address,若與該address相符,將會回覆ACK給Master裝置。Read / Write Request
- 若Read/ Write Request為low,Addressed Slave將進行Data接收;
- 若Read/ Write Request為high,Addressed Slave將進行Data傳送;
Acknowledge
- Receiver (Master/ Slave)接收每一Byte Address or Data後,會回覆ACK或NACK給Transmitter((Master/ Slave)),告知Transmitter是否繼續通訊。
Clock Stretching:
Slave利用將SCL維持拉至Low,來暫停通訊,可獲得時間處理接收資料,通常再Acknowledge前或Acknowledge後實施。Stop/ Restart Condition:
- 若Master想結束通訊,釋放SDA和SCL,使Bus重新處於Idle狀態,可發送Stop Condition (SCL為high時,使SDA由low->high)。
- 若Master不想釋放SDA和SCL,重新進行Addressed Slave和Read/ Write Request,可再次發送Start Condition,稱之Restart Condition (SCL為high時,使SDA由high->low)。
Bus Collision and Arbitration
- Bus Collision: 當兩個裝置以上,通常為兩個master裝置,同時使用SDA,SCL時,進行資料傳送;當然也有可能是兩個slave裝置(ex:兩個slave設定相同address),但這情況非一般狀況。
Arbitration:
- 確保同時間一個master裝置佔住Bus傳輸的方法,當進行傳輸時,若傳送high準位時,會觀察輸出的準位是否為high,若為low的話,則進行停止傳送;因此,若兩裝置(A,B)同時進行傳送時,其中一裝置A輸出為low準位,另一裝置B輸出為high準位,則裝置A贏得Arbitration,可以確保訊息不被篡改。 (http://www.2cm.com.tw/technologyshow_content.asp?sn=0701010539)