新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM和uC/OS的嵌入式SMI網(wǎng)絡(luò)轉(zhuǎn)換器設(shè)計(jì)與應(yīng)用

基于ARM和uC/OS的嵌入式SMI網(wǎng)絡(luò)轉(zhuǎn)換器設(shè)計(jì)與應(yīng)用

作者: 時(shí)間:2013-12-05 來(lái)源:網(wǎng)絡(luò) 收藏

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

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

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

關(guān)鍵問(wèn)題的解決

當(dāng)SMI串口和以太網(wǎng)進(jìn)行雙向通信時(shí),如果雙方的數(shù)據(jù)傳輸率處于同步狀態(tài),即接收方速率等于發(fā)送方速率,系統(tǒng)能夠即時(shí)地將數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)。但大多數(shù)情況下,收發(fā)雙方的數(shù)據(jù)傳輸速率并不一致,相對(duì)于以太網(wǎng)來(lái)說(shuō),串口是一個(gè)慢速連接,可能導(dǎo)致丟失數(shù)據(jù)。因此,在系統(tǒng)中必須定義循環(huán)隊(duì)列作為數(shù)據(jù)收發(fā)的緩沖區(qū)。在本系統(tǒng)中,定義了兩個(gè)1024字節(jié)的循環(huán)隊(duì)列作為數(shù)據(jù)收發(fā)的緩沖區(qū),一個(gè)是串口接收緩沖區(qū),另一個(gè)是以太網(wǎng)接收緩沖區(qū)。以太網(wǎng)的接收是通過(guò)中斷觸發(fā)的,相對(duì)而言,串口和以太網(wǎng)的發(fā)送任務(wù)優(yōu)先級(jí)較低,接收的數(shù)據(jù)并不能立即轉(zhuǎn)發(fā)出去,而是暫存在循環(huán)緩沖區(qū)中。如圖4所示,Head和Tail分別指向隊(duì)列的頭部和尾部,當(dāng)Head=Tail時(shí)表示隊(duì)列空,(Head+1)Mod 1024=Tail表示隊(duì)列己滿,空閑緩沖區(qū)的大小也可通過(guò)Head和Tail指針計(jì)算。

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

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

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

任務(wù)的執(zhí)行

任務(wù)劃分后,各任務(wù)便具有獨(dú)立的堆棧空間,彼此爭(zhēng)奪CPU的使用權(quán)。一旦獲得CPU的使用權(quán),就會(huì)獨(dú)立運(yùn)行,完成特定的功能。

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

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

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

任務(wù)間的同步與調(diào)度

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

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

結(jié)語(yǔ)

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


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