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