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