新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > I2C總線(xiàn)接口擴(kuò)展技術(shù)

I2C總線(xiàn)接口擴(kuò)展技術(shù)

作者: 時(shí)間:2016-12-13 來(lái)源:網(wǎng)絡(luò) 收藏
  1 引言

  i2c總線(xiàn)(inter ic bus,又常寫(xiě)作iic總線(xiàn)或i2c總線(xiàn))是philips公司推出的新一代串行通信標(biāo)準(zhǔn)總線(xiàn)。它與spi、microwire/plus串行接口不同,僅僅依靠?jī)筛B線(xiàn)實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送:一根為串行數(shù)據(jù)線(xiàn)(sda),一根為串行時(shí)鐘線(xiàn)(scl)。由于i2c總線(xiàn)具有接口電路簡(jiǎn)單,可進(jìn)行系統(tǒng)的模塊化、標(biāo)準(zhǔn)化設(shè)計(jì),靈活性強(qiáng),可維護(hù)性好等特性,目前已成為一種重要的串行通信總線(xiàn)。除了philips公司,像 motorola公司,韓國(guó)三星,日本三菱,美國(guó) a/d等許多大公司都陸續(xù)推出了帶有i2c總線(xiàn)標(biāo)準(zhǔn)接口的產(chǎn)品,涉及微處理器(mcu),通用的外圍設(shè)備(eeprom,i/o口,a/d,d/a ,lcd/led顯示器,日歷時(shí)鐘,鍵盤(pán),打印機(jī)接口等等)和家電、音像產(chǎn)品。i2c總線(xiàn)的應(yīng)用日益廣泛,i2c總線(xiàn)器件的接口電路設(shè)計(jì)也顯得十分重要。

