首頁 > 新聞係統 > 電子技術 > 技術 > 嵌入式係統 正文 > 論壇 返回 打印

采用分而治之的方法設計嵌入式係統

  其中有一個很明顯的發展趨勢:將複雜的問題分為若幹個較小、較簡單且更加明確的問題,並針對具體的任務運用合適的工具。即使是最為普通的也適用於這一原則,它可以縮短設計周期,提高係統的靈活性和可維護性。關鍵在於采用一種通用的通信策略。

  主控製器和從控製器

  最基本的原理就是:用主控製器進行集中決策,再交由從控製器分別執行。在最為複雜的係統中,這種方法必不可少,並能夠自動執行。比如,手機中的主處理器用於決定屏幕的顯示內容以及外設(如LCD顯示控製器或無線電收發器)需要完成的工作,而不會直接控製顯示的各個像素或是無線電的編/解碼。主控製器將告知顯示器需要顯示什麼信息,並由顯示器來決定如何顯示;同樣,主控製器向收發器提供需要編碼的音頻信號,而收發器則提供解碼後的信號。

  在其他嵌入式係統中,任務的劃分或許不那麼明顯,但基本思想都是相同的。如果一個中央主控製器能夠與遠程從設備以及本地設備進行通信,那麼整個係統中就可以有統一的控製。另外,為了使一個分布式係統獲得成功,需要對接口作明確的定義。

  雖然微控製器有許多標準的通信方法,但在主/從嵌入式係統中,最常用的是RS23 2串行接口、SPI和I2C。采用這些通信接口的從設備包括較低級的ADC、DAC、串行EEPROM、各類數字I/O,以及較高級的電壓排序和監控器件以及閉環風扇控製器等。

  將任務

  在目前嵌入式市場的從器件以及可被用作主控製器或定製從控製器的微控製器中,比較流行的通信方法是I2C。這主要是由於I2C價格較低,隻需雙線/引腳和兩個上拉電阻器即可構成,並且簡單易用。就分布式嵌入係統而言,I2C(400kHz)往往是最佳選擇。

  將任務分而治之的關鍵在於:簡單的問題要比複雜的問題更加容易解決。此外,將器件彼此分開可以減少它們之間的耦合,並提高係統的可靠性。如果能夠正確地分配功能、定義接口,就可以避免普遍存在的一些故障。最後,如果能夠很好地利用自己的經驗,則在劃分任務的過程中就將能產生許多可重用的設計,從而使得工程師在設計下一個項目時不用從頭開始。

  實現任務的分而治之需要依靠一根通信總線,在有些情況下,總線會影響到某些主控製器/從控製器的特性。在本文中使用I2C作為總線,是因為支持該總線的器件比較普遍,而且測試和調試I2C所需的外部工具價格較低或比較容易創建。

  這種主控製器/從控製器的原理在任何嵌入式設計中都是以相同的方法來處理的。首先,確定需要集中做出那些決策,並將它們分配給主控製器;然後把具體操作分配給從控製器去執行。關鍵在於如何進行任務的劃分。一種高效的策略是:不要讓主控製器因為任何事情而去等待某個從控製器;如果從控製器需要主控製器提供某些信息,它必須先呼叫主控製器。在有些情況下,這種方法還需要一根中斷線,以使從控製器能夠呼叫主控製器。

  采用I2C I/O擴展器件的麵板控製器

  本文在一個控製設備麵板的係統中采用了該方法,麵板由按鈕、開關和LED組成。在該麵板係統中,主控製器是負責管理該係統的主處理器,如嵌入式的Windows或Linux計算機;從控製器為連接I/O擴展器。

  通過讓主處理器在上電時對I/O擴展器進行配置,按鈕/開關檢測輸入和LED狀態輸出將被傳至主處理器。任何一個具有I2C總線的處理器都可以是主控製器,它對設備進行軟件配置,並可以方便地改變按鈕和LED的配置。

  這種簡單的係統如圖1所示。圖中藍色的圓圈代表按鈕輸入,紅色和綠色形狀代表LED。在設計中使用了兩個小的I2C I/O擴展器,是為了實現智能設計的模塊化,把輸入子係統的變化與輸出子係統分隔開。當在主控製器中進行決策時,可使某一特定功能的變化不影響到其他的功能。

