淺談基於I2C匯流排的多MCU系統設計發展論文

淺談基於I2C匯流排的多MCU系統設計發展論文

  引 言

  隨著微電子技術的發展和MCU價格的降低,常常在實際應用中使用多片MCU來協同完成系統功能,以實現更高的效能。在這些系統中多片MCU透過某種方式實現資料交換,其中使用雙口或多口E2PROM是一種常見的方法[1?2]。這種電路結構複雜、成本高,需要軟、硬體解決多MCU訪問的競爭問題,更重要的是目前許多MCU不支援外部匯流排,不能擴充套件外部E2PROM,因此無法使用這種方法。I2C匯流排是由Philips公司推出的晶片間序列傳輸匯流排。它以規範嚴謹、使用簡單靈活、支援的外圍器件繁多等特點而被廣泛應用。I2C匯流排具有十分完善的匯流排協議,在協議的支援下,可以自動處理總線上出現的多MCU訪問的競爭。目前的文獻通常是介紹I2C匯流排在單MCU系統中的應用[3?4],本文介紹一種利用I2C匯流排實現多片MCU訪問E2PROM,從而實現資料交換的方法。

  1 I2C匯流排工作原理

  I2C匯流排是一種“二線”結構,分別使用“SDA”和“SCL”訊號線實現資料傳輸。I2C匯流排對與其相連的裝置採用軟體定址。每一種器件都有一個特定的7位I2C地址,以便主機瞭解當前正與其進行通訊的器件。這個7位地址的前4位固定,用來指明器件所屬類別,如1010表明是序列E2PROM器件。後3位(如A2,A1和A0)透過硬體管腳進行設定來修改器件的I2C地址。表示地址位元組的最低1位(R/W)用來指明主控制器向從機發送(寫,R/W=0)還是接收(讀,R/W=1)來自從機的資料。每個傳輸過程都是以起始條件開始,停止或重新開始條件結束。每一次資料傳送都是由主控制器發起的,如果某一時刻總線上有多個主控器,並且都請求控制匯流排,這時就要進行匯流排仲裁處理。一旦一個主控器獲得匯流排控制權,其他主控器必須等待此主控器傳送完一個停止條件並將匯流排釋放為“空閒”狀態方可重新控制匯流排。在系統中主控制器通常都由MCU擔任。

  2 多MCU系統下的I2C匯流排

  I2C匯流排軟、硬體協議十分巧妙,它可以用於構成多MCU系統。當系統中有多個I2C匯流排介面微控制器時,會出現多MCU競爭的複雜狀態。I2C匯流排軟、硬體協議以及I2C匯流排微控制器中的SFR保證了多MCU競爭時的協調管理。I2C匯流排提供的狀態處理軟體能自動處理總線上出現的26種狀態。在使用I2C匯流排時將這些軟體工具在程式儲存器中定位,利用這些軟體編制出歸一化操作命令,用於I2C匯流排應用程式設計十分簡單、方便。

  2.1 多MCU竟爭仲裁

  主機只能在匯流排空閒的時侯啟動傳輸。兩個或多個主機可能在起始條件的最小持續時間內產生一個起始條件,結果在總線上產生一個規定的起始條件。當SCL線是高電平時,仲裁在SDA線發生;這樣,在其他主機發送低電平時,傳送高電平的主機將斷開它的資料輸出級,因為總線上的電平與它自己的電平不相同,仲裁可以持續多位。它的第一個階段是比較地址位。如果每個主機都嘗試定址相同的器件,仲裁會繼續比較資料位(如果是主機—傳送器),或者比較響應位(如果是主機—接收器)。因為I2C匯流排的地址和資料資訊由贏得仲裁的主機決定,在仲裁過程中不會丟失資訊[5]。

  2.2 主系統的資料傳送過程

  考慮以下實際應用,系統中有兩片微控制器,MCU A進行資料採集,並將資料存入E2PROM,MCU B不定時地從E2PROM取出資料(如圖1所示)。傳輸資料的過程如下:

  (1) 假設MCU A要傳送資訊到E2PROM

  ① MCU A(主機)定址接收器E2PROM;

  ② MCU A(主機)傳送器傳送資料到接收器E2PROM;

  ③ MCU A終止傳輸。

  (2) 如果MCU B想從器件E2PROM中接收資訊

  ① MCU B(主機)定址E2PROM(從器件);

  ② MCU B(主機)從E2PROM(從器件)讀資料;

  ③ MCU B終止傳輸。

  (3) 以上兩種情況同時發生時,I2C匯流排起動匯流排的競爭仲裁功能

  ① MCU A或MCU B贏得匯流排的控制權,掌管匯流排,競爭失敗的微控制器退出匯流排;

  ② 贏得匯流排的控制權的微控制器定址E2PROM(從器件),並進行資料傳輸;

  ③ 贏得匯流排的控制權的微控制器終止資料傳輸,競爭失敗的微控制器試圖掌控匯流排,從器件定址,並進行資料傳輸;

  ④ 資料傳送完畢,匯流排進入空閒狀態。

  由上可知,在多MCU系統下的資料傳送過程要比單主機系統下複雜得多。但I2C匯流排軟、硬體協議能進行協調管理,保證資料的可靠傳輸。

  3 多MCU系統的具體實現

  本應用中選用了兩片P89LPC932微控制器及一片24系列的E2PROM。P89LPC932中I/O口P1.3和P1.2為複用埠,在用作I2C通訊時,P1.3為SDA,P1.2為SCL,在程式中應該設定為開漏方式。電路中[R1、][R2]為I2C匯流排的上拉電阻,在具體電路中應適當調整。選擇上拉電阻要考慮的因素主要為供電電源、總線上的'電容  值和聯結器件數。在《I2C匯流排協議》中規定,在供電電壓大於2 V,灌電流為3 mA時,輸出低電平不高於0.4 V。在本電路中供電電壓為(3±0.3) V。,因而上拉電阻的最小值為[(3.3-0.4)0.003=967 ]Ω。上拉電阻的取值不能過大,因為上拉電阻R與總線上的電容值C構成的RC電路的時間常數,影響了匯流排從高電平到低電平的過渡時間,因而影響了通訊速率。在快速模式中,SDA,SCL訊號從低到高的過渡時間應該不大於300 ns,P89LPC932埠輸出電容為15 pF,因而上拉電阻的最大值為[300 ns(0.7×15 pF×3)=9.5 ]kΩ。在電路中[R1,][R2]取值為5 kΩ。

  由於P89LPC932微控制器中帶有內部RC振盪源,在電路中省略了一般51微控制器所需要的晶振,因而電路比較簡單。其硬體電路如圖2所示。

  4 多MCU系統下的軟體設計

  I2C匯流排的通訊都是由主機發起的。具體為主機發送起始條件,然後傳送要操作的從機地址和讀寫命令。在收到從機應答後,進行相應操作。軟體設計主要包括主機的暫存器的設定及讀寫子程式的設計。

  4.1 P89LPC932微控制器I2C暫存器的設定

  LPC932微控制器微功耗51核心,內部集成了I2C匯流排,支援400K高速模式,既可作I2C總線上的主控器件,也可作I2C總線上的從器件[6]。LPC900微控制器的I2C匯流排透過以下6個特殊功能暫存器實現介面:I2CON(I2C控制暫存器?0D8H)、I2DAT(資料暫存器?0DAH)、I2STAT(狀態暫存器?0D9H)、I2ADR(地址暫存器?0DBH)、I2SCLH(佔空比暫存器高位元組?0DDH)、I2SCLLSCL(佔空比暫存器低位元組?0DCH)。

  I2C地址暫存器在處於主模式時,該暫存器的內容無效。I2C狀態暫存器是一個8位只讀暫存器,它包含了I2C介面的狀態程式碼,最低3位總是為0,I2C一共有26種可能的狀態。

  4.2 多MCU系統下的程式設計

  按照I2C匯流排的規範,I2C匯流排資料傳送可分為主傳送、主接收、從傳送、從接收4種方式。在多MCU模式下有主傳送、主接收2種方式。每種方式都有典型的傳送過程,這些資料傳送都是由一些狀態碼標記的匯流排狀態處理過程組成,因此I2C總線上的一個完整的資料傳送是由多個I2C中斷狀態處理程式來完成的。每出現一個新的狀態,就會產生一次I2C中斷,然後進入該匯流排的中斷處理程式,處理完畢中斷返回再等待一次新的中斷及狀態處理直至結束。注意以下所說的主機可以是兩片MCU中的任一片,而從機指的是I2C器件。

  I2C匯流排的資料操作過程及匯流排狀態處理是在標準軟體包的支援下完成,無須使用者介入,使用者可以透過查詢I2C匯流排的狀態暫存器就可瞭解匯流排的處理狀態,從而做相應的處理。程式設計流程圖如圖3所示。

  I2C通訊程式設計要點如下:

  (1) 每次通訊的起始條件和停止條件均由主機發起,從機只是負責監聽主機訊號。起始條件和停止條件是透過置位I2CON中的STA和STO位達到的。

  (2) 當主機獲得匯流排,成功傳送啟動條件後,地址和資料的傳送是透過寫資料暫存器I2DAT達到的。

  (3) 每次傳送地址和資料後應該查詢狀態暫存器I2STAT檢查資料傳送狀態以進行下一步動作。

  (4) 每次通訊完畢後主機和從機均應該釋放匯流排。

  程式設計過程中值得注意的是:讀寫過程中從器件的地址是變化的,寫過程中E2PROM的地址是0A0H,讀過程中E2PROM的地址是0A1H。

  5 結 語

  本應用以兩片MCU透過I2C匯流排共享一個儲存器,實現了I2C匯流排多MCU機應用系統的設計,電路設計簡單,易於擴充套件,具有較強的實用性。雖然本文是以MCS51核心微控制器LPC932為例實現的,並且系統中僅兩片MCU,但實際上任何帶有I2C匯流排介面的多片MCU都可使用該方法。

最近訪問