- Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解:基于最新的Linux4.0內(nèi)核
- 宋寶華
- 834字
- 2018-12-31 20:25:20
2.3.2 I2C
I2C(內(nèi)置集成電路)總線是由Philips公司開發(fā)的兩線式串行總線,產(chǎn)生于20世紀(jì)80年代,用于連接微控制器及其外圍設(shè)備。I2C總線簡(jiǎn)單而有效,占用的PCB(印制電路板)空間很小,芯片引腳數(shù)量少,設(shè)計(jì)成本低。I2C總線支持多主控(Multi-Mastering)模式,任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主設(shè)備。主控能夠控制數(shù)據(jù)的傳輸和時(shí)鐘頻率,在任意時(shí)刻只能有一個(gè)主控。
組成I2C總線的兩個(gè)信號(hào)為數(shù)據(jù)線SDA和時(shí)鐘SCL。為了避免總線信號(hào)的混亂,要求各設(shè)備連接到總線的輸出端必須是開漏輸出或集電極開路輸出的結(jié)構(gòu)??偩€空閑時(shí),上拉電阻使SDA和SCL線都保持高電平。根據(jù)開漏輸出或集電極開路輸出信號(hào)的“線與”邏輯,I2C總線上任意器件輸出低電平都會(huì)使相應(yīng)總線上的信號(hào)線變低。
“線與”邏輯指的是兩個(gè)或兩個(gè)以上的輸出直接互連就可以實(shí)現(xiàn)“與”的邏輯功能,只有輸出端是開漏(對(duì)于CMOS器件)輸出或集電極開路(對(duì)于TTL器件)輸出時(shí)才滿足此條件。工程師一般以“OC門”簡(jiǎn)稱開漏或集電極開路。
I2C設(shè)備上的串行數(shù)據(jù)線SDA接口電路是雙向的,輸出電路用于向總線上發(fā)送數(shù)據(jù),輸入電路用于接收總線上的數(shù)據(jù)。同樣地,串行時(shí)鐘線SCL也是雙向的,作為控制總線數(shù)據(jù)傳送的主機(jī)要通過SCL輸出電路發(fā)送時(shí)鐘信號(hào),并檢測(cè)總線上SCL上的電平以決定什么時(shí)候發(fā)下一個(gè)時(shí)鐘脈沖電平;作為接收主機(jī)命令的從設(shè)備需按總線上SCL的信號(hào)發(fā)送或接收SDA上的信號(hào),它也可以向SCL線發(fā)出低電平信號(hào)以延長(zhǎng)總線時(shí)鐘信號(hào)周期。
當(dāng)SCL穩(wěn)定在高電平時(shí),SDA由高到低的變化將產(chǎn)生一個(gè)開始位,而由低到高的變化則產(chǎn)生一個(gè)停止位,如圖2.10所示。

圖2.10 I2C總線的開始位和停止位
開始位和停止位都由I2C主設(shè)備產(chǎn)生。在選擇從設(shè)備時(shí),如果從設(shè)備采用7位地址,則主設(shè)備在發(fā)起傳輸過程前,需先發(fā)送1字節(jié)的地址信息,前7位為設(shè)備地址,最后1位為讀寫標(biāo)志。之后,每次傳輸?shù)臄?shù)據(jù)也是1字節(jié),從MSB開始傳輸。每個(gè)字節(jié)傳完后,在SCL的第9個(gè)上升沿到來(lái)之前,接收方應(yīng)該發(fā)出1個(gè)ACK位。SCL上的時(shí)鐘脈沖由I2C主控方發(fā)出,在第8個(gè)時(shí)鐘周期之后,主控方應(yīng)該釋放SDA,I2C總線的時(shí)序如圖2.11所示。

圖2.11 I2C總線的時(shí)序
- Mastering vRealize Operations Manager(Second Edition)
- 零起點(diǎn)學(xué)Linux系統(tǒng)管理
- Learning Windows Server Containers
- Puppet實(shí)戰(zhàn)
- Linux實(shí)戰(zhàn)
- 從零開始寫Linux內(nèi)核:一書學(xué)透核心原理與實(shí)現(xiàn)
- Arch Linux Environment Setup How-to
- Linux網(wǎng)絡(luò)內(nèi)核分析與開發(fā)
- STM32庫(kù)開發(fā)實(shí)戰(zhàn)指南:基于STM32F4
- 細(xì)說(shuō)Linux基礎(chǔ)知識(shí)
- Windows 8實(shí)戰(zhàn)從入門到精通(超值版)
- Windows 7實(shí)戰(zhàn)從入門到精通
- Kali Linux高級(jí)滲透測(cè)試(原書第3版)
- Agile IT Security Implementation Methodology
- Linux從入門到精通(視頻教學(xué)版)