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