本文引用地址:http://butianyuan.cn/article/201612/329454.htm

  2 i2c總線(xiàn)簡(jiǎn)介[1]

  自從philips推出i2c總線(xiàn)標(biāo)準(zhǔn)以來(lái),經(jīng)歷了3個(gè)版本:version 1.0-1992,version2.0-1998和version 2.1-2000。這使得i2c總線(xiàn)標(biāo)準(zhǔn)不斷完善,應(yīng)用范圍日益廣泛。i2c總線(xiàn)標(biāo)準(zhǔn)規(guī)定有如下3種工作模式:

  (1) standard-mode(標(biāo)準(zhǔn)模式):線(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í)際電路中的具體工作模式主要取決于系統(tǒng)中i2c器件接口的電氣特性。

  i2c總線(xiàn)技術(shù)采用器件地址的硬件設(shè)置方法,通過(guò)軟件尋址完全避免了器件片選線(xiàn)尋址的方法,從而使得硬件系統(tǒng)具有最簡(jiǎn)單而靈活的擴(kuò)展方法。隨著i2c技術(shù)的廣泛應(yīng)用,傳統(tǒng)的7位從器件地址(slaver addresses)已經(jīng)無(wú)法滿(mǎn)足實(shí)際需要,在改進(jìn)的i2c總線(xiàn)標(biāo)準(zhǔn)中增加了10位從地址尋址技術(shù),這樣可以把從器件地址由原來(lái)的100多個(gè)擴(kuò)充為 1024個(gè),為i2c總線(xiàn)技術(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àn)協(xié)議要求[1,2]

  i2c總線(xiàn)協(xié)議有嚴(yán)格的時(shí)序要求。總線(xiàn)工作時(shí),由時(shí)鐘控制線(xiàn)scl傳送時(shí)鐘脈沖,由串行數(shù)據(jù)線(xiàn)sda傳送數(shù)據(jù)??偩€(xiàn)傳送的每幀數(shù)據(jù)均為1個(gè)字節(jié) (8bit),但啟動(dòng)i2c總線(xiàn)后,傳送的字節(jié)個(gè)數(shù)沒(méi)有限制,只要求每傳送1個(gè)字節(jié)后,對(duì)方回應(yīng)1個(gè)應(yīng)答位(acknowledge bit)。在發(fā)送時(shí),首先發(fā)送的是數(shù)據(jù)的最高位(msb)。協(xié)議規(guī)定,啟動(dòng)總線(xiàn)后的第1個(gè)字節(jié)的高7位是從器件的尋址地址(硬件地址),第8位為方向位 (“0”表示主器件對(duì)從器件的寫(xiě)操作;“1”表示主器件對(duì)從器件的讀操作),其余的字節(jié)為操作的數(shù)據(jù)??偩€(xiàn)每次傳送開(kāi)始時(shí)有起始信號(hào),結(jié)束時(shí)有停止信號(hào)。在總線(xiàn)傳送完1個(gè)或幾個(gè)字節(jié)后,可以控制scl線(xiàn)的電平變低,從而使傳送暫停。

  圖1列出了i2c總線(xiàn)上典型的幾個(gè)信號(hào)時(shí)序,圖2表示了i2c總線(xiàn)上1次完整的數(shù)據(jù)傳送過(guò)程。

  

  在i2c總線(xiàn)系統(tǒng)中,信號(hào)傳輸?shù)木唧w時(shí)序描述如下:

  (1) 起始信號(hào)(s):在時(shí)鐘scl為高電平期間,數(shù)據(jù)線(xiàn)sda出現(xiàn)由高電平向低電平的變化,啟動(dòng)i2c總線(xiàn);

  (2) 停止信號(hào)(p):在時(shí)鐘scl為高電平期間,數(shù)據(jù)線(xiàn)sda出現(xiàn)由低電平向高電平的變化,停止i2c總線(xiàn)上的數(shù)據(jù)傳送;

  (3) 應(yīng)答信號(hào)(a):i2c總線(xiàn)的第9個(gè)脈沖對(duì)應(yīng)應(yīng)答,對(duì)應(yīng)sda線(xiàn)上顯示低電平時(shí)為“應(yīng)答”信號(hào)(a),sda線(xiàn)上顯示高電平時(shí)為“非應(yīng)答”信號(hào)(/a);

  (4) 數(shù)據(jù)位傳送:i2c總線(xiàn)開(kāi)始信號(hào)或應(yīng)答信號(hào)之后的第1~8個(gè)時(shí)鐘脈沖對(duì)應(yīng)一個(gè)字節(jié)的8位數(shù)據(jù)傳送。在脈沖高電平期間,數(shù)據(jù)串行傳送;在脈沖低電平期間,數(shù)據(jù)準(zhǔn)備,允許總線(xiàn)上數(shù)據(jù)電平變化。

  4 i2c總線(xiàn)的接口擴(kuò)展技術(shù)

  i2c總線(xiàn)軟硬件協(xié)議十分巧妙,它可以用于構(gòu)成多主系統(tǒng)。系統(tǒng)中有多個(gè)i2c總線(xiàn)接口單片機(jī)時(shí),會(huì)出現(xiàn)多主競(jìng)爭(zhēng)的復(fù)雜狀態(tài)。i2c總線(xiàn)軟硬件協(xié)議,以及 i2c總線(xiàn)單片機(jī)中的sfr寄存器保證了多主競(jìng)爭(zhēng)時(shí)的協(xié)調(diào)管理。i2c總線(xiàn)提供的狀態(tài)處理軟件包能自動(dòng)處理總線(xiàn)上出現(xiàn)的26種狀態(tài)。在使用i2c總線(xiàn)時(shí),將這些軟件在程序存儲(chǔ)器中定位,利用這些軟件編制出歸一化的操作命令,設(shè)計(jì)起來(lái)十分簡(jiǎn)單,方便。對(duì)沒(méi)有i2c總線(xiàn)接口的單片機(jī),要構(gòu)成多主系統(tǒng),幾乎不可能。因此,在多主的i2c總線(xiàn)系統(tǒng)中,一定要使用帶i2c總線(xiàn)接口的單片機(jī)[7]。

  在單主方式的i2c總線(xiàn)系統(tǒng)中,總線(xiàn)上只有一個(gè)主器件,其余都是帶有i2c總線(xiàn)的外圍器件。由于總線(xiàn)上只有一個(gè)主器件成為主節(jié)點(diǎn),該主器件永遠(yuǎn)占據(jù)總線(xiàn),不會(huì)出現(xiàn)總線(xiàn)競(jìng)爭(zhēng),主節(jié)點(diǎn)也不必有自己的節(jié)點(diǎn)地址。在單主系統(tǒng)中,主器件可以是沒(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基于單片機(jī)系統(tǒng)的i2c總線(xiàn)接口技術(shù)[2,3]

  i2c總線(xiàn)技術(shù)最早是基于單片機(jī)系統(tǒng)提出的,現(xiàn)在越來(lái)越多的單片機(jī)帶有i2c總線(xiàn)接口,可以直接應(yīng)用。但是更多的單片機(jī)系統(tǒng)并沒(méi)有i2c總線(xiàn)接口,要在 i2c總線(xiàn)系統(tǒng)中應(yīng)用,必須進(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í)現(xiàn)了操作的“傻瓜化”,極大的方便了用戶(hù),擴(kuò)展了單片機(jī)的應(yīng)用領(lǐng)域,推動(dòng)了i2c總線(xiàn)技術(shù)的發(fā)展。

  該軟件包適用于80c51系列單主系統(tǒng)中i2c總線(xiàn)外圍器件擴(kuò)展的應(yīng)用程序設(shè)計(jì)。由于軟件中的時(shí)序模擬基于6mhz時(shí)鐘設(shè)計(jì),故在實(shí)際應(yīng)用中可以根據(jù)具體的系統(tǒng)時(shí)鐘來(lái)適當(dāng)修改時(shí)序模擬子程序中的空操作指令,便可以直接應(yīng)用。

  該軟件包包含以下3部分共9個(gè)子程序:

  (1) 模擬i2c總線(xiàn)操作的典型時(shí)序:起始位(star)、停止位(stop)、發(fā)送應(yīng)答位(mack)、發(fā)送非應(yīng)答位(mnack) 。

  (2) 模擬i2c數(shù)據(jù)傳送過(guò)程:應(yīng)答位檢查(cack)、發(fā)送1個(gè)字節(jié)數(shù)據(jù)(wrbyt)、接收1個(gè)字節(jié)數(shù)據(jù)(rdbyt)。

  (3) 模擬外圍器件讀寫(xiě)操作:i2c總線(xiàn)讀操作過(guò)程(rdnbyt)(接收n個(gè)字節(jié)),i2c總線(xiàn)寫(xiě)操作過(guò)程(wrnbyt)(發(fā)送n個(gè)字節(jié))。

  不論總線(xiàn)上擴(kuò)展什么外圍設(shè)備,都統(tǒng)一采用以下3條指令作為viic軟件包與用戶(hù)的操作接口界面,即:

  mov sla,#slar/slaw;總線(xiàn)上節(jié)點(diǎn)尋址并確定傳送方向

  mov numbyt,#n;確定傳送字節(jié)數(shù)n

  lcall rdnbyt/wrnbyt;讀/寫(xiě)操作調(diào)用

  文獻(xiàn)中對(duì)該虛擬軟件包有詳細(xì)的介紹,包括源程序和使用說(shuō)明,并給出了應(yīng)用實(shí)例。

  對(duì)應(yīng)該軟件包,文獻(xiàn)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); ――單主系統(tǒng)的主接收方式

  wrnbyt(uchar slaw,uchar ff[],uchar number); ――單主系統(tǒng)的主發(fā)送方式

  其中:

  slar/slaw是從器件的地址 (讀/寫(xiě));

  number是需要讀寫(xiě)的數(shù)據(jù)字節(jié)的個(gè)數(shù);

  qq[]是從虛擬i2c總線(xiàn)上讀出的數(shù)據(jù)數(shù)組;

  ff[]是需要向虛擬i2c總線(xiàn)上寫(xiě)入的數(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)用,操作簡(jiǎn)單方便。

  4. 2 基于dsp系統(tǒng)的i2c總線(xiàn)接口的擴(kuò)展

  如前文所述,i2c總線(xiàn)技術(shù)在以單片機(jī)為mcu的系統(tǒng)中應(yīng)用最廣泛,設(shè)計(jì)也最靈活簡(jiǎn)單。但在許多的系統(tǒng)中,采用dsp(數(shù)字信號(hào)處理器)作為mcu。若系統(tǒng)中含有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)行模擬。仿照文獻(xiàn)3,4中的設(shè)計(jì)思路,文獻(xiàn)5給出了基于tms320c2xx系列dsp的虛擬i2c總線(xiàn)軟件包的設(shè)計(jì)和應(yīng)用,極大的方便了以dsp 為mcu的i2c系統(tǒng)。

  該軟件包含有2個(gè)宏定義和12個(gè)子函數(shù),適用于單主系統(tǒng)的主發(fā)送和主接收方式,支持tms320c2xx系列對(duì)i2c總線(xiàn)外圍器件n字節(jié)的讀寫(xiě)操作,通信方式為對(duì)虛擬節(jié)點(diǎn)尋址后點(diǎn)對(duì)點(diǎn)的讀寫(xiě)。該軟件包采用4根通用i/o口線(xiàn)(i/o0~i/o3)的任意2根模擬sda和scl,他們的輸入輸出方向由 aspcr的低4位設(shè)定,相應(yīng)口線(xiàn)狀態(tài)的設(shè)定或讀取由iosr寄存器控制。由于c2xx系列的dsp結(jié)構(gòu)與單片機(jī)有很大的不同,口線(xiàn)的輸入輸出狀態(tài)不是自動(dòng)切換的,且aspcr 、iosr寄存器都不支持位尋址方式,所以該軟件包與前文基于單片機(jī)的軟件包viic1.0/viicc1.0有所不同。對(duì)用戶(hù)而言,可不必了解軟件細(xì)節(jié),只要正確設(shè)置相應(yīng)存儲(chǔ)單元的內(nèi)容,調(diào)用相應(yīng)的子函數(shù)就可以應(yīng)用,用戶(hù)接口同樣簡(jiǎn)單易用。

  另外,文獻(xiàn)[6]給出了tms320vc5402實(shí)現(xiàn)i2c總線(xiàn)接口的2種設(shè)計(jì)思路。一是利用該型號(hào)dsp的多信道緩沖串口(mcbsp):通過(guò)設(shè)置 mcbsp的spcr1、spcr2和pcr 相應(yīng)位,可以將mcbsp的clkr、fsr、clkx、fsx腳設(shè)置為通用i/o腳,然后按照i2c總線(xiàn)協(xié)議進(jìn)行軟件編程,就可以實(shí)現(xiàn)與i2c總線(xiàn)的接口;二是利用vc5402 的主機(jī)接口(hpi):通過(guò)設(shè)置hpi控制寄存器(hpic)、通用目的i/o狀態(tài)寄存器(gpiosr)和通用目的i/o控制寄存器(gpiocr)相應(yīng)位,就可以將8位的數(shù)據(jù)總線(xiàn)(hd0~hd7)轉(zhuǎn)變成通用i/o口,然后進(jìn)行編程,同樣可以實(shí)現(xiàn)與i2c總線(xiàn)的接口。文獻(xiàn)中給出了較詳細(xì)的設(shè)計(jì)思路和部分程序代碼。



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