I2C總線(xiàn)接口擴展技術(shù)
i2c總線(xiàn)(inter ic bus,又常寫(xiě)作iic總線(xiàn)或i2c總線(xiàn))是philips公司推出的新一代串行通信標準總線(xiàn)。它與spi、microwire/plus串行接口不同,僅僅依靠?jì)筛B線(xiàn)實(shí)現了完善的全雙工同步數據傳送:一根為串行數據線(xiàn)(sda),一根為串行時(shí)鐘線(xiàn)(scl)。由于i2c總線(xiàn)具有接口電路簡(jiǎn)單,可進(jìn)行系統的模塊化、標準化設計,靈活性強,可維護性好等特性,目前已成為一種重要的串行通信總線(xiàn)。除了philips公司,像 motorola公司,韓國三星,日本三菱,美國 a/d等許多大公司都陸續推出了帶有i2c總線(xiàn)標準接口的產(chǎn)品,涉及微處理器(mcu),通用的外圍設備(eeprom,i/o口,a/d,d/a ,lcd/led顯示器,日歷時(shí)鐘,鍵盤(pán),打印機接口等等)和家電、音像產(chǎn)品。i2c總線(xiàn)的應用日益廣泛,i2c總線(xiàn)器件的接口電路設計也顯得十分重要。
本文引用地址:http://dyxdggzs.com/article/201612/329454.htm2 i2c總線(xiàn)簡(jiǎn)介[1]
自從philips推出i2c總線(xiàn)標準以來(lái),經(jīng)歷了3個(gè)版本:version 1.0-1992,version2.0-1998和version 2.1-2000。這使得i2c總線(xiàn)標準不斷完善,應用范圍日益廣泛。i2c總線(xiàn)標準規定有如下3種工作模式:
(1) standard-mode(標準模式):線(xiàn)上最快傳輸速率為100kbps
(2) fast-mode(快速模式):線(xiàn)上最快傳輸速率為400kbps
(3) hs-mode(high-speed mode,高速模式):線(xiàn)上最快傳輸速率為3.4mbps
(4) 這3種工作模式可以向前兼容,即hs-mode環(huán)境下允許以f/s-mode(fast or standard-mode)工作,fast-mode環(huán)境下允許以standard-mode工作。實(shí)際電路中的具體工作模式主要取決于系統中i2c器件接口的電氣特性。
i2c總線(xiàn)技術(shù)采用器件地址的硬件設置方法,通過(guò)軟件尋址完全避免了器件片選線(xiàn)尋址的方法,從而使得硬件系統具有最簡(jiǎn)單而靈活的擴展方法。隨著(zhù)i2c技術(shù)的廣泛應用,傳統的7位從器件地址(slaver addresses)已經(jīng)無(wú)法滿(mǎn)足實(shí)際需要,在改進(jìn)的i2c總線(xiàn)標準中增加了10位從地址尋址技術(shù),這樣可以把從器件地址由原來(lái)的100多個(gè)擴充為 1024個(gè),為i2c總線(xiàn)技術(shù)的廣泛應用奠定了基礎。
目前,實(shí)際應用的i2c器件都以f/s-mode 和7位從地址標準為主。關(guān)于hs-mode 的應用和10位從地址的設計方法可以參閱文獻1。
3 i2c總線(xiàn)協(xié)議要求[1,2]
i2c總線(xiàn)協(xié)議有嚴格的時(shí)序要求??偩€(xiàn)工作時(shí),由時(shí)鐘控制線(xiàn)scl傳送時(shí)鐘脈沖,由串行數據線(xiàn)sda傳送數據??偩€(xiàn)傳送的每幀數據均為1個(gè)字節 (8bit),但啟動(dòng)i2c總線(xiàn)后,傳送的字節個(gè)數沒(méi)有限制,只要求每傳送1個(gè)字節后,對方回應1個(gè)應答位(acknowledge bit)。在發(fā)送時(shí),首先發(fā)送的是數據的最高位(msb)。協(xié)議規定,啟動(dòng)總線(xiàn)后的第1個(gè)字節的高7位是從器件的尋址地址(硬件地址),第8位為方向位 (“0”表示主器件對從器件的寫(xiě)操作;“1”表示主器件對從器件的讀操作),其余的字節為操作的數據??偩€(xiàn)每次傳送開(kāi)始時(shí)有起始信號,結束時(shí)有停止信號。在總線(xiàn)傳送完1個(gè)或幾個(gè)字節后,可以控制scl線(xiàn)的電平變低,從而使傳送暫停。
圖1列出了i2c總線(xiàn)上典型的幾個(gè)信號時(shí)序,圖2表示了i2c總線(xiàn)上1次完整的數據傳送過(guò)程。

