一種低成本的Ehternet嵌入式系統的設計
TJA1050為CAN收發器,是CAN協議控制器和物理總線之間的接口,可以對CAN總線提供差動發送和接收能力。微控制器對CAN控制器進行相應配置后,收發器自動完成相應的CAN總線動作。有較強的抗干擾能力,最多節點數可達110個。
采用高速光耦6N137實現SJA1000與TJA1050之間的電氣隔離,保護控制系統電路,以滿足在最高速率1M/s下的電氣響應。
二、軟件設計
整個系統的軟件分為兩部分:CAN控制器協議轉換模塊和以太網控制器協議轉換模塊。其程序結構如圖2所示。
圖2 主程序結構圖
當以太網應用層有數據要發送到CAN節點時,首先由以太網控制器協議轉換模塊從傳輸層數據報文中解析出完整的CAN協議數據包,存放在數據緩沖區A中,再通知總調度模塊,由它調用CAN控制器協議模塊將CAN協議數據包發送到CAN總線上。反過來,當CAN設備有數據要發送到用戶層時,先由CAN控制器協議轉換模塊將完整的CAN協議數據包存放在數據緩沖區B中,再通知總調度模塊,由它調用以太網控制器協議轉換模塊,將完整的CAN協議數據包作為應用層數據封裝起來,再發送到以太網的應用。
(一)CAN控制器協議轉換模塊
CAN通信協議有四種不同的幀格式,本系統中使用標準幀格式,其格式如表1所示。CAN首先接收仲裁域,根據仲裁域的內容判斷所接收的信號是哪種幀格式,然后用戶將相應的數據寫入數據域中進行發送,或從數據域中讀取接收到的數據。
表1 幀傳送格式
CAN控制器協議轉換模塊主要由SJA1000的寄存器讀程序CANRead()、寫程序、CANWrite()、初始化程序CANInit()、發送程序Txdsub()和接收程序Rxdsub()組成。
選用CAN2.0A協議構建CAN總線控制網絡,對SJA1000的初始化主要包括對控制寄存器CR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、總線定時寄存器BTR0/1和輸出控制寄存器OCR的設置。初始化完成后,由總調度模塊監控SJA1000控制器。當CAN總線上有數據到達時,通過中斷方式調用接收子程序Rxdsub(),把這一幀數據存入數據緩沖區B中,然后翻譯接收緩沖器。同樣,當有按CAN2.0A協議格式組合成的一幀數據報文在數據緩沖區A中要發送到CAN總線上去時,總調度模塊調用CAN發送子程序Txdsub()發送。
(二)以太網控制器協議轉換模塊
一個標準的以太網物理傳輸幀如表2所示(單位:字節)。
表2 以太網的物理傳輸幀結構表
除數據段的長度不定外,其他部分的長度都固定不變。以太網規定整個傳輸包的最大長度不能超過1514字節(14字節為DA、SA、TYPE),最小大能小于60字節。除去DS、SA、TYPE14字節外,還必須傳輸46字節的數據,當數據段的數據不足46字節時需填充,填充字符的個數不包括在長度字段里;超過1500個字節時,需拆成多個幀傳送。
以太網控制器協議轉換模塊主要負責從UDP數據包中解析出完整的CAN協議報文,存入數據緩沖區A中。同時,也可以將數據緩沖區B中的完整CAN協議報文封裝成UDP數據報,然后將其發送到以太網上。
主程序工作流程圖如圖3所示,單片機首先初始化網絡設備。網卡IP地址和物理地址存于單片機的EEPROM中,單片機復位后首先讀取這些數據以初始化網卡。
圖3 主程序工作流程圖
網卡初始化完成以后,當有數據從RJ45過來時,單片機對數據包進行分析,如果是ARP(物理地址解析協議)數據包,則程序轉入ARP處理程序。如果是IP(網間協議)數據包且傳輸層使用UDP(用戶數據報協議),端口正確,則認為數據報正確,數據解包后,送入數據緩沖區A,最后把數據部分通過CAN接口輸出。反之,如果單片機從CAN接口收到數據,則將數據按照UDP協議格式打包,送入數據緩沖區B,由RTL8019AS將數據輸出到局域網中。
本系統在通信傳輸層來采UDP協議是考慮到CAN協議數據報為短幀形式(每個數據幀最多為8字節)。如果采用TCP傳輸協議,要傳輸8個字節CAN協議數據,需先通過三次握手建立連接,再傳輸數據,之后還要通過握手釋放連接。這樣的傳輸效率對有限的網絡資源來說無疑是一種浪費。而UDP是無連接的傳輸,可以提高網絡傳輸效率,同時也可以減輕網關的處理任務壓力。UDP傳輸協議可靠性的不足之處可以采用加傳校驗機制來改善。通過實驗測試,表明這種方法是行之有效的。
本文介紹了種低成本、高可靠性、快捷的嵌入式CAN總線與以太網互連的軟硬件實現方法。該互連方案保證了管理監控層與生產測控層之間的連接,方便了上下層信息交流,適用于現有的網絡傳輸系統,有著廣泛的應用前景。特別是在數據采集和數據傳輸領域中,可以廣泛地應用于嵌入式網絡接口功能的設計中。
評論