引言 CAN (Controller Area Network)現場總線是一種支持分布式控制系統或實時性控制的串行通信網絡.具有成本低、可靠性高、抗干擾能力和實時性強等特性,是最普及的工業現場總線之一。CAN總線現在己經廣泛應用于諸多領域.具有較強的市場競爭力,但要充分發揮它的組網控制功能,打破地域界限,實現遠程控制,就必須借助于現在被廣泛應用的以太網(Ethemet)技術。 1 系統設計方案 本文所設計的嵌入式協議轉換網關,可以實現CAN總線與以太網的互聯,即實現以太網能夠通過網關讀取CAN總線上的數據,同時也可以向CAN總線發送命令以實現上位機對現場設備的監控。如圖1網關架構圖所示。 ![]() 圖1控制器架構圖 本系統的硬件要求功能強大,能夠提供足夠的平臺,因此選擇S3C2410X處理器。S3C2410X微處理器是Samsung公司為手持設備設計的低功耗、高集成度的基于ARM920T核的微處理器。S3C2410X內部沒有集成的以太網控制器,所以系統設計中選擇RTL8019AS控制器作為以太網控制器。另外S3C2410X中也沒有集成的CAN控制器,在此選擇MCP2510為CAN控制器,S3C2410X通過SPI端口控制MCP2510。 軟件設計方面,由于以太網協議比較復雜,由于所選的微處理器和以太網協議比較復雜,以及系統對時間要求比較苛刻.為了更好的管理微處理器,選擇了Linux操作系統作為軟件開發平臺。選擇在S3C2410X處理器上運行Linux操作系統,可以為以后的功能拓展打下一個很好的基礎,在此基礎上擴展功能,無須再改變處理器和操作系統。 2 系統硬件電路設計 本文確定采用ARM9控制器S3C2410芯片為核心微處理器,以及源代碼開放的“nux操作系統。其中硬件平臺南核心模塊和外同電路組成。核心模塊上設計有S3C2410X微處理器、SDRAM存儲器、F1ash存儲器。采用該核心模塊作為核心處理器,在硬件電路設計過程中只需設計其外圍電路。 2.1電源電路設計 ![]() 圖2 系統5V電源電路原理圖 系統中電源的設計是至關重要的,因為它是系統工作的源動力,因此電源的設計也要非常謹慎.要考慮所設計的電源在達到系統穩定工作要求的同時,還要減少系統功耗。在該設計中,需要使用到5V,3.3V和1.8V的直流穩壓電源。由于ARM核心板內含有1.8v內核供電電源,因此只需提供5V和3.3V的供電電路,其電源電路分別如網2,圖3所示。 ![]() 圖3系統3.3V電源電路原理圖 2.2復位電路設計 復位電路的設計是為了在系統工作異常時,能夠進行復位,使得系統重新同到正常狀態。當nRESET信號變為低時,ARM920T就會放棄所有正在執行的程序,然后從停止點以下的指令地址中取出指令,復位電路圖如4所示。 ![]() 圖4系統復位電路原理圖 2.3串口電路設計 串行端口的本質功能是作為CPU和串行設備間的編碼轉換器,RS232串行接口電路用于網關系統與應用系統的短距離雙向串行通訊。在本設計中采用的是DB-9接口。在本設計中,虛擬機通過串口向目標機發送命令和接收命令,如在打開目標機時要啟動目標機的Linux系統,命令run loadlinux就是通過串口到達目標機的,同樣,還有一系列其他的命令語句,都是通過串口實現目標機與虛擬機的必要的命令通訊,串口的電路原理圖如下圖6所示。 ![]() 圖5系統串口電路原理圖 圖中表示了RS-232接13與目標機之問的連接關系,它們之間包括了一個SP3232ECA電壓轉換芯片,SP3232ECA如圖中所示,DB-9是接至虛擬機端的,虛擬機需要的工作電壓為5v,而目標機即ARM核心板上的一r作電壓為3.3v,要在兩者問進行數據發送或接收時需進行電平轉換。SP3232ECA在接至目標機端時,R1OUT和R20UT串接電阻用來防止意外的邏輯混亂。 2.4 CAN接口電路設計 在S3C2410X處理器中沒有直接嵌入的CAN接口,所以要選擇獨立的CAN控制器。由于S3C2410X處理器設有SPI接口,MCP2510控制器的引腳設計中也包括了SPI接口,這樣CAN控制器MCP2510可以通過SPI接口與處理器的SPI接口相連,簡化端口電路的設計,所以設計中所選則MCP2510作為CAN控制器。 MCP2510主要由3部分組成:CAN協議引擎:用來為器件及其運行進行配置的控制邏輯和SRAM寄存器:SPI協議模塊。CAN協議引擎的功能是處理所有總線上的報文發送和接收。CPU通過SPI接口與器件進行通信。通過使用標準SPI讀寫命令對寄存器所有讀寫操作。MCP2510采用標準的4MHz晶體,內部寄存器的控制分頻系數來調節。它的輸出到總線的速率也可通過設置MCP2510的SPI接口與S3C2410X的SPIO相應的接口相連,實現CPU對其的控制。MCP2510控制器發送輸出和接收輸入引腳通過光電隔離連接到CAN總線收發器TJAl050上,光電隔離采用高速通信光耦6N137芯片,保證了節點之間在電氣上的完全隔離和獨立,提高了電路的穩定性和安全性。 2.5以太網接口電路設計 在本設計中RTL.8019AS是以太網控制的核心,10M以太網接口為系統提供了以太網接入的物理通道,它與S3C2410X的相應引腳相連,實現以太網的讀寫功能。RTL8019AS與S3C2410X相連的引腳如下表1所示。 ![]() 表1 RTL8019AS與S3C2410X相連的引腳 3 系統軟件程序設計 3.1CAN控制器的驅動程序設計 CAN控制器的初始化流程圖如下圖6所示。其過程包括硬件使能、軟件復位、內部設置的初始化和啟動CAN等。 ![]() 圖6 CAN控制器驅動流程圖 驅動程序的源文件共有三個:mcpcan.c,spi_cmd.c和spi.co要把三個源文件合并編譯鏈接成一個.O為后綴的驅動模塊。在Makefile中用了如下命令行: $(EXEC):$(OBJS) $(LD)$(LDFLAGS)-o$@S(OBJS) 即/usr/local/arm/2.95.3/bin/arm-linux-ld -r candrv.o mcpcan.o spi_cmd.o spi.o 因為對MCP2510這個CAN控制器芯片的操作是靠CPU給它發送SPI (串行外設接口}命令來實現的,所以要用到S3C2410的關于SPI的那螳特殊功能寄存器。 3.2MCP2510控制器應用程序 MCP2510控制器應用程序主要包括了接收和發送兩部分。報文發送函數為 void MCP2510_TX (int TxBuf,int IdType,unsigned int id,int DataLen.,char* data) 通過TxBuf參數指定發送到那個緩沖器(TXBUF0,TXBUFl,TXBUF2)。IdType決定發送報文幀的類型,STANDID表示標準數據幀,EXTID表承擴展數據幀。 報文接受函數為:void MCP251O_TX (int TxBuf, IdType, unsigned int id.,int Data,char * data)通過TxBuf參數指定從哪個緩沖器接收((RXBUFO或RXBUFl)。接收后的報文幀的類型、幀ID、數據長度以數據內容分別保存在IdType,id,DataLen 和data中。 在應用程序中創建了一個線程send專門負責發送數據,再在主線程中接收數據到一個mepcan_data結構體中并打印出來。 ret=pthread_create(&id,NULL(void*) send,&data_send); if(ret!=o){ printf("Create pthread error! \n"); exit (1);} printf("Create pthread success. \n"); 在send線程中對打開的設備接述符進行write操作,在主線程中對該設備描述符進行read操作。因為在驅動中已經考慮到了互斥,所以線程中沒有做并發處理。 4 結論 本文的創新點:本文對嵌入式網關設備發展情況及以太網與CAN總線相互連接與通訊問題進行深入的研究,在對嵌入式系統和網關設備的學習、分析比較的基礎上,選用功能強大的、具有很大擴展空聞的Linux操作系統和32位的S3C2410X處理器,作為研究開發平臺,針對S3C2410X處理器,完成其外圍硬件電路的設計,包含有電源電路、復位電路,為系統提供正常工作的條件;操作系統的完成參考ARM9嵌入式技術及Linux高級實踐教程中的建立、安裝、配置、移植等工作。完成了對CAN控制器MCP2510和以太網控制器RTL8019AS的硬件驅動。并在Linux下編寫了CAN總線和以太網的應用程序。 已經產生經濟效益200萬元。 作者:張海春,肖亞 來源:《微計算機信息》《嵌入式專SOC)2009年第2-2期 |