iic通訊原理
1.iic匯流排顧名思義只有2根線:SDA資料線,SCL時鐘線。
主裝置與各個從裝置都是掛載在這兩根線上如圖:
每個裝置都有自己的一個地址,當主機要與多個外圍裝置中的一個裝置通訊時,首先要傳送要通訊的器件地址以確定通訊目標。
2.iic空閒訊號,起始訊號和終止訊號
空閒訊號:SCL和SDA都為高電平期間。
起始訊號:SCL為高電平期間,SDA產生一個下降沿。
終止訊號:SCL為高電平期間,SDA產生一個上升沿。
注:起始訊號和終止訊號都是通過邊沿觸發而非電平觸發
如圖:
3.資料傳送
如圖:
在給一個起始訊號後開始傳送一位元組的資料(一位元組為8位)。
而每一位的傳送就是在SCL的一個週期期間完成(對應時序圖中SCL的1就是一個週期),而在一個SCL週期內當SCL為高電平期間SDA資料不能變的保持原資料,而只有在SCL為低電平期間SDA的資料才能變(注:如果SDA的新資料=原資料那麼在SCL為0期間SDA波形不變即是資料沒變)傳送一個位元組的資料需要8個週期的SCL。
如圖:
注意:SDA中間交叉部分代表兩種情況即:SDA為1,SDA為0的情況。
4.應答訊號
如圖:
在一個位元組的資料傳送完畢後也就是SCL8個週期之後會產生一個等待應答訊號就是圖中SCL的第9個週期,在等待應答期間SDA和SCL都會被拉高,如果資料接收正確那麼接收裝置就會產生一個正確應答(ACK):在SCL第9 個週期的低電平期間將SDA拉低在SCL的高電平期間保持。如果資料沒有接收正確那麼接收裝置就會產生一個非正確應答(NACK):在SCL的第9個週期期間SDA一直未高電平。
注:接收裝置的正確應答是硬體拉低SDA非軟體,而如果微控制器為接收裝置那麼就要程式控制應答訊號。
5.微控制器與外圍裝置iic通訊過程:
在起始訊號後必須傳送一個從機的地址(7位),第8位是資料的傳送方向位(R/T),用“0”表示主機發送資料(T),“1”表示主機接收資料(R)。
每次資料傳送總是由主機產生的終止訊號來結束。但是,若主機希望繼續佔用匯流排進行新的資料傳送,則可以不產生終止訊號,馬上再次發出起始訊號對另一從機進行定址。(注:若再次發起起始訊號那麼第一位元組資料為地址資料後面的才是要傳送的資料)
在匯流排的一次資料傳輸中,可以有一下幾種組合方式:
(1)、主機向從機發送資料,資料傳送方向在整個傳遞過程中不變:
(2)、主機在第一個位元組後,立即從從機讀資料(傳輸方向不變):
(3)、在傳送過程中,當需要改變傳遞方向時,起始訊號和從機地址都被重複一次產生一次,但兩次讀/寫方向位正好相反
注:主機做的都是程式設計控制,從機做的都是自主控制,也可以說是硬體控制,如主機給應答訊號是程式設計控制,但是從機給應答訊號是硬體控制,我們只需要檢查在SDA為高期間,SCL保持低電平一些時間,即可判定從機給了主機應答訊號。