I2C协议详解
I2C協(xié)議詳解
一、I2C協(xié)議簡介
I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。主器件用于啟動總線傳送數(shù)據(jù),并產(chǎn)生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發(fā)和收的關(guān)系不是恒定的,而取決于此時數(shù)據(jù)傳送方向。如果主機要發(fā)送數(shù)據(jù)給從器件,則主機首先尋址從器件,然后主動發(fā)送數(shù)據(jù)至從器件,最后由主機終止數(shù)據(jù)傳送;如果主機要接收從器件的數(shù)據(jù),首先由主器件尋址從器件.然后主機接收從器件發(fā)送的數(shù)據(jù),最后由主機終止接收過程。在這種情況下.主機負責產(chǎn)生定時時鐘和終止數(shù)據(jù)傳送。
二、I2C總線結(jié)構(gòu)
I2C總線在物理連接上非常簡單,分別由SDA(串行數(shù)據(jù)線)和SCL(串行時鐘線)及上拉電阻組成。通信原理是通過對SCL和SDA線高低電平時序的控制,來產(chǎn)生I2C總線協(xié)議所需要的信號進行數(shù)據(jù)的傳遞。在總線空閑狀態(tài)時,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平。
三、I2C總線的特征
I2C總線上的每一個設備都可以作為主設備或者從設備,而且每一個設備都會對應一個唯一的地址(可以從I2C器件的數(shù)據(jù)手冊得知),主從設備之間就通過這個地址來確定與哪個器件進行通信,在通常的應用中,我們把CPU帶I2C總線接口的模塊作為主設備,把掛接在總線上的其他設備都作為從設備。I2C總線上的主設備與從設備之間以字節(jié)(8位)為單位進行雙向的數(shù)據(jù)傳輸。
四、I2C總線的三種狀態(tài)
-
空閑狀態(tài)
-
工作開始狀態(tài)
-
工作停止狀態(tài)
空閑狀態(tài):當SCL與SDA同時為高電平時,為空閑態(tài):
工作開始狀態(tài):此時SCL為高,而SDA出現(xiàn)下降沿(START信號):
工作停止狀態(tài):此時SCL為高,而SDA出現(xiàn)上升沿(STOP信號):
五、I2C總線協(xié)議
I2C協(xié)議規(guī)定,總線上數(shù)據(jù)的傳輸必須以一個起始信號作為開始條件,以一個結(jié)束信號作為傳輸?shù)耐V箺l件。起始和結(jié)束信號總是由主設備產(chǎn)生??偩€在空閑狀態(tài)時,SCL和SDA都保持著高電平,當SCL為高電平時,SDA由高到低的跳變,則會產(chǎn)生一個起始條件;當SCL為高時,SDA由低到高的跳變,則會產(chǎn)生一個停止條件。在起始條件產(chǎn)生后,總線處于忙狀態(tài),由本次數(shù)據(jù)傳輸?shù)闹鲝脑O備獨占,其他I2C器件無法訪問總線;而在停止條件產(chǎn)生后,本次數(shù)據(jù)傳輸?shù)闹鲝脑O備將釋放總線,總線再次處于空閑狀態(tài),當然也可以不釋放總線,可以直接選取下一個從設備并且開始下一次傳輸,最后在釋放總線即可。
傳輸數(shù)據(jù)過程中,當SCL為高電平時,SDA的點平必須保持穩(wěn)定,否則可能會產(chǎn)生開始位或者停止位,所以數(shù)據(jù)傳輸過程中,SCL為高電平時獲取SDA的數(shù)據(jù),在SCL為低電平時可以進行點平的轉(zhuǎn)換(SCL為低電平時不會有影響)
六、I2C讀寫時序
- 寫時序
說明:主機要向從設備寫入數(shù)據(jù)時,主機先發(fā)送起始信號,再發(fā)送從機地址+讀寫位(AD+W),收到從機ACK后,主機發(fā)送寫入的寄存器地址,收到從機ACK后,主機發(fā)送要寫入的數(shù)據(jù),收到從機的ACK后,主機發(fā)送停止位。
- 讀時序
說明:主機要從從設備讀取數(shù)據(jù)時,主機先發(fā)送起始信號,再發(fā)送從機地址+讀寫位(AD+W),收到從機ACK后,主機發(fā)送要讀取的寄存器地址,收到從機ACK后,因為要轉(zhuǎn)換數(shù)據(jù)流方向,主機要重新發(fā)送起始信號,接著發(fā)送從機地址+讀寫位(AD+R),收到從機的ACK后,開始讀取數(shù)據(jù)并發(fā)送ACK信號,數(shù)據(jù)接收完成后,主發(fā)送NACK信號和停止信號。
總結(jié)
- 上一篇: uilabel 自适应
- 下一篇: Reflection in .net