基于ENC28J60的嵌入式以太網(wǎng)/CAN網(wǎng)關(guān)設(shè)計(jì)
2.1.2 數(shù)據(jù)的接收與發(fā)送
LPC2294的每個CAN控制器中有3個發(fā)送緩沖區(qū),發(fā)送數(shù)據(jù)時先查詢CANSR寄存器是否空閑,若空閑才能寫入數(shù)據(jù),然后判斷報文的類型,根據(jù)報文類型調(diào)用相應(yīng)的發(fā)送函數(shù),即對數(shù)據(jù)進(jìn)行封裝并寫入發(fā)送緩沖區(qū),最后調(diào)用發(fā)送命令。為了提高效率,接收數(shù)據(jù)采用中斷方式,首先在CANopen的初始化程序中要使能接收中斷,當(dāng)有中斷發(fā)生,讀取CANICR寄存器,判斷接收中斷標(biāo)志是否置位,如果有則判斷報文的類型,根據(jù)報文類型調(diào)用相應(yīng)的接收函數(shù),處理接收緩沖區(qū)的數(shù)據(jù)。
2.1.3 異常處理
在總線發(fā)生嚴(yán)重故障的情況下,CAN節(jié)點(diǎn)脫離總線,此時下述寄存器位被置位為CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CAN-MOD的RM位。RM將許多CAN控制器功能復(fù)位和禁止。軟件下一步必須置零RM位。發(fā)送錯誤計(jì)數(shù)器將遞減計(jì)數(shù)總線釋放條件(11個連續(xù)的隱性位)的第128個錯誤。軟件通過讀取Tx錯誤計(jì)數(shù)器對計(jì)數(shù)器遞減計(jì)數(shù)的情況進(jìn)行監(jiān)測。
2.2 以太網(wǎng)通信軟件設(shè)計(jì)
2.2.1 ENC28J60的初始化
LPC2294。對ENC28J60的各種操作均通過SPI接口進(jìn)行,包括寄存器的設(shè)置、數(shù)據(jù)的發(fā)送和接收。LPC2294的SPI工作在主動方式,即ENC28J60的SPI時鐘信號由LPC2294提供。ENC28J60初始化內(nèi)容主要有定義ENC28J60發(fā)送緩沖區(qū)的大小,設(shè)置MAC地址與IP地址、子網(wǎng)掩碼、初始化LEDA、LEDB顯示狀態(tài),設(shè)置ENC28J60工作模式。
2.2.2 TCP/IP協(xié)議
該設(shè)計(jì)采用嵌入式系統(tǒng)中廣泛應(yīng)用的LwIP協(xié)議棧。LwIP TCP/IP實(shí)現(xiàn)的特點(diǎn)是在保持協(xié)議主要功能的基礎(chǔ)上減少對RAM的占用,這使協(xié)議棧LwIP適合在低端嵌入式系統(tǒng)中使用。LwIP協(xié)議棧應(yīng)用到的協(xié)議有ARP,IP,IcMP,TCP,UDP,其具有滑動窗口、擁塞控制和接收分片的分組功能。在LwIP中可以有多個網(wǎng)絡(luò)接口,每個網(wǎng)絡(luò)接口都對應(yīng)一個strut netif()。netif包含了相應(yīng)網(wǎng)絡(luò)接口的屬性、收發(fā)函數(shù)。采取調(diào)用netif的方法netif→inpln()及netif→output()進(jìn)行以太網(wǎng)packet的收、發(fā)等操作。在驅(qū)動中主要進(jìn)行的就是實(shí)現(xiàn)網(wǎng)絡(luò)口的收、發(fā)、初始化以及中斷處理。LwIP協(xié)議中沒有提供HTTP協(xié)議,所以需要用原始API函數(shù)編寫HTTP應(yīng)用程序。
2.3 以太網(wǎng)/CAN雙向協(xié)議轉(zhuǎn)換
整個設(shè)計(jì)中最為關(guān)鍵的就是CAN協(xié)議與TCP/IP協(xié)議的相互轉(zhuǎn)換。協(xié)議轉(zhuǎn)換流程圖如圖6所示。本文引用地址:http://2s4d.com/article/152488.htm
其具體過程如下:當(dāng)網(wǎng)關(guān)接收到數(shù)據(jù),首先判斷數(shù)據(jù)類型,如果是從CAN接口接收CAN協(xié)議報文,便分離出數(shù)據(jù)部分,再將報文數(shù)據(jù)部分按系統(tǒng)規(guī)定的應(yīng)用層格式進(jìn)行封裝,然后將應(yīng)用層數(shù)據(jù)存入以太網(wǎng)接口發(fā)送緩沖區(qū),由該接口在數(shù)據(jù)前面依次添加TCP或UDP頭、IP頭、以太幀頭,最后封裝成以太幀后,通過以太網(wǎng)接口發(fā)往以太網(wǎng)。若接收到的以太網(wǎng)數(shù)據(jù),數(shù)據(jù)轉(zhuǎn)換過程相反,依次去掉IP頭、TCP或UDP頭和應(yīng)用層頭,再將應(yīng)用層數(shù)據(jù)按CAN報文格式封裝好后存入CAN接口發(fā)送緩沖區(qū),由CAN接口發(fā)往CAN網(wǎng)絡(luò)中相應(yīng)設(shè)備。若應(yīng)用層數(shù)據(jù)長度大于8 B,則還需將數(shù)據(jù)以8 B為一組進(jìn)行拆分。
3 結(jié) 語
符合IEEE802.3協(xié)議的ENC28J60不僅能提供以太網(wǎng)通信的相應(yīng)功能,而且體積小,能夠簡化設(shè)計(jì),可以設(shè)計(jì)出較小的嵌入式網(wǎng)關(guān)。用上述方法構(gòu)建的通信網(wǎng)關(guān)可實(shí)現(xiàn)以太網(wǎng)與CAN總線之間的協(xié)議轉(zhuǎn)換,為以太網(wǎng)與CAN總線網(wǎng)絡(luò)的互聯(lián)提供了一種傳輸速度快,成本低,穩(wěn)定性和安全性高的解決方案。
評論