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