IIC簡介
IIC(Inter-Integrated Circuit)是一個多主從的串行總線,又叫I2C,是由飛利浦公司發(fā)明的通訊總線,屬于半雙工同步傳輸類型總線。IIC總線是非常常見的數(shù)據(jù)總線,僅僅使用兩條線就能完成多機通訊,一條SCL時鐘線,另外一條雙向數(shù)據(jù)線SDA。如下圖所示,其中兩個上拉電阻是必需的。
IIC總線要求每個設(shè)備SCL/SDA線都是漏極開路模式(OD模式),因此總線必須帶有上拉電阻才能正常工作,如下圖所示:
IIC總線上有兩種狀態(tài),一種是MOS管導通總線被拉低,另外一種是MOS關(guān)斷總線被上拉電阻拉高,如下圖所示:
IIC協(xié)議
1、IDLE狀態(tài)
總線上沒有數(shù)據(jù)傳輸,SCL和SDA都保持高電平。
2、START信號
在SCL為高電平時,SDA下降沿。
3、STOP信號
在SCL為高電平時,SDA上升沿。
4、ACK和NACK信號
發(fā)送方發(fā)送完成8bit數(shù)據(jù)(一個字節(jié))后,緊隨的下一個時鐘周期,發(fā)送方釋放SDA線,接收方發(fā)送一個ACK/NACK信號,用于應(yīng)答發(fā)送方接收狀態(tài)。
ACK:SCL高電平時,SDA為低電平,表示數(shù)據(jù)被正確接收,發(fā)送方可以繼續(xù)發(fā)送,如下圖所示:
NACK:SCL高電平時,SDA為高電平
通訊過程中出現(xiàn)以下情況,總線上會出現(xiàn)NACK信號:
1)接收方忙于其他事情,不能接收數(shù)據(jù)
2)接收方不能理解收到的數(shù)據(jù)或者沒有空間存儲數(shù)據(jù)
3)主機讀取數(shù)據(jù)完成,返回NACK告知從機讀取完成。
5、數(shù)據(jù)傳輸
1)主機向從機寄存器中寫數(shù)據(jù)
主機首先發(fā)送START信號占用總線,然后發(fā)送7Bit從機地址,一般情況下從機地址是通過外部上下拉電阻分配的,7Bit從機地址之后是讀寫位,如果主機想要寫數(shù)據(jù)此位為0,讀數(shù)據(jù)此位為1,之后緊隨從機ACK,然后主機發(fā)送寄存器地址,即數(shù)據(jù)寫在從機哪個地址上,從機再次返回ACK,主機繼續(xù)發(fā)送數(shù)據(jù),所有數(shù)據(jù)發(fā)完之后,主機發(fā)送STOP后釋放總線。
2)主機從從機寄存器中讀數(shù)據(jù)
主機首先發(fā)送START信號占用總線,然后發(fā)送7Bit從機地址以及寫位,然后發(fā)送從機讀取地址,再次發(fā)送一個START,發(fā)送7Bit從機地址以及讀位,最后在主機SCL驅(qū)動下從機把數(shù)據(jù)送上總線,當主機認為數(shù)據(jù)已經(jīng)讀取完成,則發(fā)送STOP釋放總線。注意,此處有一個STOP,兩個START,也就是說START和STOP有可能不是成對出現(xiàn)。






