<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM和uC/OS的嵌入式SMI網(wǎng)絡轉換器設計與應用

          基于ARM和uC/OS的嵌入式SMI網(wǎng)絡轉換器設計與應用

          作者: 時間:2013-12-05 來源:網(wǎng)絡 收藏

          TCP/IP協(xié)議的選擇與裁減

          為使SMI轉換器具有以太網(wǎng)接入功能,必須在arm處理器中嵌入TCP/IP協(xié)議。參考開放系統(tǒng)互連(OSI)模型,在中嵌入的TCP/IP協(xié)議采用簡化的四層模型,即鏈路層、網(wǎng)絡層、傳輸層、應用層。根據(jù)實際需求,結合arm微處理器的處理能力,設計中對完整的TCP/IP協(xié)議進行了全方位裁減。鏈路層由控制同一物理網(wǎng)絡上不同機器間數(shù)據(jù)傳送的底層協(xié)議組成,RTL8019AS的驅動程序就是在該層實現(xiàn)的;在網(wǎng)絡層,對于ARP包只響應ARP請求,取消了RARP,只維護最簡單的一個IP地址與MAC地址的映射Cache表,定時刷新;對傳輸層,考慮到所設計的系統(tǒng)數(shù)據(jù)傳輸安全性,設計中選用TCP協(xié)議;對應用層,裁剪掉HTTP協(xié)議,通過將控制界面設置在上位機上來代替其功能。

          通過上述裁剪,就得到一個適用的TCP/IP協(xié)議。把裁減后的TCP/IP協(xié)議嵌入到操作系統(tǒng)μC/OS-II中,并提供API接口函數(shù)供應用程序調用,使得arm可以快速無沖突地收發(fā)網(wǎng)絡TCP數(shù)據(jù)包,符合工業(yè)測控系統(tǒng)對實時性和可靠性的要求。

          關鍵問題的解決

          當SMI串口和以太網(wǎng)進行雙向通信時,如果雙方的數(shù)據(jù)傳輸率處于同步狀態(tài),即接收方速率等于發(fā)送方速率,系統(tǒng)能夠即時地將數(shù)據(jù)進行轉發(fā)。但大多數(shù)情況下,收發(fā)雙方的數(shù)據(jù)傳輸速率并不一致,相對于以太網(wǎng)來說,串口是一個慢速連接,可能導致丟失數(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ā)送任務優(yōu)先級較低,接收的數(shù)據(jù)并不能立即轉發(fā)出去,而是暫存在循環(huán)緩沖區(qū)中。如圖4所示,Head和Tail分別指向隊列的頭部和尾部,當Head=Tail時表示隊列空,(Head+1)Mod 1024=Tail表示隊列己滿,空閑緩沖區(qū)的大小也可通過Head和Tail指針計算。

          收發(fā)器的串口通信協(xié)議中通過加入本地/遠端和收發(fā)器號來辨別源地址和目的地址,對數(shù)據(jù)進行校驗。由于轉換器IP地址主要采用上位機通過以太網(wǎng)進行設置,所以在以太網(wǎng)的數(shù)據(jù)幀中加入命令頭,以辨別設置的是IP數(shù)據(jù)還是與收發(fā)器通信的數(shù)據(jù)。

          軟件系統(tǒng)的實現(xiàn)

          本系統(tǒng)整個軟件設計由操作系統(tǒng)和一系列用戶應用程序構成。系統(tǒng)創(chuàng)建了一個啟動任務TaskStart(),主要負責系統(tǒng)硬件的初始化,包括時鐘的初始化和啟動、中斷的啟動、RTL8019AS的初始化與啟動等,并對各個應用任務進行了劃分。根據(jù)各任務的重要性和實時性,整個模塊被分成6個具有不同優(yōu)先級的應用任務,即IP地址設置、接收協(xié)議轉換、發(fā)送協(xié)議轉換、NET發(fā)送、SMI發(fā)送、SMI采集。

          任務的執(zhí)行

          任務劃分后,各任務便具有獨立的堆??臻g,彼此爭奪CPU的使用權。一旦獲得CPU的使用權,就會獨立運行,完成特定的功能。

          本系統(tǒng)采用arm作為服務器,PC端作為客戶端的TCP通信模式,由上位機主動請求連接arm.在串口和以太網(wǎng)建立通信之前,首先要調用IP地址設置任務,對IP地址、子網(wǎng)掩碼、網(wǎng)關和SMI口的通信參數(shù)進行初始化設置。

          SMI口通信實現(xiàn)的功能有SMI發(fā)送和SMI采集。SMI采集任務優(yōu)先級較低,進行多任務調度后若沒有相關事件發(fā)生,系統(tǒng)就一直運行SMI采集任務,若采集到本地或遠端IP113F的狀態(tài)發(fā)生變化,數(shù)據(jù)通過協(xié)議轉換后發(fā)送到遠程的上位機。SMI發(fā)送作為一個單獨的任務獨立運行。SMI發(fā)送任務需要系統(tǒng) 調度器通知緩沖區(qū)中是否有待發(fā)送的數(shù)據(jù)。若沒有數(shù)據(jù)發(fā)送,則將該任務掛起,系統(tǒng)運行其他任務,如圖5所示。

          以太網(wǎng)通信模塊由以太網(wǎng)數(shù)據(jù)收發(fā)和協(xié)議轉換構成。數(shù)據(jù)的接收在RTL8019的中斷服務程序中實現(xiàn)。以太網(wǎng)數(shù)據(jù)的發(fā)送、接收協(xié)議轉換及發(fā)送協(xié)議轉換分別作為獨立的任務運行。以太網(wǎng)數(shù)據(jù)的發(fā)送任務同樣需要系統(tǒng)調度器對緩沖區(qū)中是否有待發(fā)送的數(shù)據(jù)進行通知。協(xié)議轉換主要實現(xiàn)對接收數(shù)據(jù)報文的解析及給待發(fā)送數(shù)據(jù)添加協(xié)議報頭,在編程時可以直接調用嵌入TCP/IP協(xié)議的API函數(shù),對數(shù)據(jù)報文進行分層。

          任務間的同步與調度

          通常多任務操作系統(tǒng)的任務是一個無限循環(huán),而且沒有返回值。如果沒有更高優(yōu)先級的任務進入就緒態(tài),當前任務不會放棄對CPU的使用權。為了實現(xiàn)操作系統(tǒng)的正常運行和有關事件的同步,必須正確處理任務間的通信和事件標志的設置。系統(tǒng)的功能結構如圖6所示。

          系統(tǒng)進行多任務調度后,高優(yōu)先級任務由于申請某個資源而發(fā)生阻塞,進入掛起態(tài),系統(tǒng)運行較低優(yōu)先級的SMI采集任務。每個事件分配一個信號量,一旦事件發(fā)生就進入就緒態(tài)的任務。當接收中斷發(fā)生時,啟動協(xié)議轉換任務,此過程通過信號量的通信機制實現(xiàn)。接收協(xié)議轉換任務先對來自上位機的數(shù)據(jù)解析,然后根據(jù)數(shù)據(jù)的命令頭發(fā)往SMI發(fā)送隊列或EEPROM發(fā)送隊列,進而啟動相應的SMI發(fā)送任務或IP設置任務。發(fā)送協(xié)議轉換任務對SMI采集的數(shù)據(jù)進行協(xié)議轉換后,存入以太網(wǎng)發(fā)送隊列,然后通知NET發(fā)送任務,把數(shù)據(jù)發(fā)給上位機,從而保證任務與事件同步。

          結語

          本文所設計的實現(xiàn)了上位機同時對本地/遠端32對光纖收發(fā)器進行監(jiān)控的功能。設計中采用LPC2214芯片,克服了原先使用8位單片機處理器所帶來的資源短缺和處理能力有限等問題。軟件上,采用裁減所得的TCP/IP協(xié)議,極大地簡化了編程的復雜度,嵌入μC/OS操作系統(tǒng)使系統(tǒng)的實時性極大提高。系統(tǒng)運行狀況良好,工作穩(wěn)定,軟件上稍加改變就可應用于其他串口設備上,具有廣闊的應用前景。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();