- 相關(guān)推薦
淺談基于I2C總線(xiàn)的多MCU系統設計發(fā)展論文
引 言
隨著(zhù)微電子技術(shù)的發(fā)展和MCU價(jià)格的降低,常常在實(shí)際應用中使用多片MCU來(lái)協(xié)同完成系統功能,以實(shí)現更高的性能。在這些系統中多片MCU通過(guò)某種方式實(shí)現數據交換,其中使用雙口或多口E2PROM是一種常見(jiàn)的方法[1?2]。這種電路結構復雜、成本高,需要軟、硬件解決多MCU訪(fǎng)問(wèn)的競爭問(wèn)題,更重要的是目前許多MCU不支持外部總線(xiàn),不能擴展外部E2PROM,因此無(wú)法使用這種方法。I2C總線(xiàn)是由Philips公司推出的芯片間串行傳輸總線(xiàn)。它以規范嚴謹、使用簡(jiǎn)單靈活、支持的外圍器件繁多等特點(diǎn)而被廣泛應用。I2C總線(xiàn)具有十分完善的總線(xiàn)協(xié)議,在協(xié)議的支持下,可以自動(dòng)處理總線(xiàn)上出現的多MCU訪(fǎng)問(wèn)的競爭。目前的文獻通常是介紹I2C總線(xiàn)在單MCU系統中的應用[3?4],本文介紹一種利用I2C總線(xiàn)實(shí)現多片MCU訪(fǎng)問(wèn)E2PROM,從而實(shí)現數據交換的方法。
1 I2C總線(xiàn)工作原理
I2C總線(xiàn)是一種“二線(xiàn)”結構,分別使用“SDA”和“SCL”信號線(xiàn)實(shí)現數據傳輸。I2C總線(xiàn)對與其相連的設備采用軟件尋址。每一種器件都有一個(gè)特定的7位I2C地址,以便主機了解當前正與其進(jìn)行通信的器件。這個(gè)7位地址的前4位固定,用來(lái)指明器件所屬類(lèi)別,如1010表明是串行E2PROM器件。后3位(如A2,A1和A0)通過(guò)硬件管腳進(jìn)行設置來(lái)修改器件的I2C地址。表示地址字節的最低1位(R/W)用來(lái)指明主控制器向從機發(fā)送(寫(xiě),R/W=0)還是接收(讀,R/W=1)來(lái)自從機的數據。每個(gè)傳輸過(guò)程都是以起始條件開(kāi)始,停止或重新開(kāi)始條件結束。每一次數據傳送都是由主控制器發(fā)起的,如果某一時(shí)刻總線(xiàn)上有多個(gè)主控器,并且都請求控制總線(xiàn),這時(shí)就要進(jìn)行總線(xiàn)仲裁處理。一旦一個(gè)主控器獲得總線(xiàn)控制權,其他主控器必須等待此主控器發(fā)送完一個(gè)停止條件并將總線(xiàn)釋放為“空閑”狀態(tài)方可重新控制總線(xiàn)。在系統中主控制器通常都由MCU擔任。
2 多MCU系統下的I2C總線(xiàn)
I2C總線(xiàn)軟、硬件協(xié)議十分巧妙,它可以用于構成多MCU系統。當系統中有多個(gè)I2C總線(xiàn)接口單片機時(shí),會(huì )出現多MCU競爭的復雜狀態(tài)。I2C總線(xiàn)軟、硬件協(xié)議以及I2C總線(xiàn)單片機中的SFR保證了多MCU競爭時(shí)的協(xié)調管理。I2C總線(xiàn)提供的狀態(tài)處理軟件能自動(dòng)處理總線(xiàn)上出現的26種狀態(tài)。在使用I2C總線(xiàn)時(shí)將這些軟件工具在程序存儲器中定位,利用這些軟件編制出歸一化操作命令,用于I2C總線(xiàn)應用程序設計十分簡(jiǎn)單、方便。
2.1 多MCU竟爭仲裁
主機只能在總線(xiàn)空閑的時(shí)侯啟動(dòng)傳輸。兩個(gè)或多個(gè)主機可能在起始條件的最小持續時(shí)間內產(chǎn)生一個(gè)起始條件,結果在總線(xiàn)上產(chǎn)生一個(gè)規定的起始條件。當SCL線(xiàn)是高電平時(shí),仲裁在SDA線(xiàn)發(fā)生;這樣,在其他主機發(fā)送低電平時(shí),發(fā)送高電平的主機將斷開(kāi)它的數據輸出級,因為總線(xiàn)上的電平與它自己的電平不相同,仲裁可以持續多位。它的第一個(gè)階段是比較地址位。如果每個(gè)主機都嘗試尋址相同的器件,仲裁會(huì )繼續比較數據位(如果是主機—發(fā)送器),或者比較響應位(如果是主機—接收器)。因為I2C總線(xiàn)的地址和數據信息由贏(yíng)得仲裁的主機決定,在仲裁過(guò)程中不會(huì )丟失信息[5]。
2.2 主系統的數據傳送過(guò)程
考慮以下實(shí)際應用,系統中有兩片單片機,MCU A進(jìn)行數據采集,并將數據存入E2PROM,MCU B不定時(shí)地從E2PROM取出數據(如圖1所示)。傳輸數據的過(guò)程如下:
。1) 假設MCU A要發(fā)送信息到E2PROM
、 MCU A(主機)尋址接收器E2PROM;
、 MCU A(主機)發(fā)送器發(fā)送數據到接收器E2PROM;
、 MCU A終止傳輸。
。2) 如果MCU B想從器件E2PROM中接收信息
、 MCU B(主機)尋址E2PROM(從器件);
、 MCU B(主機)從E2PROM(從器件)讀數據;
、 MCU B終止傳輸。
。3) 以上兩種情況同時(shí)發(fā)生時(shí),I2C總線(xiàn)起動(dòng)總線(xiàn)的競爭仲裁功能
、 MCU A或MCU B贏(yíng)得總線(xiàn)的控制權,掌管總線(xiàn),競爭失敗的微控制器退出總線(xiàn);
、 贏(yíng)得總線(xiàn)的控制權的微控制器尋址E2PROM(從器件),并進(jìn)行數據傳輸;
、 贏(yíng)得總線(xiàn)的控制權的微控制器終止數據傳輸,競爭失敗的微控制器試圖掌控總線(xiàn),從器件尋址,并進(jìn)行數據傳輸;
、 數據傳送完畢,總線(xiàn)進(jìn)入空閑狀態(tài)。
由上可知,在多MCU系統下的數據傳送過(guò)程要比單主機系統下復雜得多。但I2C總線(xiàn)軟、硬件協(xié)議能進(jìn)行協(xié)調管理,保證數據的可靠傳輸。
3 多MCU系統的具體實(shí)現
本應用中選用了兩片P89LPC932單片機及一片24系列的E2PROM。P89LPC932中I/O口P1.3和P1.2為復用端口,在用作I2C通信時(shí),P1.3為SDA,P1.2為SCL,在程序中應該設置為開(kāi)漏方式。電路中[R1、][R2]為I2C總線(xiàn)的上拉電阻,在具體電路中應適當調整。選擇上拉電阻要考慮的因素主要為供電電源、總線(xiàn)上的電容 值和連接器件數。在《I2C總線(xiàn)協(xié)議》中規定,在供電電壓大于2 V,灌電流為3 mA時(shí),輸出低電平不高于0.4 V。在本電路中供電電壓為(3±0.3) V。,因而上拉電阻的最小值為[(3.3-0.4)0.003=967 ]Ω。上拉電阻的取值不能過(guò)大,因為上拉電阻R與總線(xiàn)上的電容值C構成的RC電路的時(shí)間常數,影響了總線(xiàn)從高電平到低電平的過(guò)渡時(shí)間,因而影響了通信速率。在快速模式中,SDA,SCL信號從低到高的過(guò)渡時(shí)間應該不大于300 ns,P89LPC932端口輸出電容為15 pF,因而上拉電阻的最大值為[300 ns(0.7×15 pF×3)=9.5 ]kΩ。在電路中[R1,][R2]取值為5 kΩ。
由于P89LPC932單片機中帶有內部RC振蕩源,在電路中省略了一般51單片機所需要的晶振,因而電路比較簡(jiǎn)單。其硬件電路如圖2所示。
4 多MCU系統下的軟件設計
I2C總線(xiàn)的通信都是由主機發(fā)起的。具體為主機發(fā)送起始條件,然后發(fā)送要操作的從機地址和讀寫(xiě)命令。在收到從機應答后,進(jìn)行相應操作。軟件設計主要包括主機的寄存器的設置及讀寫(xiě)子程序的設計。
4.1 P89LPC932單片機I2C寄存器的設置
LPC932單片機微功耗51內核,內部集成了I2C總線(xiàn),支持400K高速模式,既可作I2C總線(xiàn)上的主控器件,也可作I2C總線(xiàn)上的從器件[6]。LPC900單片機的I2C總線(xiàn)通過(guò)以下6個(gè)特殊功能寄存器實(shí)現接口:I2CON(I2C控制寄存器?0D8H)、I2DAT(數據寄存器?0DAH)、I2STAT(狀態(tài)寄存器?0D9H)、I2ADR(地址寄存器?0DBH)、I2SCLH(占空比寄存器高字節?0DDH)、I2SCLLSCL(占空比寄存器低字節?0DCH)。
I2C地址寄存器在處于主模式時(shí),該寄存器的內容無(wú)效。I2C狀態(tài)寄存器是一個(gè)8位只讀寄存器,它包含了I2C接口的狀態(tài)代碼,最低3位總是為0,I2C一共有26種可能的狀態(tài)。
4.2 多MCU系統下的程序設計
按照I2C總線(xiàn)的規范,I2C總線(xiàn)數據傳送可分為主發(fā)送、主接收、從發(fā)送、從接收4種方式。在多MCU模式下有主發(fā)送、主接收2種方式。每種方式都有典型的傳送過(guò)程,這些數據傳送都是由一些狀態(tài)碼標記的總線(xiàn)狀態(tài)處理過(guò)程組成,因此I2C總線(xiàn)上的一個(gè)完整的數據傳送是由多個(gè)I2C中斷狀態(tài)處理程序來(lái)完成的。每出現一個(gè)新的狀態(tài),就會(huì )產(chǎn)生一次I2C中斷,然后進(jìn)入該總線(xiàn)的中斷處理程序,處理完畢中斷返回再等待一次新的中斷及狀態(tài)處理直至結束。注意以下所說(shuō)的主機可以是兩片MCU中的任一片,而從機指的是I2C器件。
I2C總線(xiàn)的數據操作過(guò)程及總線(xiàn)狀態(tài)處理是在標準軟件包的支持下完成,無(wú)須用戶(hù)介入,用戶(hù)可以通過(guò)查詢(xún)I2C總線(xiàn)的狀態(tài)寄存器就可了解總線(xiàn)的處理狀態(tài),從而做相應的處理。程序設計流程圖如圖3所示。
I2C通信程序設計要點(diǎn)如下:
。1) 每次通信的起始條件和停止條件均由主機發(fā)起,從機只是負責監聽(tīng)主機信號。起始條件和停止條件是通過(guò)置位I2CON中的STA和STO位達到的。
。2) 當主機獲得總線(xiàn),成功發(fā)送啟動(dòng)條件后,地址和數據的發(fā)送是通過(guò)寫(xiě)數據寄存器I2DAT達到的。
。3) 每次發(fā)送地址和數據后應該查詢(xún)狀態(tài)寄存器I2STAT檢查數據發(fā)送狀態(tài)以進(jìn)行下一步動(dòng)作。
。4) 每次通信完畢后主機和從機均應該釋放總線(xiàn)。
程序設計過(guò)程中值得注意的是:讀寫(xiě)過(guò)程中從器件的地址是變化的,寫(xiě)過(guò)程中E2PROM的地址是0A0H,讀過(guò)程中E2PROM的地址是0A1H。
5 結 語(yǔ)
本應用以?xún)善琈CU通過(guò)I2C總線(xiàn)共享一個(gè)存儲器,實(shí)現了I2C總線(xiàn)多MCU機應用系統的設計,電路設計簡(jiǎn)單,易于擴展,具有較強的實(shí)用性。雖然本文是以MCS51內核單片機LPC932為例實(shí)現的,并且系統中僅兩片MCU,但實(shí)際上任何帶有I2C總線(xiàn)接口的多片MCU都可使用該方法。
【淺談基于I2C總線(xiàn)的多MCU系統設計發(fā)展論文】相關(guān)文章:
基于RFID物品防盜系統的設計方式論文09-02
基于RFID物品防盜系統的設計方式的論文09-01
基于系統設計的科研管理論文09-22
淺談基于WSN低碳型智能地鐵站能量管理系統設計論文09-28
基于Internet的風(fēng)機網(wǎng)上選型系統的設計論文09-02