新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于多通道緩沖串口的虛擬I2C總線

        基于多通道緩沖串口的虛擬I2C總線

        作者:■ 重慶大學通信工程學院 張玲 唐仁圣 何偉 時間:2004-10-22 來源:電子設計應用2004年第9期 收藏

        電子設計應用2004年第9期

        本文引用地址:http://www.104case.com/article/3590.htm

        摘    要:本文提出一種用多通道緩沖串口()完成總線的虛擬方法,該方法簡單可行、硬件成本低,并給出了該方法在智能交通控制系統()中的應用。
        關鍵詞:;

        引言
        很多器件都具有總線,如串行EPROM、ADC等。另外,也已有很多外圍器件支持與I2C總線的接口,但不直接支持I2C總線,如多數MCU、DSP等,因而采用I/O口線虛擬I2C的方式成為一種通用解決方案。但大多數DSP器件直接支持的I/O口線較少,不能進行直接的位操作,所以如何用DSP進行I2C總線的虛擬是本文所要討論的問題。通過使用高端DSP器件中都具有的成功地進行了虛擬I2C總線的實現,并在一個系統的控制模塊中得到應用。

        I2C總線的數據傳送規范
        I2C總線由串行數據線(SDA)和串行時鐘線(SCL)組成。通信時,所有具備I2C總線接口的器件都連接到這兩根線上,而且既可以發送數據也可以接收數據,但任意時刻只能有一個主控器件進行I2C總線的控制,其他器件都為被控器件,它們分時占用總線。
        I2C總線的數據傳送由主器件控制。首先由主器件發出開始信號S,表示開始啟動數據傳輸。當SCL為高電平時,如果出現SDA的電平由高變低則視為S信號,然后主器件發送從器件的7位地址和讀寫位R/W,接著主器件將接收從器件的應答信號,如果收到正確的ACK,則進行數據的傳送。數據傳送的方向由讀寫位R/W的值確定 ,而且數據傳送為8位,高位在前,低位在后。不管是發送數據還是接收數據,在傳送完8位數據后,必須由接收數據的器件在SDA上發一個應答信號。最后當全部數據傳送完后,由主器件產生停止信號P,表示總線傳送結束。SCL線為高,SDA線由低電平變高電平時,視為停止信號P。由上可知,I2C總線數據傳輸采用了應答式的工作方式:即發送方發送數據后由接收方發送是否正確接收的應答信號,發送方以此作為是否繼續進行數據傳送的判斷依據。

        圖1 主器件數據發送流程

        用McBSP虛擬I2C總線的實現
        從前面的分析可以看出,I2C總線的數據傳輸主要是由主控器件控制,在SCL的控制下,按位傳送數據,也就是說,要想完成對I2C總線的虛擬主要是完成主控器件I2C的實現。下面討論將TMS320C5410(以下簡稱5410)器件的McBSP配置為通用I/O口來虛擬I2C總線的實現方法。
        McBSP配置為通用I/O口
        作為主器件的I2C總線的兩條信號線中,SCL總是作為輸出,SDA根據需要配置成雙向的I/O口,考慮到虛擬總線的數據線方向,本文用McBSP的FSX和CLKX兩個信號線分別來虛擬I2C的SCL和SDA,其中FSX由于要作為SCL輸出引腳,配置為GPO,CLKX模擬SDA信號線,由于SDA信號線為雙向數據線,所以將CLKX配置為GPIO。McBSP配置為通用I/O口,主要涉及到McBSP的控制寄存器SPCR1、SPCR2和引腳控制寄存器PCR的設置。 PCR控制寄存器主要涉及到通用I/O口的方向控制,輸入/輸出的讀寫等,其中所涉及到的控制位如下:CLKXM、FSXM控制CLKX和FSX的通用I/O口的方向。由于FSX總是作為輸出,所以FSXM=1;CLKX的方向設置,當作為虛擬SDA的輸出時,CLKXM=1,反之CLKXM=0;CLKXP、FSXP控制通用I/O的輸入/輸出電平值,當要往輸出I/O口送值時,它們作為輸出位寄存器,直接將要輸出的電平值寫入對應的位中。當作為輸入I/O時,CLXP和FSXP里的值就反映了輸入引腳當前的電平狀態。

        圖2 啟動信號S的時序要求

        圖3  虛擬I2C總線應用實例圖


        McBSP虛擬I2C總線的軟件模塊實現
        首先將McBSP配置為通用I/O口使用,必須禁用其緩沖串口的功能、開啟通用I/O使能,所以將SPCR2控制寄存器中的XRST置0,將PCR控制寄存器中的XIOEN置1。
        要實現I2C總線的數據傳輸,以主器件向從器件發送N字節數據為例,其通信流程如圖1所示, 一般需要包括以下幾個子程序模塊:
        a. 啟動位S和停止位P的發送
        b. 從器件應答位ACK的判斷
        c. 字節數據(或地址)的發送
        下面給出啟動位S發送子模塊的部分程序源碼,其它子程序模塊可以參照此程序修改。
        啟動位S發送子程序:
        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       
        ;延時子程序delay_prg1
                 ST #0FFFDH,*AR3
                 AND *AR3,A
                 STLM A,MCBSP0_SPSD
        ; 置PCR中的CLKP位為0,引腳CLKX-SDA為低電平
                 call delay_prg2       
        ;延時子程序delay_prg2
                 ST #0FFF7H,*AR3
                 AND *AR3,A           
                 STLM A,MCBSP0_SPSD    
        ; 置PCR中的FSXP位為1,引腳FSX-SCLK為高電平
                 RET
        需要注意的是,I2C總線協議對信號的時序要求有嚴格的規定,如對啟動信號S的時序要求如圖2所示。即要求SDA信號在由高電平向低電平跳變時保持高電平時間至少為4.7ms,SCL信號在SDA信號由高電平向低電平跳變后必須保持高電平時間至少為4.0ms。啟動位S發送子模塊的源代碼中的延時子程序delay_prg1、delay_prg2就是為了滿足對啟動位S的時序要求。假設DSP器件的內部時鐘頻率為100MHz,則其單指令周期為0.01ms,就可以根據延時時序參數的要求計算出所需要的指令周期數。顯然子程序delay_prg1至少需要470個指令周期,delay_prg2則至少需要400個指令周期。

        應用實例
        在智能交通控制系統中用5410的0號緩沖串口實現了虛擬I2C總線,系統的硬件原理如圖3所示。系統由設置在某交通路口的攝像機提供交通視頻信號,由PHILIPS專用視頻采集芯片SAA7111完成圖像的實時采集,然后將8bit的圖像數據送至SRAM中緩存,并由DSP器件完成圖像處理算法,提取出相應的交通參數。SAA7111完成圖像采集首先必需通過I2C總線接口進行器件內部一些控制寄存器的初始化設置,由于5410器件沒有專用的I2C總線接口,所以采用5410的McBSP0的FSX和CLKX引腳分別來虛擬I2C的SCL和SDA,實現了對SAA7111的初始化配置。
        SAA7111控制寄存器初始化配置的過程就是DSP主器件向SAA7111從器件中的控制寄存器寫配置數據的過程。SAA7111中涉及到的控制寄存器由00h~1Fh的寄存器基地址尋址,主器件發送配置數據的過程如表1所示。
        采用這種方式對00h~1Fh的寄存器尋址時,必須向SAA7111分別傳送這些地址字節,這個過程是非常繁瑣的。I2C總線接口的外圍器件中,如出現這種器件內部需要尋址多個地址空間時,總線數據的讀寫操作具有地址自動加一的功能,這樣就簡化了I2C總線的外部尋址,這種尋址方式下的主器件控制數據寫流程如表2所示。
          
        結語
        本文采用DSP的McBSP來虛擬I2C總線接口,先將McBSP配置為通用I/O口,再對這些通用I/O口進行I2C總線數據傳輸的位操作,解決了DSP器件無法方便地進行位操作的問題,硬件接口簡單,調試方便,并且可以節省硬件的花費,此方法已經應用于ITS系統中,方法可行,并運行可靠,為相關問題的解決作出了成功的嘗試。■

        參考文獻
        1 The I2C-Bus Specification, Philips Semiconductors, Version 2.1 January 2000
        2 何立民, 周立功. I2C總線的串行擴充技術. 周立功單片機,2000,9
        3 戴明楨,周建江. TMS32C54X DSP結構原理及應用. 北京航空航天出版社,2001,11
        4 TMS320C54X DSP Reference Set Volume5: Enhanced Peripherals, Texas Instruments, SPRU302:June 1999



        關鍵詞: I2C ITS McBSP

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安多县| 泸西县| 临猗县| 乌苏市| 辽中县| 中西区| 拉萨市| 济南市| 高台县| 郎溪县| 青岛市| 大足县| 阿拉善右旗| 定州市| 太湖县| 舞钢市| 巴里| 虎林市| 招远市| 边坝县| 资中县| 安吉县| 通州区| 通道| 剑阁县| 塘沽区| 衡东县| 曲水县| 滁州市| 齐齐哈尔市| 彭水| 花莲市| 凌云县| 建平县| 宜良县| 丰宁| 福鼎市| 大邑县| 社会| 乌拉特前旗| 定兴县|