新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 一種嵌入式Internet接口系統(tǒng)

一種嵌入式Internet接口系統(tǒng)

作者: 時間:2009-12-25 來源:網(wǎng)絡(luò) 收藏

單片機89C52P0口的P0~P4腳通過373八位鎖存器作為地址線連接RTL8019AS的低5位地址線,RD、WR分別連接讀寫時序控制腳IORB、 IOWB;P0口作為數(shù)據(jù)線連接RTL8019AS的低8位數(shù)據(jù)線。圖2中AT24C512為64KBE2PROM,主要用來保存透明SX-52網(wǎng)關(guān)的配置信息,如網(wǎng)關(guān)IP地址、MAC地址等。這樣,可以靈活方便地修改網(wǎng)關(guān)參數(shù),適應不同環(huán)境,同時也考慮到以后的擴展。
RTL8019AS除與89C52連接外,還將其網(wǎng)絡(luò)收發(fā)器的4根引腳TPOUT+、TPOUT-、TPIN+、TPIN-通過外接的隔離濾波器T1`與以太網(wǎng)相連。采用隔離濾波器T1是為了提高網(wǎng)絡(luò)通信的抗干擾能力。
以太網(wǎng)通信控制器RTL8019AS可以接收三種地址的數(shù)據(jù): 一個是廣播地址,一個是多播地址(我們用不上);一個是它自已的地址。
2 軟件設(shè)計
網(wǎng)上的協(xié)議格式有多種,對單片機來說不可能支持太多的協(xié)議格式。根據(jù)以太網(wǎng)的封裝格式的物理傳輸幀整個的軟件設(shè)計可以分為三部分:CAN總線設(shè)備通信程序、透明網(wǎng)關(guān)協(xié)議轉(zhuǎn)換程序和以太網(wǎng)層應用程序設(shè)計。
2.1 CAN控制器協(xié)議模塊
CAN控制器協(xié)議轉(zhuǎn)換模塊程序主要由寄存器讀程序CANRead()、寫程序CANWrite()、初始化程序CANInit()、發(fā)送程序txdsub()、接收程序rxdsub()程序組成。因為89C52芯片只有I/O端口,因此要編寫單獨的寄存器讀、寫子程序。
選用CAN2.0A協(xié)議構(gòu)建CAN總線控制網(wǎng)絡(luò),初始化主要完成控制寄存器CR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、總線定時寄存器BTR0,1 和輸出控制寄存器OCR的設(shè)置。初始化完成后,由總調(diào)度模塊監(jiān)控控制器。當CAN總線上有數(shù)據(jù)到達時,它調(diào)用接收子程序rxdsub(),把這一幀數(shù)據(jù)包存入數(shù)據(jù)緩沖區(qū)B中,然后釋放接收緩沖器。同樣,當有按CAN2.0A協(xié)議格式組合成的一幀數(shù)據(jù)報文在數(shù)據(jù)緩沖區(qū)A中要發(fā)送到CAN總線上去時,總調(diào)度模塊將調(diào)CAN發(fā)送子程序txdsub()發(fā)送。
2.2 以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊
以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊主要負責從UDP數(shù)據(jù)包中解析出完整CAN協(xié)議報文,存入數(shù)據(jù)緩沖區(qū)A。同時,可能將數(shù)據(jù)緩沖區(qū)B中的完整CAN協(xié)議報文封裝成UDP數(shù)據(jù)報,然后將其發(fā)送到以太網(wǎng)上。
在通信傳輸層采用UDP協(xié)議是考慮到CAN協(xié)議數(shù)據(jù)報為短幀形式(每個數(shù)據(jù)幀最多為8字節(jié))。如果采用TCP傳輸協(xié)議,要傳輸8字節(jié)CAN協(xié)議數(shù)據(jù),要先通過3次握手建立連接,再傳輸數(shù)據(jù),之后還要通過握手釋放連接。這樣傳輸效率對有限的網(wǎng)絡(luò)資源來說無疑是一種浪費。而UDP是無連接的傳輸,可以提高網(wǎng)絡(luò)傳輸效率,同時,也減輕網(wǎng)關(guān)的處理任務(wù)。當然,UDP傳輸協(xié)議是不可靠的,對于控制網(wǎng)絡(luò)來說,是不允許的。為了提高通信的可靠性,采用了回傳校驗機制。通過實驗測試表明這種方式是行之有效的。
以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊主要由以太網(wǎng)卡驅(qū)動、ARP、UDP協(xié)議的若干個API函數(shù)組成,主要有 NICInit()、NICDMAInit()、NICInitTXFrame()、NICSendTXFrame()、NICReadAgain()、 ARPCheckifis()、ARPSendresponse()、ARPSendStPacket()、ICMPProcPkin()、 UDPAppInit()、IPGenCheckSum()、UDPAppProcPktin()、UDPStartPktout()和 UDPEndPktout()等。所使用的變量有:remoteIP[3:0]、myIP[3:0] 、UDPRxSrcPortMSB、DPRxSxcPortLSB、UDPRxDataLenMSB、UDPRxDataLenLSB、 UDPTxSrcPortMSB、UDPTXSrcPortLSB、UDPTxDestPortMSB、UDPTxDestPortLSB、 UDPTxDataLenMSB、UDPTxDataLenLSB等。
首次執(zhí)行或復位時,以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊將首先調(diào)用NICInit ()和UDPAPPInit()等進行NIC、ARP、IP、UDP和應用程序的初始化。初始化完成后,即進入主循環(huán)。在主循環(huán)中,89C52將反復檢測 RTL8019AS是否接收以太網(wǎng)幀。當有數(shù)據(jù)被接收時,89C52調(diào)用NICDMAInit()和NICReadAgain()讀入以太網(wǎng)幀首部再調(diào)用 ARPCheckIFIs()判斷接收幀是否為ARP數(shù)據(jù)。若是ARP,則轉(zhuǎn)入ARPSendResponse()和ARPSendstPacket() 子程序進行ARP處理并發(fā)送響應ARP數(shù)據(jù)報;若不是ARP,則判斷是否為IP數(shù)據(jù)報。若非IP數(shù)據(jù)報則清除該以太網(wǎng)幀;當所接收幀包含IP數(shù)據(jù)報時,則需進一步判斷是ICMP數(shù)據(jù)報還是UPD數(shù)據(jù)報文。若是ICMP數(shù)據(jù)報則執(zhí)行ICMPProcPktIn()子程序處理ICMP數(shù)據(jù)報并重發(fā)IP數(shù)據(jù)報;若數(shù)據(jù)為UDP數(shù)據(jù)報文,則調(diào)用UDPProcPktIn()子程序。該程序?qū)⒆x入UDP數(shù)據(jù)報文首部的數(shù)據(jù)并進行相應處理,還原出完整的CAN協(xié)議數(shù)據(jù)報文存入數(shù)據(jù)緩沖區(qū)B中,再通知總調(diào)度程序,由總調(diào)度程序調(diào)用CAN總線控制子程序?qū)AN協(xié)議數(shù)據(jù)報文發(fā)往CAN總線。
反過來,當總調(diào)度程序通知以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊將數(shù)據(jù)緩沖區(qū)B中準備好的CAN協(xié)議數(shù)據(jù)發(fā)送到以太網(wǎng)上時,它將調(diào)用NICInitTxFrame()、 udpstartPktOut)、IPGenCheckSum()、IPStartPktout()、NICSendTxFrame()、 UDPEndPktOut()等子函數(shù)進行發(fā)送處理,從而實現(xiàn)CAN總線到以太網(wǎng)的數(shù)據(jù)傳輸。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


關(guān)鍵詞: 系統(tǒng) 接口 Internet 嵌入式

評論


相關(guān)推薦

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

關(guān)閉