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