麵板係統簡圖

圖1 麵板係統簡圖

  而且,由於所有的控製功能都由主控製器完成,因此係統中的硬件部分很簡單,而且易於改變。但這種簡單的方法也有缺點,當希望增加一個用於調節LED亮度的環境光傳感器時,增加的工作負擔將全部由主控製器來承擔,它要保證所有的從控製器能夠適應設計變化,並正常工作。但其實主控器隻需要知道按鈕的狀態,並控製LED的接通和關斷。

  設計定製的I2C從控製器件

  在圖1的係統中,所有的邏輯信息都存儲在主控製器中,一切變化都要通過主控製器完成。作為替代方案,可以定義一個麵板接口,並將所有的細節問題交給一個分布式的從控製器係統來處理,這樣可減少主處理器的負擔,如圖2所示。

采用定製從器件的麵板係統

圖2 采用定製從器件的麵板係統

  設計定製器件時應采用定義了穩定協議和接口且經過驗證的I2C從控製器實現方案,最常用的協議是目前大多數I2C從控製器件所采用的、基於寄存器的協議。相關概要信息如下:

  對於I2C,所有的事務處理均由主控製器啟動;

  每個從器件都具有一個I2C 7位地址(最低有效位表明事務處理是“讀”還是“寫”);

  每個從器件都具有一個內部地址寄存器,用於存儲一個指向包含了數據、命令或狀態信息的內部表指針;

  每個從器件均定義了其寄存器的地址及其功能,指明它們是隻讀型的還是讀/寫型的;

  一個寫處理事務由一個具有I2C器件7位地址和寫操作位的字節以及一個位於其後的、用於設定內部地址寄存器的字節組成,如果在處理事務中有更多的字節,則它們將被寫入以新設定的內部地址為起點的從器件;

  一個讀處理事務由一個具有I2C器件7位地址和讀操作位的字節以及一個位於其後的主控製器組成,該主控製器用於記錄從器件的字節數,並在結束時提供停止信號。由此可見,I2C從控製器與雙端口RAM很相似,非常易於使用。

  接下來要選擇可編程器件,賽普拉斯公司推出的微控製器件PSoC擁有處理大多數I2C從控製器所需的全部功能,並提供了一種易用的工具,從而簡化了增加I2C從控製器的工作,隻需“拖、放、選擇地址”即可。

  首先,定義一個按鈕輸入的從器件,創建一個具有3個地址引腳和7個按鈕輸入的器件,並通過配置使之接受一個靠近5V直流係統電源的 常開開關。按鈕狀態將在一個由I2C主控製器進行存取的單字節中提供。

  其次,定義用於控製LED的從器件,創建一個具有2個地址引腳並能夠以10mA的電流來驅動8個LED(分為4紅4綠)的器件。定義被稱為“Command”的單字節用於執行I2C的命令輸入,以控製LED。該字節的4個低位用於控製紅光LED,而4個高位則負責控製綠光LED。

  接下來,還可以更加細致地定義定製I2C主控製器/從控製器的接口,進一步實現從控製級的客戶化設計。如果想把係統主控製器從一個輪詢器件變為一個接收報警信號的中斷器件時,則可以給按鈕輸入設備增加一根輸出線。這些改動能夠進一步地把主係統處理器與低級設備相隔離,並提供了在不影響主係統的情況下繼續改善子係統的更大靈活性。

  將的概念推廣到所有的通信總線

  本文所討論和說明的概念可適用於任何的總線類型,需要做的是定義滿足各種不同需要的協議,以最大限度地縮短無線、便攜係統中的傳輸時間,或是在苛刻的工業環境中實現完善的檢錯/糾錯。

  主控製器可以被稱為集線器,從控製器可以被看作一個節點並具有預定的響應時間,但是,分而治之的思想仍然適用:把普通、重複的測量和低級控製分配給級別最低的點,而將重要的工作留給係統控製器來完成。另外,在各種情況下都必須建立功能強大、精確定義的接口,以便為下一級的設計留出一定的自由度,在不影響較高級設備的情況下方便地改變設計方案。



http://www.autooo.net/autooo/Electronic/Tech/Embeded/2007-10-23/38301.html