在i2c總線(xiàn)系統中,信號傳輸的具體時(shí)序描述如下:
(1) 起始信號(s):在時(shí)鐘scl為高電平期間,數據線(xiàn)sda出現由高電平向低電平的變化,啟動(dòng)i2c總線(xiàn);
(2) 停止信號(p):在時(shí)鐘scl為高電平期間,數據線(xiàn)sda出現由低電平向高電平的變化,停止i2c總線(xiàn)上的數據傳送;
(3) 應答信號(a):i2c總線(xiàn)的第9個(gè)脈沖對應應答,對應sda線(xiàn)上顯示低電平時(shí)為“應答”信號(a),sda線(xiàn)上顯示高電平時(shí)為“非應答”信號(/a);
(4) 數據位傳送:i2c總線(xiàn)開(kāi)始信號或應答信號之后的第1~8個(gè)時(shí)鐘脈沖對應一個(gè)字節的8位數據傳送。在脈沖高電平期間,數據串行傳送;在脈沖低電平期間,數據準備,允許總線(xiàn)上數據電平變化。
4 i2c總線(xiàn)的接口擴展技術(shù)
i2c總線(xiàn)軟硬件協(xié)議十分巧妙,它可以用于構成多主系統。系統中有多個(gè)i2c總線(xiàn)接口單片機時(shí),會(huì )出現多主競爭的復雜狀態(tài)。i2c總線(xiàn)軟硬件協(xié)議,以及 i2c總線(xiàn)單片機中的sfr寄存器保證了多主競爭時(shí)的協(xié)調管理。i2c總線(xiàn)提供的狀態(tài)處理軟件包能自動(dòng)處理總線(xiàn)上出現的26種狀態(tài)。在使用i2c總線(xiàn)時(shí),將這些軟件在程序存儲器中定位,利用這些軟件編制出歸一化的操作命令,設計起來(lái)十分簡(jiǎn)單,方便。對沒(méi)有i2c總線(xiàn)接口的單片機,要構成多主系統,幾乎不可能。因此,在多主的i2c總線(xiàn)系統中,一定要使用帶i2c總線(xiàn)接口的單片機[7]。
在單主方式的i2c總線(xiàn)系統中,總線(xiàn)上只有一個(gè)主器件,其余都是帶有i2c總線(xiàn)的外圍器件。由于總線(xiàn)上只有一個(gè)主器件成為主節點(diǎn),該主器件永遠占據總線(xiàn),不會(huì )出現總線(xiàn)競爭,主節點(diǎn)也不必有自己的節點(diǎn)地址。在單主系統中,主器件可以是沒(méi)有i2c總線(xiàn)接口的器件,此時(shí)用它的兩根i/o口線(xiàn)來(lái)虛擬i2c總線(xiàn)接口,只要時(shí)序滿(mǎn)足i2c總線(xiàn)的要求,就可以進(jìn)行i2c總線(xiàn)操作。
4.1基于單片機系統的i2c總線(xiàn)接口技術(shù)[2,3]
i2c總線(xiàn)技術(shù)最早是基于單片機系統提出的,現在越來(lái)越多的單片機帶有i2c總線(xiàn)接口,可以直接應用。但是更多的單片機系統并沒(méi)有i2c總線(xiàn)接口,要在 i2c總線(xiàn)系統中應用,必須進(jìn)行i2c總線(xiàn)虛擬。這一技術(shù)經(jīng)過(guò)多年的發(fā)展,已經(jīng)十分成熟,具有專(zhuān)門(mén)的虛擬通用軟件包viic1.0[3],用戶(hù)甚至可以不必了解i2c總線(xiàn)的協(xié)議,也可以進(jìn)行i2c總線(xiàn)開(kāi)發(fā),實(shí)現了操作的“傻瓜化”,極大的方便了用戶(hù),擴展了單片機的應用領(lǐng)域,推動(dòng)了i2c總線(xiàn)技術(shù)的發(fā)展。
該軟件包適用于80c51系列單主系統中i2c總線(xiàn)外圍器件擴展的應用程序設計。由于軟件中的時(shí)序模擬基于6mhz時(shí)鐘設計,故在實(shí)際應用中可以根據具體的系統時(shí)鐘來(lái)適當修改時(shí)序模擬子程序中的空操作指令,便可以直接應用。
該軟件包包含以下3部分共9個(gè)子程序:
(1) 模擬i2c總線(xiàn)操作的典型時(shí)序:起始位(star)、停止位(stop)、發(fā)送應答位(mack)、發(fā)送非應答位(mnack) 。
(2) 模擬i2c數據傳送過(guò)程:應答位檢查(cack)、發(fā)送1個(gè)字節數據(wrbyt)、接收1個(gè)字節數據(rdbyt)。
(3) 模擬外圍器件讀寫(xiě)操作:i2c總線(xiàn)讀操作過(guò)程(rdnbyt)(接收n個(gè)字節),i2c總線(xiàn)寫(xiě)操作過(guò)程(wrnbyt)(發(fā)送n個(gè)字節)。
不論總線(xiàn)上擴展什么外圍設備,都統一采用以下3條指令作為viic軟件包與用戶(hù)的操作接口界面,即:
mov sla,#slar/slaw;總線(xiàn)上節點(diǎn)尋址并確定傳送方向
mov numbyt,#n;確定傳送字節數n
lcall rdnbyt/wrnbyt;讀/寫(xiě)操作調用
文獻中對該虛擬軟件包有詳細的介紹,包括源程序和使用說(shuō)明,并給出了應用實(shí)例。
對應該軟件包,文獻4中介紹了基于franklin c51編寫(xiě)的虛擬i2c總線(xiàn)軟件包viicc1.0。它由1個(gè)頭文件和1個(gè)源程序組成。在使用時(shí),用戶(hù)同樣不必關(guān)心i2c外圍器件功能如何,都使用下面的指令:
rdnbyt(uchar slar,uchar qq[],uchar number); ――單主系統的主接收方式
wrnbyt(uchar slaw,uchar ff[],uchar number); ――單主系統的主發(fā)送方式
其中:
slar/slaw是從器件的地址 (讀/寫(xiě));
number是需要讀寫(xiě)的數據字節的個(gè)數;
qq[]是從虛擬i2c總線(xiàn)上讀出的數據數組;
ff[]是需要向虛擬i2c總線(xiàn)上寫(xiě)入的數據數組。
viicc1.0占用資源與viic1.0占用資源基本上一樣。由于viicc1.0是基于 12mhz的時(shí)鐘設計的,因此實(shí)際系統時(shí)鐘變化時(shí),需要在頭文件中適當修改nop ( )的個(gè)數。實(shí)際應用時(shí),只要把頭文件和源程序寫(xiě)入相應的程序區,適當修改幾個(gè)參數就可以應用,操作簡(jiǎn)單方便。
4. 2 基于dsp系統的i2c總線(xiàn)接口的擴展
如前文所述,i2c總線(xiàn)技術(shù)在以單片機為mcu的系統中應用最廣泛,設計也最靈活簡(jiǎn)單。但在許多的系統中,采用dsp(數字信號處理器)作為mcu。若系統中含有i2c接口的外圍器件,我們也可以直接用dsp進(jìn)行i2c總線(xiàn)的開(kāi)發(fā)。目前還沒(méi)有專(zhuān)門(mén)帶有i2c接口的dsp,所以也只能采用dsp的2根i/o 口線(xiàn)進(jìn)行模擬。仿照文獻3,4中的設計思路,文獻5給出了基于tms320c2xx系列dsp的虛擬i2c總線(xiàn)軟件包的設計和應用,極大的方便了以dsp 為mcu的i2c系統。
該軟件包含有2個(gè)宏定義和12個(gè)子函數,適用于單主系統的主發(fā)送和主接收方式,支持tms320c2xx系列對i2c總線(xiàn)外圍器件n字節的讀寫(xiě)操作,通信方式為對虛擬節點(diǎn)尋址后點(diǎn)對點(diǎn)的讀寫(xiě)。該軟件包采用4根通用i/o口線(xiàn)(i/o0~i/o3)的任意2根模擬sda和scl,他們的輸入輸出方向由 aspcr的低4位設定,相應口線(xiàn)狀態(tài)的設定或讀取由iosr寄存器控制。由于c2xx系列的dsp結構與單片機有很大的不同,口線(xiàn)的輸入輸出狀態(tài)不是自動(dòng)切換的,且aspcr 、iosr寄存器都不支持位尋址方式,所以該軟件包與前文基于單片機的軟件包viic1.0/viicc1.0有所不同。對用戶(hù)而言,可不必了解軟件細節,只要正確設置相應存儲單元的內容,調用相應的子函數就可以應用,用戶(hù)接口同樣簡(jiǎn)單易用。
另外,文獻[6]給出了tms320vc5402實(shí)現i2c總線(xiàn)接口的2種設計思路。一是利用該型號dsp的多信道緩沖串口(mcbsp):通過(guò)設置 mcbsp的spcr1、spcr2和pcr 相應位,可以將mcbsp的clkr、fsr、clkx、fsx腳設置為通用i/o腳,然后按照i2c總線(xiàn)協(xié)議進(jìn)行軟件編程,就可以實(shí)現與i2c總線(xiàn)的接口;二是利用vc5402 的主機接口(hpi):通過(guò)設置hpi控制寄存器(hpic)、通用目的i/o狀態(tài)寄存器(gpiosr)和通用目的i/o控制寄存器(gpiocr)相應位,就可以將8位的數據總線(xiàn)(hd0~hd7)轉變成通用i/o口,然后進(jìn)行編程,同樣可以實(shí)現與i2c總線(xiàn)的接口。文獻中給出了較詳細的設計思路和部分程序代碼。
評論