- 相關(guān)推薦
基于I2C總線的多MCU系統(tǒng)設(shè)計(jì)發(fā)展論文
摘 要: 在一些應(yīng)用系統(tǒng)中常常使用多片MCU協(xié)同實(shí)現(xiàn)系統(tǒng)功能,為實(shí)現(xiàn)多片MCU之間的數(shù)據(jù)交換,可以應(yīng)用多端口RAM,但其結(jié)構(gòu)復(fù)雜,成本高;而利用I2C總線使多片MCU之間通過RAM實(shí)現(xiàn)數(shù)據(jù)交換,具有結(jié)構(gòu)簡單、成本低的優(yōu)點(diǎn)。介紹一種基于I2C總線的多MCU系統(tǒng)的設(shè)計(jì),簡要討論I2C總線的結(jié)構(gòu)、工作原理及多MCU競(jìng)爭仲裁,給出I2C總線的多MCU系統(tǒng)的設(shè)計(jì),實(shí)現(xiàn)了多MCU系統(tǒng)在實(shí)際中的應(yīng)用。
關(guān)鍵詞: I2C總線; 多MCU系統(tǒng); P89LPC932; 數(shù)據(jù)交換
中圖分類號(hào): TN915?04 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)09?0016?03
Abstract: System functions are implemented by multi?MCU collaborative working in some application systems. Although the multi?port RAM can be applied to achieve data exchange among multiple MCUs, its structure is complex and cost is high. Multi?MCU data exchange can be realized by the method to link I2C bus with RAM, which has the advantages of simple structure and low cost. Design of the multi?MCU system based on I2C bus is introduced. The structure, execution principle, multi?MCU competition and arbitration of I2C bus are discussed briefly. The design of multi?MCU system based on I2C bus is given. The application of multi?MCU system in practice was implemented.
Keywords: I2C; multi?MCU system; P89LPC932; data exchange
0 引 言
隨著微電子技術(shù)的發(fā)展和MCU價(jià)格的降低,常常在實(shí)際應(yīng)用中使用多片MCU來協(xié)同完成系統(tǒng)功能,以實(shí)現(xiàn)更高的性能。在這些系統(tǒng)中多片MCU通過某種方式實(shí)現(xiàn)數(shù)據(jù)交換,其中使用雙口或多口E2PROM是一種常見的方法。這種電路結(jié)構(gòu)復(fù)雜、成本高,需要軟、硬件解決多MCU訪問的競(jìng)爭問題,更重要的是目前許多MCU不支持外部總線,不能擴(kuò)展外部E2PROM,因此無法使用這種方法。I2C總線是由Philips公司推出的芯片間串行傳輸總線。它以規(guī)范嚴(yán)謹(jǐn)、使用簡單靈活、支持的外圍器件繁多等特點(diǎn)而被廣泛應(yīng)用。I2C總線具有十分完善的總線協(xié)議,在協(xié)議的支持下,可以自動(dòng)處理總線上出現(xiàn)的多MCU訪問的競(jìng)爭。目前的文獻(xiàn)通常是介紹I2C總線在單MCU系統(tǒng)中的應(yīng)用,本文介紹一種利用I2C總線實(shí)現(xiàn)多片MCU訪問E2PROM,從而實(shí)現(xiàn)數(shù)據(jù)交換的方法。
1 I2C總線工作原理
I2C總線是一種“二線”結(jié)構(gòu),分別使用“SDA”和“SCL”信號(hào)線實(shí)現(xiàn)數(shù)據(jù)傳輸。I2C總線對(duì)與其相連的設(shè)備采用軟件尋址。每一種器件都有一個(gè)特定的7位I2C地址,以便主機(jī)了解當(dāng)前正與其進(jìn)行通信的器件。這個(gè)7位地址的前4位固定,用來指明器件所屬類別,如1010表明是串行E2PROM器件。后3位(如A2,A1和A0)通過硬件管腳進(jìn)行設(shè)置來修改器件的I2C地址。表示地址字節(jié)的最低1位(R/W)用來指明主控制器向從機(jī)發(fā)送(寫,R/W=0)還是接收(讀,R/W=1)來自從機(jī)的數(shù)據(jù)。每個(gè)傳輸過程都是以起始條件開始,停止或重新開始條件結(jié)束。每一次數(shù)據(jù)傳送都是由主控制器發(fā)起的,如果某一時(shí)刻總線上有多個(gè)主控器,并且都請(qǐng)求控制總線,這時(shí)就要進(jìn)行總線仲裁處理。一旦一個(gè)主控器獲得總線控制權(quán),其他主控器必須等待此主控器發(fā)送完一個(gè)停止條件并將總線釋放為“空閑”狀態(tài)方可重新控制總線。在系統(tǒng)中主控制器通常都由MCU擔(dān)任。
2 多MCU系統(tǒng)下的I2C總線
I2C總線軟、硬件協(xié)議十分巧妙,它可以用于構(gòu)成多MCU系統(tǒng)。當(dāng)系統(tǒng)中有多個(gè)I2C總線接口單片機(jī)時(shí),會(huì)出現(xiàn)多MCU競(jìng)爭的復(fù)雜狀態(tài)。I2C總線軟、硬件協(xié)議以及I2C總線單片機(jī)中的SFR保證了多MCU競(jìng)爭時(shí)的協(xié)調(diào)管理。I2C總線提供的狀態(tài)處理軟件能自動(dòng)處理總線上出現(xiàn)的26種狀態(tài)。在使用I2C總線時(shí)將這些軟件工具在程序存儲(chǔ)器中定位,利用這些軟件編制出歸一化操作命令,用于I2C總線應(yīng)用程序設(shè)計(jì)十分簡單、方便。
2.1 多MCU竟?fàn)幹俨?/p>
主機(jī)只能在總線空閑的時(shí)侯啟動(dòng)傳輸。兩個(gè)或多個(gè)主機(jī)可能在起始條件的最小持續(xù)時(shí)間內(nèi)產(chǎn)生一個(gè)起始條件,結(jié)果在總線上產(chǎn)生一個(gè)規(guī)定的起始條件。當(dāng)SCL線是高電平時(shí),仲裁在SDA線發(fā)生;這樣,在其他主機(jī)發(fā)送低電平時(shí),發(fā)送高電平的主機(jī)將斷開它的數(shù)據(jù)輸出級(jí),因?yàn)榭偩上的電平與它自己的電平不相同,仲裁可以持續(xù)多位。它的第一個(gè)階段是比較地址位。如果每個(gè)主機(jī)都嘗試尋址相同的器件,仲裁會(huì)繼續(xù)比較數(shù)據(jù)位(如果是主機(jī)—發(fā)送器),或者比較響應(yīng)位(如果是主機(jī)—接收器)。因?yàn)镮2C總線的地址和數(shù)據(jù)信息由贏得仲裁的主機(jī)決定,在仲裁過程中不會(huì)丟失信息。
2.2 主系統(tǒng)的數(shù)據(jù)傳送過程
考慮以下實(shí)際應(yīng)用,系統(tǒng)中有兩片單片機(jī),MCU A進(jìn)行數(shù)據(jù)采集,并將數(shù)據(jù)存入E2PROM,MCU B不定時(shí)地從E2PROM取出數(shù)據(jù)(如圖1所示)。傳輸數(shù)據(jù)的過程如下:
。1) 假設(shè)MCU A要發(fā)送信息到E2PROM
、 MCU A(主機(jī))尋址接收器E2PROM;
、 MCU A(主機(jī))發(fā)送器發(fā)送數(shù)據(jù)到接收器E2PROM;
③ MCU A終止傳輸。
(2) 如果MCU B想從器件E2PROM中接收信息
、 MCU B(主機(jī))尋址E2PROM(從器件);
、 MCU B(主機(jī))從E2PROM(從器件)讀數(shù)據(jù);
③ MCU B終止傳輸。
。3) 以上兩種情況同時(shí)發(fā)生時(shí),I2C總線起動(dòng)總線的競(jìng)爭仲裁功能
① MCU A或MCU B贏得總線的控制權(quán),掌管總線,競(jìng)爭失敗的微控制器退出總線;
② 贏得總線的控制權(quán)的微控制器尋址E2PROM(從器件),并進(jìn)行數(shù)據(jù)傳輸;
③ 贏得總線的控制權(quán)的微控制器終止數(shù)據(jù)傳輸,競(jìng)爭失敗的微控制器試圖掌控總線,從器件尋址,并進(jìn)行數(shù)據(jù)傳輸;
④ 數(shù)據(jù)傳送完畢,總線進(jìn)入空閑狀態(tài)。
由上可知,在多MCU系統(tǒng)下的數(shù)據(jù)傳送過程要比單主機(jī)系統(tǒng)下復(fù)雜得多。但I(xiàn)2C總線軟、硬件協(xié)議能進(jìn)行協(xié)調(diào)管理,保證數(shù)據(jù)的可靠傳輸。
3 多MCU系統(tǒng)的具體實(shí)現(xiàn)
本應(yīng)用中選用了兩片P89LPC932單片機(jī)及一片24系列的E2PROM。P89LPC932中I/O口P1.3和P1.2為復(fù)用端口,在用作I2C通信時(shí),P1.3為SDA,P1.2為SCL,在程序中應(yīng)該設(shè)置為開漏方式。電路中為I2C總線的上拉電阻,在具體電路中應(yīng)適當(dāng)調(diào)整。選擇上拉電阻要考慮的因素主要為供電電源、總線上的電容 值和連接器件數(shù)。在《I2C總線協(xié)議》中規(guī)定,在供電電壓大于2 V,灌電流為3 mA時(shí),輸出低電平不高于0.4 V。在本電路中供電電壓為(3±0.3) V。,因而上拉電阻的最小值為Ω。上拉電阻的取值不能過大,因?yàn)樯侠娮鑂與總線上的電容值C構(gòu)成的RC電路的時(shí)間常數(shù),影響了總線從高電平到低電平的過渡時(shí)間,因而影響了通信速率。在快速模式中,SDA,SCL信號(hào)從低到高的過渡時(shí)間應(yīng)該不大于300 ns,P89LPC932端口輸出電容為15 pF,因而上拉電阻的最大值為kΩ。在電路中取值為5 kΩ。
由于P89LPC932單片機(jī)中帶有內(nèi)部RC振蕩源,在電路中省略了一般51單片機(jī)所需要的晶振,因而電路比較簡單。其硬件電路如圖2所示。
4 多MCU系統(tǒng)下的軟件設(shè)計(jì)
I2C總線的通信都是由主機(jī)發(fā)起的。具體為主機(jī)發(fā)送起始條件,然后發(fā)送要操作的從機(jī)地址和讀寫命令。在收到從機(jī)應(yīng)答后,進(jìn)行相應(yīng)操作。軟件設(shè)計(jì)主要包括主機(jī)的寄存器的設(shè)置及讀寫子程序的設(shè)計(jì)。
4.1 P89LPC932單片機(jī)I2C寄存器的設(shè)置
LPC932單片機(jī)微功耗51內(nèi)核,內(nèi)部集成了I2C總線,支持400K高速模式,既可作I2C總線上的主控器件,也可作I2C總線上的從器件。LPC900單片機(jī)的I2C總線通過以下6個(gè)特殊功能寄存器實(shí)現(xiàn)接口:I2CON(I2C控制寄存器?0D8H)、I2DAT(數(shù)據(jù)寄存器?0DAH)、I2STAT(狀態(tài)寄存器?0D9H)、I2ADR(地址寄存器?0DBH)、I2SCLH(占空比寄存器高字節(jié)?0DDH)、I2SCLLSCL(占空比寄存器低字節(jié)?0DCH)。
I2C地址寄存器在處于主模式時(shí),該寄存器的內(nèi)容無效。I2C狀態(tài)寄存器是一個(gè)8位只讀寄存器,它包含了I2C接口的狀態(tài)代碼,最低3位總是為0,I2C一共有26種可能的狀態(tài)。
4.2 多MCU系統(tǒng)下的程序設(shè)計(jì)
按照I2C總線的規(guī)范,I2C總線數(shù)據(jù)傳送可分為主發(fā)送、主接收、從發(fā)送、從接收4種方式。在多MCU模式下有主發(fā)送、主接收2種方式。每種方式都有典型的傳送過程,這些數(shù)據(jù)傳送都是由一些狀態(tài)碼標(biāo)記的總線狀態(tài)處理過程組成,因此I2C總線上的一個(gè)完整的數(shù)據(jù)傳送是由多個(gè)I2C中斷狀態(tài)處理程序來完成的。每出現(xiàn)一個(gè)新的狀態(tài),就會(huì)產(chǎn)生一次I2C中斷,然后進(jìn)入該總線的中斷處理程序,處理完畢中斷返回再等待一次新的中斷及狀態(tài)處理直至結(jié)束。注意以下所說的主機(jī)可以是兩片MCU中的任一片,而從機(jī)指的是I2C器件。
I2C總線的數(shù)據(jù)操作過程及總線狀態(tài)處理是在標(biāo)準(zhǔn)軟件包的支持下完成,無須用戶介入,用戶可以通過查詢I2C總線的狀態(tài)寄存器就可了解總線的處理狀態(tài),從而做相應(yīng)的處理。程序設(shè)計(jì)流程圖如圖3所示。
I2C通信程序設(shè)計(jì)要點(diǎn)如下:
(1) 每次通信的起始條件和停止條件均由主機(jī)發(fā)起,從機(jī)只是負(fù)責(zé)監(jiān)聽主機(jī)信號(hào)。起始條件和停止條件是通過置位I2CON中的STA和STO位達(dá)到的。
(2) 當(dāng)主機(jī)獲得總線,成功發(fā)送啟動(dòng)條件后,地址和數(shù)據(jù)的發(fā)送是通過寫數(shù)據(jù)寄存器I2DAT達(dá)到的。
。3) 每次發(fā)送地址和數(shù)據(jù)后應(yīng)該查詢狀態(tài)寄存器I2STAT檢查數(shù)據(jù)發(fā)送狀態(tài)以進(jìn)行下一步動(dòng)作。
(4) 每次通信完畢后主機(jī)和從機(jī)均應(yīng)該釋放總線。
程序設(shè)計(jì)過程中值得注意的是:讀寫過程中從器件的地址是變化的,寫過程中E2PROM的地址是0A0H,讀過程中E2PROM的地址是0A1H。
5 結(jié) 語
本應(yīng)用以兩片MCU通過I2C總線共享一個(gè)存儲(chǔ)器,實(shí)現(xiàn)了I2C總線多MCU機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì),電路設(shè)計(jì)簡單,易于擴(kuò)展,具有較強(qiáng)的實(shí)用性。雖然本文是以MCS51內(nèi)核單片機(jī)LPC932為例實(shí)現(xiàn)的,并且系統(tǒng)中僅兩片MCU,但實(shí)際上任何帶有I2C總線接口的多片MCU都可使用該方法。
參考文獻(xiàn)
張洪剛,苑秉成,徐瑜,等.基于FPGA和SD卡的水聲信號(hào)高速采集與存儲(chǔ)系統(tǒng)設(shè)計(jì).電子器件,2009,32(1):208?212.
肖堃,閆杰,靳文平.基于TMS320F28335的無人機(jī)機(jī)載智能接口卡設(shè)計(jì).機(jī)械制造,2013,51(590):17?20.
【基于I2C總線的多MCU系統(tǒng)設(shè)計(jì)發(fā)展論文】相關(guān)文章:
基于數(shù)據(jù)挖掘的高校教務(wù)系統(tǒng)設(shè)計(jì)論文09-02
基于RFID物品防盜系統(tǒng)的設(shè)計(jì)方式論文09-02
基于RFID物品防盜系統(tǒng)的設(shè)計(jì)方式的論文09-01
基于系統(tǒng)設(shè)計(jì)的科研管理論文09-22
基于Internet的風(fēng)機(jī)網(wǎng)上選型系統(tǒng)的設(shè)計(jì)論文09-02
基于XML技術(shù)的自動(dòng)閱卷系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)論文09-01
基于STM32的μCOSⅢ系統(tǒng)移植的設(shè)計(jì)論文09-24
多車型翻車機(jī)系統(tǒng)優(yōu)化設(shè)計(jì)論文09-03
基于MVC模式的網(wǎng)上書城系統(tǒng)的設(shè)計(jì)系統(tǒng)建設(shè)論文09-01