一種基于A(yíng)RM的嵌入式網(wǎng)關(guān)系統設計與實(shí)現
2 協(xié)議轉換流程
當CAN總線(xiàn)上的設備向Ethernet網(wǎng)發(fā)送數據時(shí),嵌入式網(wǎng)關(guān)將接收到的CAN數據包解析,提取數據域中的內容;然后按照TCP/IP協(xié)議進(jìn)行封裝,嵌入式網(wǎng)關(guān)將經(jīng)過(guò)封裝的數據發(fā)送給以太網(wǎng)控制芯片RTL8019AS。由RTL8019AS自動(dòng)給這些數據添加以太網(wǎng)物理層和邏輯鏈路層所需的相關(guān)信息,通過(guò)物理接口傳送到以太網(wǎng)。反之,當以太網(wǎng)向CAN總線(xiàn)上設備發(fā)送TCP/IP數據包時(shí),它首先將數據發(fā)送到RTL8019AS,嵌入式網(wǎng)關(guān)從RTL8019AS中接收到數據后,提取實(shí)際要傳送的數據,然后封裝成CAN總線(xiàn)數據格式,通過(guò)CAN總線(xiàn)將數據發(fā)送到網(wǎng)絡(luò )中的現場(chǎng)設備。
嵌入式網(wǎng)關(guān)硬件必須具有以太網(wǎng)接口和CAN總線(xiàn)接口,而軟件要有TCP/1P協(xié)議棧和CAN總線(xiàn)驅動(dòng)程序;通常嵌入式Linux內核中有完整的TCP/IP協(xié)議棧。由于REALTEK公司支持Linux的開(kāi)發(fā),Linux系統中已含有RTL8019AS芯片的通用驅動(dòng)程序,CAN總線(xiàn)協(xié)議驅動(dòng)并不是標準配置。因此,設計CAN總線(xiàn)接口及其編制驅動(dòng)程序是實(shí)現嵌入式網(wǎng)關(guān)最主要的工作。
3 CAN驅動(dòng)程序設計
Linux驅動(dòng)程序屬于Linux內核的一部分,是嵌入式系統控制硬件的接口,它為用戶(hù)屏蔽設備的工作細節,并向用戶(hù)提供透明訪(fǎng)問(wèn)硬件設備的機制。驅動(dòng)程序的開(kāi)發(fā)在嵌入式系統開(kāi)發(fā)中具有舉足輕重的地位。開(kāi)發(fā)出穩定、完備的驅動(dòng)程序可提高整個(gè)系統的性能。
3.1 CAN驅動(dòng)程序流程
MCP2510的內部結構框圖如圖2所示。
MCP2510內含3個(gè)發(fā)送緩沖器和2個(gè)接收緩沖器,同時(shí)還具有靈活的中斷管理能力。CAN協(xié)議機負責與CAN總線(xiàn)的接口,SPI接口邏輯用于實(shí)現同MCU的通信,而寄存、緩沖器組與控制邏輯則用來(lái)完成各種方式的設定和操作控制。
在Linux多任務(wù)操作系統中,CAN總線(xiàn)通信程序的設計可分為發(fā)送數據模塊、接收等待模塊和中斷處理模塊實(shí)現。系統中CAN總線(xiàn)的數據發(fā)送和接收是兩個(gè)不同的線(xiàn)程。在驅動(dòng)程序中建立數據發(fā)送和接收緩沖區。中斷處理程序只負責填充(或讀取)緩沖區中的數據,然后喚醒等待接收(或發(fā)送)數據的任務(wù)。數據的發(fā)送與接收都通過(guò)獨立的緩沖區,并由中斷來(lái)實(shí)現。操作系統的中斷響應時(shí)間在軟件上決定了CAN總線(xiàn)數據的最快收發(fā)速度。
3.2 CAN設備驅動(dòng)程序的實(shí)現要點(diǎn)
3.2.1 CAN設備驅動(dòng)操作函數
CAN設備驅動(dòng)程序最終提供給應用程序的是一個(gè)流控制接口,主要包括:open,realse,read,write,ioctl等操作。添加設備驅動(dòng)程序,實(shí)際上就是給上述操作編寫(xiě)相應的程序代碼。驅動(dòng)程序加載到內核時(shí),會(huì )首先運行驅動(dòng)程序的初始化函數,然后等待系統調用在file_operations數據結構中定義的相關(guān)函數,實(shí)現對設備的操作。系統使用Linux 2.4.18版本,其文件系統接口被寫(xiě)義為:
s3c2410_mcp2510_open負責對將要進(jìn)行的I/O操作做好必要的準備工作,主要包括限制CAN打開(kāi)次數、清空3個(gè)發(fā)送緩沖區和2個(gè)接收緩沖區等。
s3c2410_mcp2510_write將要發(fā)送的數據通過(guò)SPI總線(xiàn)將數據傳送MCP2510的發(fā)送緩沖器,再通過(guò)MCP2510將數據發(fā)送到CAN總線(xiàn)。
評論