1啥是IIC
IIC(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的同步、半雙工、串行總線。其信號線由時鐘(SCL)和數(shù)據(jù)(SDA)兩條線組成。網(wǎng)絡(luò)結(jié)構(gòu)如下圖。
2IIC如何工作
掛載在IIC總線上的設(shè)備既可以作為主機(jī)也可以作為從機(jī)。既可以發(fā)送數(shù)據(jù)也可以接收數(shù)據(jù)。但是同一時刻,只能有兩個設(shè)備進(jìn)行通信,并且只能一個發(fā)送,另一個接收,即半雙工通信。如何實(shí)現(xiàn)此特性呢?秘密就在設(shè)備的總線端口上,請看下圖。
如上圖所示:
IIC總線的時鐘和數(shù)據(jù)信號線,輸出端是漏極開路(OD門)或者集電極開路(OC門),因此只能輸出邏輯低(0)和高阻態(tài)(Hiz)。為了輸出邏輯高(1),必須上拉電阻到電源。在數(shù)字電路上,此設(shè)計(jì)稱為:線與邏輯。
線與邏輯:兩個輸出端(包括兩個以上)直接互連就可以實(shí)現(xiàn)“AND”的邏輯功能。
與邏輯:只要參與運(yùn)算的單元有一個是0,其結(jié)果為0
因此IIC總線協(xié)議規(guī)定:
SDA和SCL同時為高電平時,總線為空閑狀態(tài);
SCL為高電平期間,SDA由高電平變?yōu)榈碗娖?下降沿),為起始信號;
SCL為高電平期間,SDA由低電平變?yōu)楦唠娖?上升沿),為結(jié)束信號;
傳輸數(shù)據(jù)時,SCL低電平數(shù)據(jù)進(jìn)行傳輸,高電平保持;
IIC一般采用MSB(Most Significant Bit)傳輸方式;
一般總線上數(shù)據(jù)都以字節(jié)Byte(8 bit)傳輸,第9bit為應(yīng)答位;
應(yīng)答ACK為低電平,NACK為高電平;
一個典型的IIC數(shù)據(jù)幀
3IIC總線競爭機(jī)制
上文中說到:總線中的設(shè)備既可以做主機(jī)也可以做從機(jī),那么誰做主機(jī)?誰做從機(jī)?
這是兩個問題,一般情況下主機(jī)提供時鐘SCL,發(fā)送數(shù)據(jù)給從機(jī),從機(jī)響應(yīng)。
Q1:如果有兩個或者以上的設(shè)備同時想發(fā)送數(shù)據(jù)怎么辦?
這就是涉及到總線的仲裁機(jī)制。因?yàn)榭偩€上只能有一個主機(jī)和一個從機(jī)同時工作。舉例說明總線競爭機(jī)制。假設(shè)設(shè)備A和設(shè)備B同時向總線發(fā)送數(shù)據(jù),設(shè)備A發(fā)送8b'1010_1010,設(shè)備B發(fā)送8b'1010_1110,當(dāng)發(fā)送到BIT2的時候,A發(fā)送的是0,B 發(fā)送的是1,這時候總線狀態(tài)為0,因此B退出競爭,釋放總線。
從上面可以看出:誰最先發(fā)送0,誰獲得總線控制權(quán)。
4IIC通信協(xié)議Q2:哪個從機(jī)響應(yīng)?如何響應(yīng)?
分析此問題必須從協(xié)議層入手,找誰的問題很好解決,就是設(shè)備編號的問題,專業(yè)的叫做設(shè)備地址. 顯而易見的,總線上的設(shè)備地址必須是唯一的。為了實(shí)現(xiàn)互聯(lián)互通,協(xié)議規(guī)定:設(shè)備地址有7bit或10bit,常用7bit地址,理論上最大支持128(2^7)個設(shè)備。
一般為了使用方便,設(shè)備地址的最后幾位使用硬件設(shè)置,便于同一個系統(tǒng)中使用相同的器件。典型的就是立體聲揚(yáng)聲器功放。例如TFA9879設(shè)備地址為:
那么,有效的地址為{7b'1101100, 7b'1101101, 7b'1101110, 7b'1101111},也就是說同一個總線上最多可以使用4顆此芯片。
IIC總線常用于內(nèi)存讀寫以及寄存器配置,因此本文以EEPROM 24C02讀寫時序?yàn)槔?。其他類型芯片方式類似?/p>
單字節(jié)寫時序
1、主機(jī)發(fā)送起始位
2、主機(jī)發(fā)送從機(jī)地址,讀寫控制位是0,表示寫
3、從機(jī)應(yīng)答ACK
4、主機(jī)發(fā)送寄存器地址
5、從機(jī)應(yīng)答ACK
6、主機(jī)發(fā)送數(shù)據(jù)
7、從機(jī)應(yīng)答ACK
8、主機(jī)發(fā)送停止位,總線掛起
多字節(jié)寫時序
1、主機(jī)發(fā)送起始位
2、主機(jī)發(fā)送從機(jī)地址,讀寫控制位是1,表示寫
3、從機(jī)應(yīng)答ACK
4、主機(jī)發(fā)送寄存器地址
5、從機(jī)應(yīng)答ACK
6、主機(jī)寫第一個數(shù)據(jù)
7、從機(jī)應(yīng)答ACK
8、主機(jī)寫第N個數(shù)據(jù)
9、從機(jī)應(yīng)答ACK
10、主機(jī)發(fā)送停止位,總線掛起
單字節(jié)讀時序
1、主機(jī)發(fā)送起始位
2、主機(jī)發(fā)送從機(jī)地址,讀寫控制位是0,表示寫
3、從機(jī)應(yīng)答ACK
4、主機(jī)發(fā)送寄存器地址
5、從機(jī)應(yīng)答ACK
6、主機(jī)又發(fā)送起始位
7、主機(jī)發(fā)送從機(jī)地址,讀寫控制位是1,表示讀
8、從機(jī)應(yīng)答ACK
9、從機(jī)發(fā)送數(shù)據(jù)
10、主機(jī)應(yīng)答NACK
11、主機(jī)發(fā)送停止位,釋放總線
多字節(jié)讀時序
主機(jī)發(fā)送起始位
主機(jī)發(fā)送從機(jī)地址,讀寫控制位是0,表示寫
從機(jī)應(yīng)答ACK
主機(jī)發(fā)送寄存器地址
從機(jī)應(yīng)答ACK
主機(jī)又發(fā)送起始位
主機(jī)發(fā)送從機(jī)地址,讀寫控制位是1,表示讀
從機(jī)應(yīng)答ACK
從機(jī)發(fā)送數(shù)據(jù)
主機(jī)應(yīng)答ACK
從機(jī)發(fā)送數(shù)據(jù)N
主機(jī)應(yīng)答NACK
主機(jī)發(fā)送停止位,總線掛起
5IIC電氣特性
按照傳輸速率,IIC被分類為:
標(biāo)準(zhǔn)模式(Standard Mode):100K bps
快速模式(Fast Mode):400K bps
超快速(Fast Mode Plus) : 1 M bps
高速模式(High Speed Mode):3.4M bps
以TFA9879為例,簡要說明一下IIC電氣要求:
時鐘頻率最大400kHz
時鐘高電平和低電平時間,一般情況下,tLOW /tHIGH = 2:1
tHD;STA:起始信號保持時間,最小0.6us
tSU;STA: 起始信號建立時間,最小0.6us
tSU;STO: 結(jié)束信號建立時間,最小0.6us
tSU;DATA: 數(shù)據(jù)建立時間,最小100ns
tHD;DATA: 數(shù)據(jù)保持時間,無要求
tBUF:總線空閑時間,最小1.3us
tSP:毛刺信號,最大寬度50ns
容性負(fù)載:最大400pF
上拉電阻如何選型?
考慮兩個核心問題
1功耗
2速度
功耗決定上拉電阻的下限(最小值):
當(dāng)輸出為0時候,電源VCC通過上拉電阻Rp,經(jīng)過MOS管到地,一般MOS管導(dǎo)通電阻很小,可以忽略。一般情況下,芯片中MOS管導(dǎo)通時能承載的電流可以參考手冊,常見2 ~ 4mA。
IIC協(xié)議規(guī)定:低電平最大電壓0.4V,那么
速度決定了上拉電阻的上限(最大值):
IIC的高電平是由上拉提供的,線路由于寄生電容Cb的影響,導(dǎo)致上升沿變緩,因此上升沿時間決定了上拉電阻的上限值。一般地,選擇高電平為70%VCC,低電平為30%VCC,RC電路零狀態(tài)響應(yīng)曲線如下圖:
根據(jù)時間常數(shù)計(jì)算公式:
低電平時刻T1
那么,
高電平時刻
那么,
因此
評論
查看更多