基于多通道緩沖串口的虛擬I2C總線(xiàn)
電子設計應用2004年第9期
本文引用地址:http://dyxdggzs.com/article/3590.htm摘 要:本文提出一種用多通道緩沖串口(McBSP)完成I2C總線(xiàn)的虛擬方法,該方法簡(jiǎn)單可行、硬件成本低,并給出了該方法在智能交通控制系統(ITS)中的應用。
關(guān)鍵詞:I2C;McBSP;ITS
引言
很多器件都具有I2C總線(xiàn),如串行EPROM、ADC等。另外,也已有很多外圍器件支持與I2C總線(xiàn)的接口,但不直接支持I2C總線(xiàn),如多數MCU、DSP等,因而采用I/O口線(xiàn)虛擬I2C的方式成為一種通用解決方案。但大多數DSP器件直接支持的I/O口線(xiàn)較少,不能進(jìn)行直接的位操作,所以如何用DSP進(jìn)行I2C總線(xiàn)的虛擬是本文所要討論的問(wèn)題。通過(guò)使用高端DSP器件中都具有的McBSP成功地進(jìn)行了虛擬I2C總線(xiàn)的實(shí)現,并在一個(gè)ITS系統的控制模塊中得到應用。
I2C總線(xiàn)的數據傳送規范
I2C總線(xiàn)由串行數據線(xiàn)(SDA)和串行時(shí)鐘線(xiàn)(SCL)組成。通信時(shí),所有具備I2C總線(xiàn)接口的器件都連接到這兩根線(xiàn)上,而且既可以發(fā)送數據也可以接收數據,但任意時(shí)刻只能有一個(gè)主控器件進(jìn)行I2C總線(xiàn)的控制,其他器件都為被控器件,它們分時(shí)占用總線(xiàn)。
I2C總線(xiàn)的數據傳送由主器件控制。首先由主器件發(fā)出開(kāi)始信號S,表示開(kāi)始啟動(dòng)數據傳輸。當SCL為高電平時(shí),如果出現SDA的電平由高變低則視為S信號,然后主器件發(fā)送從器件的7位地址和讀寫(xiě)位R/W,接著(zhù)主器件將接收從器件的應答信號,如果收到正確的ACK,則進(jìn)行數據的傳送。數據傳送的方向由讀寫(xiě)位R/W的值確定 ,而且數據傳送為8位,高位在前,低位在后。不管是發(fā)送數據還是接收數據,在傳送完8位數據后,必須由接收數據的器件在SDA上發(fā)一個(gè)應答信號。最后當全部數據傳送完后,由主器件產(chǎn)生停止信號P,表示總線(xiàn)傳送結束。SCL線(xiàn)為高,SDA線(xiàn)由低電平變高電平時(shí),視為停止信號P。由上可知,I2C總線(xiàn)數據傳輸采用了應答式的工作方式:即發(fā)送方發(fā)送數據后由接收方發(fā)送是否正確接收的應答信號,發(fā)送方以此作為是否繼續進(jìn)行數據傳送的判斷依據。
圖1 主器件數據發(fā)送流程
用McBSP虛擬I2C總線(xiàn)的實(shí)現
從前面的分析可以看出,I2C總線(xiàn)的數據傳輸主要是由主控器件控制,在SCL的控制下,按位傳送數據,也就是說(shuō),要想完成對I2C總線(xiàn)的虛擬主要是完成主控器件I2C的實(shí)現。下面討論將TMS320C5410(以下簡(jiǎn)稱(chēng)5410)器件的McBSP配置為通用I/O口來(lái)虛擬I2C總線(xiàn)的實(shí)現方法。
McBSP配置為通用I/O口
作為主器件的I2C總線(xiàn)的兩條信號線(xiàn)中,SCL總是作為輸出,SDA根據需要配置成雙向的I/O口,考慮到虛擬總線(xiàn)的數據線(xiàn)方向,本文用McBSP的FSX和CLKX兩個(gè)信號線(xiàn)分別來(lái)虛擬I2C的SCL和SDA,其中FSX由于要作為SCL輸出引腳,配置為GPO,CLKX模擬SDA信號線(xiàn),由于SDA信號線(xiàn)為雙向數據線(xiàn),所以將CLKX配置為GPIO。McBSP配置為通用I/O口,主要涉及到McBSP的控制寄存器SPCR1、SPCR2和引腳控制寄存器PCR的設置。 PCR控制寄存器主要涉及到通用I/O口的方向控制,輸入/輸出的讀寫(xiě)等,其中所涉及到的控制位如下:CLKXM、FSXM控制CLKX和FSX的通用I/O口的方向。由于FSX總是作為輸出,所以FSXM=1;CLKX的方向設置,當作為虛擬SDA的輸出時(shí),CLKXM=1,反之CLKXM=0;CLKXP、FSXP控制通用I/O的輸入/輸出電平值,當要往輸出I/O口送值時(shí),它們作為輸出位寄存器,直接將要輸出的電平值寫(xiě)入對應的位中。當作為輸入I/O時(shí),CLXP和FSXP里的值就反映了輸入引腳當前的電平狀態(tài)。
圖2 啟動(dòng)信號S的時(shí)序要求
圖3 虛擬I2C總線(xiàn)應用實(shí)例圖
McBSP虛擬I2C總線(xiàn)的軟件模塊實(shí)現
首先將McBSP配置為通用I/O口使用,必須禁用其緩沖串口的功能、開(kāi)啟通用I/O使能,所以將SPCR2控制寄存器中的XRST置0,將PCR控制寄存器中的XIOEN置1。
要實(shí)現I2C總線(xiàn)的數據傳輸,以主器件向從器件發(fā)送N字節數據為例,其通信流程如圖1所示, 一般需要包括以下幾個(gè)子程序模塊:
a. 啟動(dòng)位S和停止位P的發(fā)送
b. 從器件應答位ACK的判斷
c. 字節數據(或地址)的發(fā)送
下面給出啟動(dòng)位S發(fā)送子模塊的部分程序源碼,其它子程序模塊可以參照此程序修改。
啟動(dòng)位S發(fā)送子程序:
STM MCBSP_PCR_SUB_ ADDR,MCBSP0_SPSA
; 選擇PCR寄存器
LD #2a00h,A
STLM A,MCBSP0_SPSD
; 設置CLKX為輸出口
CALL XDELAY
LD #2a00h,A
ST #0002H,*AR3
OR *AR3,A
STLM A,MCBSP0_SPSD
; 置PCR中的CLKP位為1,引腳CLKX-SDA為高電平
ST #0008H,*AR3
LD #2a00h,A
OR *AR3,A
STLM A,MCBSP0_SPSD
; 置PCR中的FSXP位為1,引腳FSX-SCLK為高電平
call delay_prg1
;延時(shí)子程序delay_prg1
ST #0FFFDH,*AR3
AND *AR3,A
STLM A,MCBSP0_SPSD
; 置PCR中的CLKP位為0,引腳CLKX-SDA為低電平
call delay_prg2
;延時(shí)子程序delay_prg2
ST #0FFF7H,*AR3
AND *AR3,A
STLM A,MCBSP0_SPSD
; 置PCR中的FSXP位為1,引腳FSX-SCLK為高電平
RET
需要注意的是,I2C總線(xiàn)協(xié)議對信號的時(shí)序要求有嚴格的規定,如對啟動(dòng)信號S的時(shí)序要求如圖2所示。即要求SDA信號在由高電平向低電平跳變時(shí)保持高電平時(shí)間至少為4.7ms,SCL信號在SDA信號由高電平向低電平跳變后必須保持高電平時(shí)間至少為4.0ms。啟動(dòng)位S發(fā)送子模塊的源代碼中的延時(shí)子程序delay_prg1、delay_prg2就是為了滿(mǎn)足對啟動(dòng)位S的時(shí)序要求。假設DSP器件的內部時(shí)鐘頻率為100MHz,則其單指令周期為0.01ms,就可以根據延時(shí)時(shí)序參數的要求計算出所需要的指令周期數。顯然子程序delay_prg1至少需要470個(gè)指令周期,delay_prg2則至少需要400個(gè)指令周期。
應用實(shí)例
在智能交通控制系統中用5410的0號緩沖串口實(shí)現了虛擬I2C總線(xiàn),系統的硬件原理如圖3所示。系統由設置在某交通路口的攝像機提供交通視頻信號,由PHILIPS專(zhuān)用視頻采集芯片SAA7111完成圖像的實(shí)時(shí)采集,然后將8bit的圖像數據送至SRAM中緩存,并由DSP器件完成圖像處理算法,提取出相應的交通參數。SAA7111完成圖像采集首先必需通過(guò)I2C總線(xiàn)接口進(jìn)行器件內部一些控制寄存器的初始化設置,由于5410器件沒(méi)有專(zhuān)用的I2C總線(xiàn)接口,所以采用5410的McBSP0的FSX和CLKX引腳分別來(lái)虛擬I2C的SCL和SDA,實(shí)現了對SAA7111的初始化配置。
SAA7111控制寄存器初始化配置的過(guò)程就是DSP主器件向SAA7111從器件中的控制寄存器寫(xiě)配置數據的過(guò)程。SAA7111中涉及到的控制寄存器由00h~1Fh的寄存器基地址尋址,主器件發(fā)送配置數據的過(guò)程如表1所示。
采用這種方式對00h~1Fh的寄存器尋址時(shí),必須向SAA7111分別傳送這些地址字節,這個(gè)過(guò)程是非常繁瑣的。I2C總線(xiàn)接口的外圍器件中,如出現這種器件內部需要尋址多個(gè)地址空間時(shí),總線(xiàn)數據的讀寫(xiě)操作具有地址自動(dòng)加一的功能,這樣就簡(jiǎn)化了I2C總線(xiàn)的外部尋址,這種尋址方式下的主器件控制數據寫(xiě)流程如表2所示。
結語(yǔ)
本文采用DSP的McBSP來(lái)虛擬I2C總線(xiàn)接口,先將McBSP配置為通用I/O口,再對這些通用I/O口進(jìn)行I2C總線(xiàn)數據傳輸的位操作,解決了DSP器件無(wú)法方便地進(jìn)行位操作的問(wèn)題,硬件接口簡(jiǎn)單,調試方便,并且可以節省硬件的花費,此方法已經(jīng)應用于ITS系統中,方法可行,并運行可靠,為相關(guān)問(wèn)題的解決作出了成功的嘗試?!?/p>
參考文獻
1 The I2C-Bus Specification, Philips Semiconductors, Version 2.1 January 2000
2 何立民, 周立功. I2C總線(xiàn)的串行擴充技術(shù). 周立功單片機,2000,9
3 戴明楨,周建江. TMS32C54X DSP結構原理及應用. 北京航空航天出版社,2001,11
4 TMS320C54X DSP Reference Set Volume5: Enhanced Peripherals, Texas Instruments, SPRU302:June 1999
評論