I2C總線接口擴(kuò)展技術(shù)
i2c總線(inter ic bus,又常寫作iic總線或i2c總線)是philips公司推出的新一代串行通信標(biāo)準(zhǔn)總線。它與spi、microwire/plus串行接口不同,僅僅依靠兩根連線實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送:一根為串行數(shù)據(jù)線(sda),一根為串行時(shí)鐘線(scl)。由于i2c總線具有接口電路簡單,可進(jìn)行系統(tǒng)的模塊化、標(biāo)準(zhǔn)化設(shè)計(jì),靈活性強(qiáng),可維護(hù)性好等特性,目前已成為一種重要的串行通信總線。除了philips公司,像 motorola公司,韓國三星,日本三菱,美國 a/d等許多大公司都陸續(xù)推出了帶有i2c總線標(biāo)準(zhǔn)接口的產(chǎn)品,涉及微處理器(mcu),通用的外圍設(shè)備(eeprom,i/o口,a/d,d/a ,lcd/led顯示器,日歷時(shí)鐘,鍵盤,打印機(jī)接口等等)和家電、音像產(chǎn)品。i2c總線的應(yīng)用日益廣泛,i2c總線器件的接口電路設(shè)計(jì)也顯得十分重要。
本文引用地址:http://m.butianyuan.cn/article/201612/329454.htm2 i2c總線簡介[1]
自從philips推出i2c總線標(biāo)準(zhǔn)以來,經(jīng)歷了3個(gè)版本:version 1.0-1992,version2.0-1998和version 2.1-2000。這使得i2c總線標(biāo)準(zhǔn)不斷完善,應(yīng)用范圍日益廣泛。i2c總線標(biāo)準(zhǔn)規(guī)定有如下3種工作模式:
(1) standard-mode(標(biāo)準(zhǔn)模式):線上最快傳輸速率為100kbps
(2) fast-mode(快速模式):線上最快傳輸速率為400kbps
(3) hs-mode(high-speed mode,高速模式):線上最快傳輸速率為3.4mbps
(4) 這3種工作模式可以向前兼容,即hs-mode環(huán)境下允許以f/s-mode(fast or standard-mode)工作,fast-mode環(huán)境下允許以standard-mode工作。實(shí)際電路中的具體工作模式主要取決于系統(tǒng)中i2c器件接口的電氣特性。
i2c總線技術(shù)采用器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件片選線尋址的方法,從而使得硬件系統(tǒng)具有最簡單而靈活的擴(kuò)展方法。隨著i2c技術(shù)的廣泛應(yīng)用,傳統(tǒng)的7位從器件地址(slaver addresses)已經(jīng)無法滿足實(shí)際需要,在改進(jìn)的i2c總線標(biāo)準(zhǔn)中增加了10位從地址尋址技術(shù),這樣可以把從器件地址由原來的100多個(gè)擴(kuò)充為 1024個(gè),為i2c總線技術(shù)的廣泛應(yīng)用奠定了基礎(chǔ)。
目前,實(shí)際應(yīng)用的i2c器件都以f/s-mode 和7位從地址標(biāo)準(zhǔn)為主。關(guān)于hs-mode 的應(yīng)用和10位從地址的設(shè)計(jì)方法可以參閱文獻(xiàn)1。
3 i2c總線協(xié)議要求[1,2]
i2c總線協(xié)議有嚴(yán)格的時(shí)序要求??偩€工作時(shí),由時(shí)鐘控制線scl傳送時(shí)鐘脈沖,由串行數(shù)據(jù)線sda傳送數(shù)據(jù)。總線傳送的每幀數(shù)據(jù)均為1個(gè)字節(jié) (8bit),但啟動(dòng)i2c總線后,傳送的字節(jié)個(gè)數(shù)沒有限制,只要求每傳送1個(gè)字節(jié)后,對方回應(yīng)1個(gè)應(yīng)答位(acknowledge bit)。在發(fā)送時(shí),首先發(fā)送的是數(shù)據(jù)的最高位(msb)。協(xié)議規(guī)定,啟動(dòng)總線后的第1個(gè)字節(jié)的高7位是從器件的尋址地址(硬件地址),第8位為方向位 (“0”表示主器件對從器件的寫操作;“1”表示主器件對從器件的讀操作),其余的字節(jié)為操作的數(shù)據(jù)??偩€每次傳送開始時(shí)有起始信號(hào),結(jié)束時(shí)有停止信號(hào)。在總線傳送完1個(gè)或幾個(gè)字節(jié)后,可以控制scl線的電平變低,從而使傳送暫停。
圖1列出了i2c總線上典型的幾個(gè)信號(hào)時(shí)序,圖2表示了i2c總線上1次完整的數(shù)據(jù)傳送過程。
在i2c總線系統(tǒng)中,信號(hào)傳輸?shù)木唧w時(shí)序描述如下:
(1) 起始信號(hào)(s):在時(shí)鐘scl為高電平期間,數(shù)據(jù)線sda出現(xiàn)由高電平向低電平的變化,啟動(dòng)i2c總線;
(2) 停止信號(hào)(p):在時(shí)鐘scl為高電平期間,數(shù)據(jù)線sda出現(xiàn)由低電平向高電平的變化,停止i2c總線上的數(shù)據(jù)傳送;
(3) 應(yīng)答信號(hào)(a):i2c總線的第9個(gè)脈沖對應(yīng)應(yīng)答,對應(yīng)sda線上顯示低電平時(shí)為“應(yīng)答”信號(hào)(a),sda線上顯示高電平時(shí)為“非應(yīng)答”信號(hào)(/a);
(4) 數(shù)據(jù)位傳送:i2c總線開始信號(hào)或應(yīng)答信號(hào)之后的第1~8個(gè)時(shí)鐘脈沖對應(yīng)一個(gè)字節(jié)的8位數(shù)據(jù)傳送。在脈沖高電平期間,數(shù)據(jù)串行傳送;在脈沖低電平期間,數(shù)據(jù)準(zhǔn)備,允許總線上數(shù)據(jù)電平變化。
4 i2c總線的接口擴(kuò)展技術(shù)
i2c總線軟硬件協(xié)議十分巧妙,它可以用于構(gòu)成多主系統(tǒng)。系統(tǒng)中有多個(gè)i2c總線接口單片機(jī)時(shí),會(huì)出現(xiàn)多主競爭的復(fù)雜狀態(tài)。i2c總線軟硬件協(xié)議,以及 i2c總線單片機(jī)中的sfr寄存器保證了多主競爭時(shí)的協(xié)調(diào)管理。i2c總線提供的狀態(tài)處理軟件包能自動(dòng)處理總線上出現(xiàn)的26種狀態(tài)。在使用i2c總線時(shí),將這些軟件在程序存儲(chǔ)器中定位,利用這些軟件編制出歸一化的操作命令,設(shè)計(jì)起來十分簡單,方便。對沒有i2c總線接口的單片機(jī),要構(gòu)成多主系統(tǒng),幾乎不可能。因此,在多主的i2c總線系統(tǒng)中,一定要使用帶i2c總線接口的單片機(jī)[7]。
在單主方式的i2c總線系統(tǒng)中,總線上只有一個(gè)主器件,其余都是帶有i2c總線的外圍器件。由于總線上只有一個(gè)主器件成為主節(jié)點(diǎn),該主器件永遠(yuǎn)占據(jù)總線,不會(huì)出現(xiàn)總線競爭,主節(jié)點(diǎn)也不必有自己的節(jié)點(diǎn)地址。在單主系統(tǒng)中,主器件可以是沒有i2c總線接口的器件,此時(shí)用它的兩根i/o口線來虛擬i2c總線接口,只要時(shí)序滿足i2c總線的要求,就可以進(jìn)行i2c總線操作。
4.1基于單片機(jī)系統(tǒng)的i2c總線接口技術(shù)[2,3]
i2c總線技術(shù)最早是基于單片機(jī)系統(tǒng)提出的,現(xiàn)在越來越多的單片機(jī)帶有i2c總線接口,可以直接應(yīng)用。但是更多的單片機(jī)系統(tǒng)并沒有i2c總線接口,要在 i2c總線系統(tǒng)中應(yīng)用,必須進(jìn)行i2c總線虛擬。這一技術(shù)經(jīng)過多年的發(fā)展,已經(jīng)十分成熟,具有專門的虛擬通用軟件包viic1.0[3],用戶甚至可以不必了解i2c總線的協(xié)議,也可以進(jìn)行i2c總線開發(fā),實(shí)現(xiàn)了操作的“傻瓜化”,極大的方便了用戶,擴(kuò)展了單片機(jī)的應(yīng)用領(lǐng)域,推動(dòng)了i2c總線技術(shù)的發(fā)展。
該軟件包適用于80c51系列單主系統(tǒng)中i2c總線外圍器件擴(kuò)展的應(yīng)用程序設(shè)計(jì)。由于軟件中的時(shí)序模擬基于6mhz時(shí)鐘設(shè)計(jì),故在實(shí)際應(yīng)用中可以根據(jù)具體的系統(tǒng)時(shí)鐘來適當(dāng)修改時(shí)序模擬子程序中的空操作指令,便可以直接應(yīng)用。
該軟件包包含以下3部分共9個(gè)子程序:
(1) 模擬i2c總線操作的典型時(shí)序:起始位(star)、停止位(stop)、發(fā)送應(yīng)答位(mack)、發(fā)送非應(yīng)答位(mnack) 。
(2) 模擬i2c數(shù)據(jù)傳送過程:應(yīng)答位檢查(cack)、發(fā)送1個(gè)字節(jié)數(shù)據(jù)(wrbyt)、接收1個(gè)字節(jié)數(shù)據(jù)(rdbyt)。
(3) 模擬外圍器件讀寫操作:i2c總線讀操作過程(rdnbyt)(接收n個(gè)字節(jié)),i2c總線寫操作過程(wrnbyt)(發(fā)送n個(gè)字節(jié))。
不論總線上擴(kuò)展什么外圍設(shè)備,都統(tǒng)一采用以下3條指令作為viic軟件包與用戶的操作接口界面,即:
mov sla,#slar/slaw;總線上節(jié)點(diǎn)尋址并確定傳送方向
mov numbyt,#n;確定傳送字節(jié)數(shù)n
lcall rdnbyt/wrnbyt;讀/寫操作調(diào)用
文獻(xiàn)中對該虛擬軟件包有詳細(xì)的介紹,包括源程序和使用說明,并給出了應(yīng)用實(shí)例。
對應(yīng)該軟件包,文獻(xiàn)4中介紹了基于franklin c51編寫的虛擬i2c總線軟件包viicc1.0。它由1個(gè)頭文件和1個(gè)源程序組成。在使用時(shí),用戶同樣不必關(guān)心i2c外圍器件功能如何,都使用下面的指令:
rdnbyt(uchar slar,uchar qq[],uchar number); ――單主系統(tǒng)的主接收方式
wrnbyt(uchar slaw,uchar ff[],uchar number); ――單主系統(tǒng)的主發(fā)送方式
其中:
slar/slaw是從器件的地址 (讀/寫);
number是需要讀寫的數(shù)據(jù)字節(jié)的個(gè)數(shù);
qq[]是從虛擬i2c總線上讀出的數(shù)據(jù)數(shù)組;
ff[]是需要向虛擬i2c總線上寫入的數(shù)據(jù)數(shù)組。
viicc1.0占用資源與viic1.0占用資源基本上一樣。由于viicc1.0是基于 12mhz的時(shí)鐘設(shè)計(jì)的,因此實(shí)際系統(tǒng)時(shí)鐘變化時(shí),需要在頭文件中適當(dāng)修改nop ( )的個(gè)數(shù)。實(shí)際應(yīng)用時(shí),只要把頭文件和源程序?qū)懭胂鄳?yīng)的程序區(qū),適當(dāng)修改幾個(gè)參數(shù)就可以應(yīng)用,操作簡單方便。
4. 2 基于dsp系統(tǒng)的i2c總線接口的擴(kuò)展
如前文所述,i2c總線技術(shù)在以單片機(jī)為mcu的系統(tǒng)中應(yīng)用最廣泛,設(shè)計(jì)也最靈活簡單。但在許多的系統(tǒng)中,采用dsp(數(shù)字信號(hào)處理器)作為mcu。若系統(tǒng)中含有i2c接口的外圍器件,我們也可以直接用dsp進(jìn)行i2c總線的開發(fā)。目前還沒有專門帶有i2c接口的dsp,所以也只能采用dsp的2根i/o 口線進(jìn)行模擬。仿照文獻(xiàn)3,4中的設(shè)計(jì)思路,文獻(xiàn)5給出了基于tms320c2xx系列dsp的虛擬i2c總線軟件包的設(shè)計(jì)和應(yīng)用,極大的方便了以dsp 為mcu的i2c系統(tǒng)。
該軟件包含有2個(gè)宏定義和12個(gè)子函數(shù),適用于單主系統(tǒng)的主發(fā)送和主接收方式,支持tms320c2xx系列對i2c總線外圍器件n字節(jié)的讀寫操作,通信方式為對虛擬節(jié)點(diǎn)尋址后點(diǎn)對點(diǎn)的讀寫。該軟件包采用4根通用i/o口線(i/o0~i/o3)的任意2根模擬sda和scl,他們的輸入輸出方向由 aspcr的低4位設(shè)定,相應(yīng)口線狀態(tài)的設(shè)定或讀取由iosr寄存器控制。由于c2xx系列的dsp結(jié)構(gòu)與單片機(jī)有很大的不同,口線的輸入輸出狀態(tài)不是自動(dòng)切換的,且aspcr 、iosr寄存器都不支持位尋址方式,所以該軟件包與前文基于單片機(jī)的軟件包viic1.0/viicc1.0有所不同。對用戶而言,可不必了解軟件細(xì)節(jié),只要正確設(shè)置相應(yīng)存儲(chǔ)單元的內(nèi)容,調(diào)用相應(yīng)的子函數(shù)就可以應(yīng)用,用戶接口同樣簡單易用。
另外,文獻(xiàn)[6]給出了tms320vc5402實(shí)現(xiàn)i2c總線接口的2種設(shè)計(jì)思路。一是利用該型號(hào)dsp的多信道緩沖串口(mcbsp):通過設(shè)置 mcbsp的spcr1、spcr2和pcr 相應(yīng)位,可以將mcbsp的clkr、fsr、clkx、fsx腳設(shè)置為通用i/o腳,然后按照i2c總線協(xié)議進(jìn)行軟件編程,就可以實(shí)現(xiàn)與i2c總線的接口;二是利用vc5402 的主機(jī)接口(hpi):通過設(shè)置hpi控制寄存器(hpic)、通用目的i/o狀態(tài)寄存器(gpiosr)和通用目的i/o控制寄存器(gpiocr)相應(yīng)位,就可以將8位的數(shù)據(jù)總線(hd0~hd7)轉(zhuǎn)變成通用i/o口,然后進(jìn)行編程,同樣可以實(shí)現(xiàn)與i2c總線的接口。文獻(xiàn)中給出了較詳細(xì)的設(shè)計(jì)思路和部分程序代碼。
評論