----- 正文 -----
1、概述
I2C(Inter-Integrated Circuit)也稱為IIC,是由飛利浦公司(現(xiàn)在屬于恩智浦半導體)開發(fā)的串行通信協(xié)議,廣泛應用于連接低速外圍設備,例如ADC、DAC、電源管理芯片、電流采集芯片等,采用兩線制,最高支持5Mhz通信頻率,支持多主機多從機模式。
2、基本結構
I2C基本結構如下圖,SCL與SDA為通信總線,SCL:時鐘線,SDA:數(shù)據(jù)線,由于其協(xié)議有仲裁功能,因此上面可以掛多個主機和多個從機,另外由于其開漏輸出結構,兩根線上均有上拉電阻來提供高電平。
當然最常見的還是單主機和(單)多從機用法:
3、開漏輸出與線與邏輯
開漏輸出:
開漏輸出是I2C的特點,開漏輸出是指輸出端通過 MOS管的漏極連接到外部電路,MOS管的源極接地,柵極受控,如下圖,此種結構的特點無法輸出高電平,當MOS管開啟時輸出低電平,當MOS管關斷時,輸出高阻態(tài),也就是說不拉高也不拉低,因此需要外部加一個上拉電阻來實現(xiàn)高電平輸出。
開漏輸出的一個好處是即使總線上各個設備有的輸出高電平有的輸出低電平,由于高電平是由上拉電阻產生,因此總線上不會出現(xiàn)VDD與GND短路。
線與邏輯:
線與邏輯類似于與門的邏輯,由于開漏輸出原因,總線上只要有一個設備輸出低電平,那么總線上就會是低電平,如下表:
4、數(shù)據(jù)有效性:
I2C再進行數(shù)據(jù)傳輸時,需要遵循以下邏輯才能保持數(shù)據(jù)有效:
SCL為高電平期間:SDA線上的數(shù)據(jù)必須保持穩(wěn)定。
SCL為低電平期間:SDA線上的數(shù)據(jù)可以發(fā)生變化。
5、數(shù)據(jù)傳輸:
以下是官方文檔給出的一個時序示例
5.1 位傳輸:
從上面的時序圖可以看出,I2C傳輸中,每8位為一個字節(jié),后面跟隨一個應答或非應答位
應答位(ACK):設備將SDA拉低
非應答位(NACK):SDA保持高電平
另外:
讀(Read):SDA保持高電平
寫(Write):主機將SDA拉低
起始位(Start):在SCL為高電平時,SDA由高電平變?yōu)榈碗娖健?/span>
終止位(Stop):在SCL為高電平時,SDA由低電平變?yōu)楦唠娖健?/span>
5.2 常見時序
以下是最常見的時序的抽象圖,該時序由①起始位開始然后主機發(fā)送②七位從機地址,后面跟隨一個③讀或寫位,此后等待從機④應答,待從機應答后,⑤如果是讀數(shù)據(jù),那么后續(xù)將會是從機返回數(shù)據(jù),主機讀取數(shù)據(jù);如果是寫數(shù)據(jù),那么就是主機寫入一位數(shù)據(jù),讀或者寫完成后,主機或者從機再次發(fā)⑥非應答信號,此后發(fā)送⑦停止位停止此次通信。
另外還有常見的復雜一點的時序,該時序由①起始位開始然后主機發(fā)送②七位從機地址,后面跟隨一個③寫位,此后等待從機④應答,從機應答后,主機⑤發(fā)送寄存器地址,從機收到后再次⑥應答,主機收到應答后再次發(fā)送⑦起始位,并再次⑧發(fā)送從機地址,然后發(fā)送⑨讀或寫位,此后再次等待從機10. 應答,主機收到應答后,11. 向從機發(fā)送數(shù)據(jù)或者讀取從機返回的數(shù)據(jù),后續(xù)主機或者從機再次發(fā)12. 非應答信號,最后主機發(fā)送停止位停止此時通信。
上述時序的關鍵在于第一個字節(jié)發(fā)送從機地址,后跟隨第二個字節(jié)從機某個寄存器的地址,第三個字節(jié)再次發(fā)送從機地址,然后第四個字節(jié)才是寫入或讀取的數(shù)據(jù),這樣的時序對于稍微復雜一點的芯片通信比較友好,因為可以對不同的寄存器進行配置。
6、實際時序示例:
如下是一個讀數(shù)據(jù)的時序示意圖,從機地址為:1011 001,從機返回的數(shù)據(jù)為:0101 1101
歡迎評論區(qū)討論,別忘了點贊?。。?/span>