I2C總線協議
I2C協議規定,總線上數據的傳輸必須以一個起始信號作為開始條件,以一個結束信號作為傳輸的停止條件。起始和結束信號總是由主設備產生。總線在空閑狀態時,SCL和SDA都保持著高電平,當SCL為高電平而SDA由高到低的跳變,表示產生一個起始條件;當SCL為高而SDA由低到高的跳變,表示產生一個停止條件。在起始條件產生后,總線處于忙狀態,由本次數據傳輸的主從設備獨占,其他I2C器件無法訪問總線;而在停止條件產生后,本次數據傳輸的主從設備將釋放總線,總線再次處于空閑狀態。如圖所示:
在了解起始條件和停止條件后,我們再來看看在這個過程中數據的傳輸是如何進行的。前面我們已經提到過,數據傳輸以字節為單位。主設備在SCL線上產生每個時鐘脈沖的過程中將在SDA線上傳輸一個數據位,當一個字節按數據位從高位到低位的順序傳輸完后,緊接著從設備將拉低SDA線,回傳給主設備一個應答位,此時才認為一個字節真正的被傳輸完成。當然,并不是所有的字節傳輸都必須有一個應答位,比如:當從設備不能再接收主設備發送的數據時,從設備將回傳一個否定應答位。數據傳輸的過程如圖所示:
在前面我們還提到過,I2C總線上的每一個設備都對應一個唯一的地址,主從設備之間的數據傳輸是建立在地址的基礎上,也就是說,主設備在傳輸有效數據之前要先指定從設備的地址,地址指定的過程和上面數據傳輸的過程一樣,只不過大多數從設備的地址是7位的,然后協議規定再給地址添加一個最低位用來表示接下來數據傳輸的方向,0表示主設備向從設備寫數據,1表示主設備向從設備讀數據。如圖所示:
I2C協議
2條雙向串行線,一條數據線SDA,一條時鐘線SCL。
SDA傳輸數據是大端傳輸,每次傳輸8bit,即一字節。
支持多主控(multimastering),任何時間點只能有一個主控。
總線上每個設備都有自己的一個addr,共7個bit,廣播地址全0.
系統中可能有多個同種芯片,為此addr分為固定部分和可編程部份,細節視芯片而定,看datasheet。
1.1 I2C位傳輸
數據傳輸:SCL為高電平時,SDA線若保持穩定,那么SDA上是在傳輸數據bit;若SDA發生跳變,則用來表示一個會話的開始或結束(后面講)
數據改變:SCL為低電平時,SDA線才能改變傳輸的bit
1.2 I2C開始和結束信號
開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。
結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數據。
1.3 I2C應答信號
Master每發送完8bit數據后等待Slave的ACK。
即在第9個clock,若從IC發ACK,SDA會被拉低。
若沒有ACK,SDA會被置高,這會引起Master發生RESTART或STOP流程,如下所示:
1.4 I2C寫流程
寫寄存器的標準流程為:
1. Master發起START
2. Master發送I2C addr(7bit)和w操作0(1bit),等待ACK
3. Slave發送ACK
4. Master發送reg addr(8bit),等待ACK
5. Slave發送ACK
6. Master發送data(8bit),即要寫入寄存器中的數據,等待ACK
7. Slave發送ACK
8. 第6步和第7步可以重復多次,即順序寫多個寄存器
9. Master發起STOP
1.5 I2C讀流程
讀寄存器的標準流程為:
1. Master發送I2C addr(7bit)和w操作1(1bit),等待ACK
2. Slave發送ACK
3. Master發送reg addr(8bit),等待ACK
4. Slave發送ACK
5. Master發起START
6. Master發送I2C addr(7bit)和r操作1(1bit),等待ACK
7. Slave發送ACK
8. Slave發送data(8bit),即寄存器里的值
9. Master發送ACK
10. 第8步和第9步可以重復多次,即順序讀多個寄存器
2. PowerPC的I2C實現
Mpc8560的CCSR中控制I2C的寄存器共有6個。
2.1 I2CADR 地址寄存器
CPU也可以是I2C的Slave,CPU的I2C地址有 I2CADR指定
2.2 I2CFDR 頻率設置寄存器
The serial bit clock frequency of SCL is equal to the CCB clock divided by the divider.
用來設置I2C總線頻率
2.3 I2CCR 控制寄存器
MEN: Module Enable. 置1時,I2C模塊使能
MIEN:Module Interrupt Enable. 置1時,I2C中斷使能。
MSTA:Master/slave mode. 1 Master mode,0 Slave mode.
當1-》0時,CPU發起STOP信號
當0-》1時,CPU發起START信號
MTX:Transmit/receive mode select.0 Receive mode,1 Transmit mode
TXAK:Transfer acknowledge. 置1時,CPU在9th clock發送ACK拉低SDA
RSTA:Repeat START. 置1時,CPU發送REPEAT START
BCST:置1,CPU接收廣播信息(信息的slave addr為7個0)
I2C總線規范
對于面向8位的數字控制應用譬如那些要求用微控制器的要建立一些設計標準
? 一個完整的系統通常由至少一個微控制器和其他外圍器件例如存儲器和I/O擴展器組成
? 系統中不同器件的連接成本必須最小
? 執行控制功能的系統不要求高速的數據傳輸
? 總的效益由選擇的器件和互連總線結構的種類決定
產生一個滿足這些標準的系統需要一個串行的總線結構。盡管串行總線沒有并行總線的數據吞吐能力但它們只要很少的配線和IC連接管腳,然而,總線不僅僅是互連的線還包含系統通訊的所有格式和過程串行總線的器件間通訊。必須有某種形式的協議避免所有混亂數據丟失和妨礙信息的可能性快速器件必須可以和慢速器件通訊系統必須不能基于所連接的器件。否則不可能進行修改或改進應當設計一個過程決定哪些器件何時可以控制總線。而且如果有不同時鐘速度的器件連接到總線必須定義總線的時鐘源所有這些標準都在I2C總線的規范中。
I2C總線的概念
I2C總線支持任何IC生產過程(NMOS、CMOS、雙極性)兩線。――串行數據SDA和串行時鐘SCL線在連接到總線的器件間傳遞信息,每個器件都有一個唯一的地址識別無論是微控制器LCD驅動器存儲器或鍵盤接口。而且都可以作為一個發送器或接收器,由器件的功能決定很明顯LCD驅動器只是一個接收器而存儲器則既可以接收又可以發送數據。除了發送器和接收器外器件在執行數據傳輸時也可以被看作是主機或從機(見表1)。主機是初始化總線的數據傳輸并產生允許傳輸的時鐘信號的器件。此時,任何被尋址的器件都被認為是從機
表1 I2C總線術語的定義
評論
查看更多