I2C總線數(shù)據(jù)傳輸?shù)腃語(yǔ)言實(shí)現(xiàn)及其應(yīng)用
I2C(Intel-Integrated Circuit)總線是荷蘭的Philips公司于八十年代初推出的一種芯片間串行總線擴(kuò)展技術(shù)。它用兩根線(數(shù)據(jù)線SDA、時(shí)鐘線SCL)可完成總線上主機(jī)與器件的全雙工同步數(shù)據(jù)傳送,可極方便地構(gòu)成多主機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。I2C總線支持所有NMOS、CMOS、TTL等工藝制造的器件,其上所有的節(jié)點(diǎn)都連到同名的SDA、SCL上。I2C總方法,數(shù)據(jù)傳送都有相同的操作模式,接口電器特性相同且獨(dú)立,可在系統(tǒng)供電情況下從系統(tǒng)中移去或增加IC芯片,有I2C接口的外圍器件都有應(yīng)答能力,讀寫片內(nèi)單元時(shí)有地址自動(dòng)加1功能,易實(shí)現(xiàn)多個(gè)字節(jié)的自動(dòng)操作。近年來(lái),國(guó)際上有關(guān)公司制造了多達(dá)幾百種的I2C總線器件,如8051系列單片機(jī)8XC752、LCD驅(qū)動(dòng)器、RAM、I/O接口等芯片都使用了I2C總線接口。隨著數(shù)字技術(shù)的發(fā)展,I2C總線控制系統(tǒng)已經(jīng)應(yīng)用于越來(lái)越多的電子產(chǎn)品。
2 I2C總線的數(shù)據(jù)傳輸
2.1 接口特性
I2C總線接口的數(shù)據(jù)線SDA和時(shí)鐘線SCL必須經(jīng)過(guò)上拉電阻接到正電源VDD上,各個(gè)I2C接口電路輸出端必須是漏極開路或集電極開路,以便完成“線與”的功能。I2C的SDA和SCL都是雙向傳輸線,當(dāng)總線空閑時(shí),此兩線都是“1”(高電平)。由于不同的器件都會(huì)接到I2C總線,邏輯的“0”(低)及“1”(高)的信號(hào)電平取決于VDD的電壓??偩€上能連接的最大器件數(shù)取決于其電容容限400PF。
2.2 I2C總線上的傳輸時(shí)序
I2C總線上每傳輸一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng),在標(biāo)準(zhǔn)模式下可達(dá)100 kbit/s,高速模式下可達(dá)400kbit/s,總線上依據(jù)器件功能不同可建立簡(jiǎn)單的主/從關(guān)系(master/slave),只有帶CPU的器件才可成主控器。圖1為I2C總線一次完整的數(shù)據(jù)傳輸。SCL為高期間,SDA狀態(tài)必須穩(wěn)定,SCL為低時(shí)才允許SDA狀態(tài)變化。SCL保持高電平期間,SDA出現(xiàn)由高至低的轉(zhuǎn)換將啟動(dòng)I2C總線,出現(xiàn)由低至高的轉(zhuǎn)換將停止數(shù)據(jù)傳輸。起始和終止信號(hào)通常由主控器產(chǎn)生。I2C總線的信號(hào)時(shí)序有嚴(yán)格規(guī)定,本應(yīng)用采用標(biāo)準(zhǔn)模式,SCL低電平周期≥4.7μs,SCL高電平周期≥4.0μs,START和STOP之間的總線空閑時(shí)間≥4.7μs。
I2C 總線上傳送的每個(gè)字節(jié)必須為8位,啟動(dòng)和停止之間可傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)不受限制。采用串行傳送,首先傳送最高位,每傳送一個(gè)字節(jié)后必須跟一個(gè)應(yīng)答位。主控器產(chǎn)生應(yīng)答所需的時(shí)鐘脈沖期間,發(fā)送器必須釋放數(shù)據(jù)線(SDA為高),以便接收器輸出應(yīng)答位。低電平為應(yīng)答信號(hào),高電平為非應(yīng)答信號(hào)。非應(yīng)答信號(hào)是當(dāng)主控器作為接收器時(shí),收到最后一個(gè)字節(jié)數(shù)據(jù)后,必須發(fā)送一個(gè)非應(yīng)答信號(hào)給被控發(fā)送器,使被控發(fā)送器釋放數(shù)據(jù)線,以便主控器發(fā)停止信號(hào),終止數(shù)據(jù)傳送。當(dāng)從器件不能再接收字節(jié)時(shí)也會(huì)出現(xiàn)非應(yīng)答信號(hào)這種情況。
I2C總線上的器件一般有兩個(gè)地址:受控地址和通用廣播訪問(wèn)地址,每個(gè)器件有唯一的受控地址用于定點(diǎn)通信,而相同的通用廣播訪問(wèn)地址則用于主控方同時(shí)對(duì)所有器件進(jìn)行訪問(wèn)。如圖1所示,起始信號(hào)后主控器發(fā)送的第一個(gè)字節(jié)就是被讀器件的受控地址,稱作尋址字節(jié)。尋址字節(jié)由高7位地址和最低1位方向位組成,方向位為“0”表明主控器對(duì)被控器的寫操作(W),方向位為 “1”表明對(duì)被控器的讀操作(R)。總線上每個(gè)器件在起始信號(hào)后都把自己的地址與尋址字節(jié)的前7位相比較,如相同則器件被選中,產(chǎn)生應(yīng)答,并根據(jù)讀寫位決定在數(shù)據(jù)傳送中是接收還是發(fā)送。無(wú)論是主發(fā)、主收還是從發(fā)、從收,都是由主器件控制,數(shù)據(jù)傳送完后,主控器都必須發(fā)停止信號(hào)。
3 I2C總線的C51語(yǔ)言實(shí)現(xiàn)
C51語(yǔ)言是針對(duì)Intel的8位單片機(jī)MCS-51系列而開發(fā)的、具有一般C語(yǔ)言特點(diǎn)的高級(jí)編程語(yǔ)言。從1985年至今,有許多公司推出 51系列的C語(yǔ)言編譯器,其中以Franklin C51編譯器在代碼生成方面較為領(lǐng)先,它可生成最少的代碼,支持浮點(diǎn)和長(zhǎng)整數(shù)、重入和遞歸。頭文件reg51.h中包含了51單片機(jī)的特殊功能寄存器(SFR)的字節(jié)定義與位定義。為了與具有I2C總線接口的51單片機(jī)兼容,可在程序開始處定義單片機(jī)的P1.6和P1.7作為I2C總線的SCL和SDA信號(hào),實(shí)際中也可用其它的I/O引腳作為SCL和SDA信號(hào)。C51語(yǔ)言中只要用賦值語(yǔ)句”=”就可實(shí)現(xiàn)I/O口某位的數(shù)據(jù)輸出和讀入?,F(xiàn)將I2C總線底層讀寫函數(shù)接口及功能列舉如下,它可用于沒有內(nèi)部I2C接口的51系列單片機(jī)與I2C總線器件通信。
評(píng)論