基于ARM和uC/OS的嵌入式SMI網絡轉換器設計與應用
TCP/IP協議的選擇與裁減
為使SMI轉換器具有以太網接入功能,必須在arm處理器中嵌入TCP/IP協議。參考開放系統互連(OSI)模型,在ARM中嵌入的TCP/IP協議采用簡化的四層模型,即鏈路層、網絡層、傳輸層、應用層。根據實際需求,結合arm微處理器的處理能力,設計中對完整的TCP/IP協議進行了全方位裁減。鏈路層由控制同一物理網絡上不同機器間數據傳送的底層協議組成,RTL8019AS的驅動程序就是在該層實現的;在網絡層,對于ARP包只響應ARP請求,取消了RARP,只維護最簡單的一個IP地址與MAC地址的映射Cache表,定時刷新;對傳輸層,考慮到所設計的系統數據傳輸安全性,設計中選用TCP協議;對應用層,裁剪掉HTTP協議,通過將控制界面設置在上位機上來代替其功能。
通過上述裁剪,就得到一個適用的TCP/IP協議。把裁減后的TCP/IP協議嵌入到操作系統μC/OS-II中,并提供API接口函數供應用程序調用,使得arm可以快速無沖突地收發網絡TCP數據包,符合工業測控系統對實時性和可靠性的要求。
關鍵問題的解決
當SMI串口和以太網進行雙向通信時,如果雙方的數據傳輸率處于同步狀態,即接收方速率等于發送方速率,系統能夠即時地將數據進行轉發。但大多數情況下,收發雙方的數據傳輸速率并不一致,相對于以太網來說,串口是一個慢速連接,可能導致丟失數據。因此,在系統中必須定義循環隊列作為數據收發的緩沖區。在本系統中,定義了兩個1024字節的循環隊列作為數據收發的緩沖區,一個是串口接收緩沖區,另一個是以太網接收緩沖區。以太網的接收是通過中斷觸發的,相對而言,串口和以太網的發送任務優先級較低,接收的數據并不能立即轉發出去,而是暫存在循環緩沖區中。如圖4所示,Head和Tail分別指向隊列的頭部和尾部,當Head=Tail時表示隊列空,(Head+1)Mod 1024=Tail表示隊列己滿,空閑緩沖區的大小也可通過Head和Tail指針計算。
收發器的串口通信協議中通過加入本地/遠端和收發器號來辨別源地址和目的地址,對數據進行校驗。由于轉換器IP地址主要采用上位機通過以太網進行設置,所以在以太網的數據幀中加入命令頭,以辨別設置的是IP數據還是與收發器通信的數據。
軟件系統的實現
本系統整個軟件設計由操作系統和一系列用戶應用程序構成。系統創建了一個啟動任務TaskStart(),主要負責系統硬件的初始化,包括時鐘的初始化和啟動、中斷的啟動、RTL8019AS的初始化與啟動等,并對各個應用任務進行了劃分。根據各任務的重要性和實時性,整個模塊被分成6個具有不同優先級的應用任務,即IP地址設置、接收協議轉換、發送協議轉換、NET發送、SMI發送、SMI采集。
任務的執行
任務劃分后,各任務便具有獨立的堆棧空間,彼此爭奪CPU的使用權。一旦獲得CPU的使用權,就會獨立運行,完成特定的功能。
本系統采用arm作為服務器,PC端作為客戶端的TCP通信模式,由上位機主動請求連接arm.在串口和以太網建立通信之前,首先要調用IP地址設置任務,對IP地址、子網掩碼、網關和SMI口的通信參數進行初始化設置。
SMI口通信實現的功能有SMI發送和SMI采集。SMI采集任務優先級較低,進行多任務調度后若沒有相關事件發生,系統就一直運行SMI采集任務,若采集到本地或遠端IP113F的狀態發生變化,數據通過協議轉換后發送到遠程的上位機。SMI發送作為一個單獨的任務獨立運行。SMI發送任務需要系統 調度器通知緩沖區中是否有待發送的數據。若沒有數據發送,則將該任務掛起,系統運行其他任務,如圖5所示。
以太網通信模塊由以太網數據收發和協議轉換構成。數據的接收在RTL8019的中斷服務程序中實現。以太網數據的發送、接收協議轉換及發送協議轉換分別作為獨立的任務運行。以太網數據的發送任務同樣需要系統調度器對緩沖區中是否有待發送的數據進行通知。協議轉換主要實現對接收數據報文的解析及給待發送數據添加協議報頭,在編程時可以直接調用嵌入TCP/IP協議的API函數,對數據報文進行分層。
任務間的同步與調度
通常多任務操作系統的任務是一個無限循環,而且沒有返回值。如果沒有更高優先級的任務進入就緒態,當前任務不會放棄對CPU的使用權。為了實現操作系統的正常運行和有關事件的同步,必須正確處理任務間的通信和事件標志的設置。系統的功能結構如圖6所示。
系統進行多任務調度后,高優先級任務由于申請某個資源而發生阻塞,進入掛起態,系統運行較低優先級的SMI采集任務。每個事件分配一個信號量,一旦事件發生就進入就緒態的任務。當接收中斷發生時,啟動協議轉換任務,此過程通過信號量的通信機制實現。接收協議轉換任務先對來自上位機的數據解析,然后根據數據的命令頭發往SMI發送隊列或EEPROM發送隊列,進而啟動相應的SMI發送任務或IP設置任務。發送協議轉換任務對SMI采集的數據進行協議轉換后,存入以太網發送隊列,然后通知NET發送任務,把數據發給上位機,從而保證任務與事件同步。
結語
本文所設計的SMI網絡轉換器實現了上位機同時對本地/遠端32對光纖收發器進行監控的功能。設計中采用LPC2214芯片,克服了原先使用8位單片機處理器所帶來的資源短缺和處理能力有限等問題。軟件上,采用裁減所得的TCP/IP協議,極大地簡化了編程的復雜度,嵌入μC/OS操作系統使系統的實時性極大提高。系統運行狀況良好,工作穩定,軟件上稍加改變就可應用于其他串口設備上,具有廣闊的應用前景。
評論