利用MCP2515的多路CAN總線(xiàn)接口及驅(qū)動(dòng)程序設(shè)計(jì)_第1頁(yè)
利用MCP2515的多路CAN總線(xiàn)接口及驅(qū)動(dòng)程序設(shè)計(jì)_第2頁(yè)
利用MCP2515的多路CAN總線(xiàn)接口及驅(qū)動(dòng)程序設(shè)計(jì)_第3頁(yè)
利用MCP2515的多路CAN總線(xiàn)接口及驅(qū)動(dòng)程序設(shè)計(jì)_第4頁(yè)
利用MCP2515的多路CAN總線(xiàn)接口及驅(qū)動(dòng)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、利用MCP2515的多路CAN總線(xiàn)接口及驅(qū)動(dòng)程序設(shè)計(jì) 結(jié)合實(shí)際需求,提出一種多路CAN總線(xiàn)接口的設(shè)計(jì)方法。系統(tǒng)硬件主體采用AT91RM9200和MCP2515, 操作系統(tǒng)采用ARMLinux。詳細(xì)介紹硬件的接口設(shè)計(jì),針對(duì)該硬件接口設(shè)計(jì)分析ARMLinux下的驅(qū)動(dòng)程序 的設(shè)計(jì)方法,并對(duì)驅(qū)動(dòng)程序?qū)崿F(xiàn)過(guò)程中需要注意的問(wèn)題進(jìn)行了深入分析。經(jīng)過(guò)測(cè)試,該設(shè)計(jì)方案可以滿(mǎn)足 應(yīng)用的要求。關(guān)鍵詞 AT91RM9200 MCP2515 ARM-Linux CAN SPI 驅(qū)動(dòng)程序引言在鐵路系統(tǒng)中,為了保證列車(chē)的安全運(yùn)行,需要對(duì)鐵軌及周?chē)鸂顩r進(jìn)行實(shí)時(shí)檢測(cè)。目前采用的方法是 在鐵路沿線(xiàn)安裝多個(gè)檢測(cè)設(shè)備,用于檢測(cè)洪水、

2、大風(fēng)、泥石流等自然災(zāi)害及軌溫等參數(shù)。這些設(shè)備一般采 用的通信方式是RS232、RS485或CAN,并通過(guò)專(zhuān)線(xiàn)連接至監(jiān)控中心的各個(gè)監(jiān)控設(shè)備。這種方式極大浪 費(fèi)了線(xiàn)路資源,也不易于設(shè)備的統(tǒng)一管理。因此,需要一種安裝在鐵路沿線(xiàn)的設(shè)備,它將附近的檢測(cè)設(shè)備 發(fā)送的信息統(tǒng)一收集并通過(guò)一條專(zhuān)線(xiàn)直接送往監(jiān)控中心。為了與多個(gè)檢測(cè)設(shè)備通信,必須同時(shí)具有多個(gè) RS232、RS485和CAN接口?;谶@種應(yīng)用需要,本文提出了擴(kuò)展多個(gè)CAN總線(xiàn)接口的方法。1系統(tǒng)結(jié)構(gòu)1.1芯片介紹系統(tǒng)采用Atmel公司的AT91RM9200(以下簡(jiǎn)稱(chēng)“9200”作為MCU。該處理器基于ARM920T內(nèi)核,主 頻為180 MHz時(shí),性能可

3、達(dá)到200MIPS;最高主頻為209 MHz。該處理器還具有豐富的外設(shè)資源,非常 適合工業(yè)控制領(lǐng)域的應(yīng)用1;采用的操作系統(tǒng)是ARMLinux,內(nèi)核版本為2.4.19。目前主流的CAN協(xié)議控制器一般采用I/O總線(xiàn)(SJA1000等)或SPI接口(MCP2515等)與MCU 進(jìn)行通信。由于本設(shè)計(jì)采用PC/104總線(xiàn)擴(kuò)展卡的方式來(lái)擴(kuò)展多個(gè)RS232和RS485接口,沒(méi)有多余的I/O 片選線(xiàn)可用,因此最終選用9200的SPI接口與MCP2515進(jìn)行多路CAN總線(xiàn)接口的擴(kuò)展。MCP2515是Microchip公司推出的具有SPI接口的獨(dú)立CAN控制器。它完全支持CAN V2.0B技術(shù) 規(guī)范,通信速率最高

4、可達(dá)1 Mbps,內(nèi)含3個(gè)發(fā)送緩沖器、2個(gè)接收緩沖器、6個(gè)29位驗(yàn)收濾波寄存器和2 個(gè)29位驗(yàn)收屏蔽寄存器2;它的SPI接口時(shí)鐘頻率最高可達(dá)10 MHz,可滿(mǎn)足一個(gè)SPI主機(jī)接口擴(kuò)展多路 CAN總線(xiàn)接口的需要。1.2 系統(tǒng)硬件接口圖1是9200與MCP2515的接口原理框圖,通過(guò)9200的SPI接口,連接了 5個(gè)MCP2515。由于9200 的SPI從設(shè)備片選線(xiàn)數(shù)量有限,故采用片選譯碼方式,NPCS0可作為普通的外部中斷線(xiàn)使用(NPCS0與 舊Q5復(fù)用引腳)。由于9200的外部中斷線(xiàn)資源有限,故采用中斷線(xiàn)共享的方式,即分別有兩個(gè)MCP2515 共享同一中斷線(xiàn),最后一個(gè)MCP2515獨(dú)占一條中斷

5、線(xiàn),以滿(mǎn)足不同通信速率下數(shù)據(jù)處理的需要。皿必IMESO.JKWM I Is?ckMCSMISONFCSONPCS10DJN .YdYlY2Y3Y4Y5作Y7AnAA2uau Al-lHK rCIOS wEssen匚禮cs】es車(chē)CS1s收&M05LSISO0SC:KSI ; MO : 0 ; ImMOMSPISCXISIISOIB 而IKTgpocMUS【_M30mKMusIL) -FTSCSE 再寫(xiě).MISO圖1 AT91RM9200與MCP2515接口原理框圖SPCK LJ,ME M.MISO 1$1217 *-1 IRT漏離)5V(PHH)早皿3 TIaIOJORXCAXCLKUTTxu

6、arsIXII RTSTX2R.TS5V(璃即圖2 MCP2515 CAN總線(xiàn)接口電路c.-:.CaNHC:ANLNDC3$C2應(yīng)】IFfNIN4I4SX23QpF 心隔離地3,3V TmCP255SCKJSOCS5TTVcrjKtSLTKX015hRxinrGNDNCVoVFV,:V,.V(1Nt;圖2是MCP2515的外圍CAN總線(xiàn)接口框圖,圖中省略了 MCP2515和9200的接口部分。由于設(shè)備 需要安裝在鐵路沿線(xiàn),必須具有防雷擊的能力。因此MCP2515與CAN總線(xiàn)收發(fā)器(TJA1050)之間采用 高速光耦進(jìn)行完全的電氣隔離,并且光耦兩端電路的電源也必須用電源隔離模塊隔離開(kāi),這樣才能真

7、正起 到隔離的作用。在TJA1050的CANH和CANL引腳與地之間連接2個(gè)30 pF的電容,可以過(guò)濾CAN總 線(xiàn)上的高頻干擾;2個(gè)二極管可以在總線(xiàn)電壓發(fā)生瞬變干擾時(shí)起保護(hù)作用。光耦正常工作時(shí)輸入電流為10 mA左右,內(nèi)部發(fā)光二極管的正向電壓降為1.7 V左右,因此要特別注意輸入端串聯(lián)電阻的阻值選擇。2 SPI主機(jī)的工作方式9200通過(guò)SPI接口與5個(gè)MCP2515進(jìn)行通信,9200的SPI控制器工作在主機(jī)模式,MCP2515工 作在從機(jī)模式。MCP2515支持多個(gè)指令(如復(fù)位指令、讀指令、寫(xiě)指令等),以便于9200通過(guò)SPI接口 對(duì)MCP2515的內(nèi)部寄存器進(jìn)行讀/寫(xiě)操作。9200 SPI控

8、制器作為主機(jī)時(shí)工作模式流程如圖3所示1。NPCSSP I DRPCS) NPCS=SP I MRfPCS) |SPCKijil.hNPC9-(kF*選延瑁I圖3 AT91RM9200 SPI控制器主機(jī)模式流程需要注意的是,SPI使能后,只有在SPI_TDR(發(fā)送數(shù)據(jù)寄存器)中有數(shù)據(jù)時(shí),才會(huì)根據(jù)片選配置(固 定外設(shè)或可變外設(shè))使能相應(yīng)片選;而SPI_TDR中無(wú)數(shù)據(jù)時(shí),則片選自動(dòng)禁用。因此,9200向MCP2515 連續(xù)發(fā)送多個(gè)字節(jié)時(shí),要保證在前一個(gè)字節(jié)傳輸完畢前,后一個(gè)字節(jié)就被寫(xiě)入到SPI_TDR中,以避免片 選被自動(dòng)禁用;同時(shí),在傳輸完每一個(gè)字節(jié)后,還要讀取SPI_RDR (接收數(shù)據(jù)寄存器)。

9、下面以MCP2515的讀指令為例,說(shuō)明圖4所示的驅(qū)動(dòng)程序完成一次讀指令操作(只讀一個(gè)字節(jié)數(shù)據(jù)) 的過(guò)程,并假設(shè)9200 SPI采用固定外設(shè)的片選配置方式。其他指令的軟件實(shí)現(xiàn)流程與讀指令類(lèi)似。$PI TDE?(rD)-讀於令宇 T圖4 SPI讀指令操作軟件流程3驅(qū)動(dòng)程序設(shè)計(jì)驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的中間軟件層,它完全隱蔽了設(shè)備工作的細(xì)節(jié)。Linux操作系統(tǒng)根據(jù)設(shè) 備中信息傳送方式的不同,將設(shè)備分成3種類(lèi)型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備3。9200與MCP2515 的通信都是通過(guò)SPI接口以字節(jié)為單位進(jìn)行的,因此MCP2515屬于字符設(shè)備。由于5個(gè)MCP2515共享 9200的一個(gè)SPI接口,因

10、此采用一個(gè)驅(qū)動(dòng)程序來(lái)管理所有的MCP2515,這樣做有利于對(duì)所有設(shè)備進(jìn)行統(tǒng) 一管理。3.1驅(qū)動(dòng)程序中定義的主要數(shù)據(jù)結(jié)構(gòu)CAN總線(xiàn)通信是基于報(bào)文幀的,在驅(qū)動(dòng)程序中,無(wú)論發(fā)送數(shù)據(jù)還是接收數(shù)據(jù)都是基于報(bào)文幀的操作4, 因此需要設(shè)計(jì)合適的數(shù)據(jù)結(jié)構(gòu)以滿(mǎn)足數(shù)據(jù)操作的需要。3.1.1接收與發(fā)送CAN報(bào)文幀結(jié)構(gòu)體typedef struct (unsigned char node_num;unsigned intid;unsigned char dlc;unsigned char data8;int ext_flag;int rtr_flag; CanFrame;其中,node_num為MCP2515的節(jié)點(diǎn)號(hào)

11、(04),id為CAN報(bào)文幀的標(biāo)識(shí)符,dlc為數(shù)據(jù)長(zhǎng)度(0 8),data為CAN報(bào)文幀的數(shù)據(jù)緩沖區(qū),ext_flag用于標(biāo)識(shí)CAN報(bào)文幀是否為擴(kuò)展幀,rtr_flag用于標(biāo)識(shí) CAN報(bào)文幀是否為遠(yuǎn)程幀。3.1.2設(shè)備配置結(jié)構(gòu)體波特率和報(bào)文濾波配置結(jié)構(gòu)體typedef struct(unsigned charnode_num;CanBaudRatebaudrate;CanFilter filter;int br_flag;int fi_flag; CanDevConfig;其中,node_num為MCP2515的節(jié)點(diǎn)號(hào)(04), baudrate為CAN總線(xiàn)通信速率,filter為報(bào)文濾 波配

12、置結(jié)構(gòu),br_flag用于標(biāo)識(shí)波特率配置是否有效,fi_flag用于標(biāo)識(shí)報(bào)文濾波配置是否有效。baudrate 和filter的數(shù)據(jù)結(jié)構(gòu)類(lèi)型定義如下:typedef enum (_125kbps,_250kbps,_500kbps,_1Mbps CanBaudRate;typedef struct(unsigned int mask_0;unsigned int mask_1;unsigned int filter_0;unsigned int filter_1;unsigned int filter_2;unsigned int filter_3;unsigned int filter_4;

13、unsigned int filter_5;CanFilter;工作模式配置結(jié)構(gòu)體typedef struct(unsigned char node_num;unsigned char oper_mode; CanDevMode;其中,node_num意義同上,oper_mode表示該節(jié)點(diǎn)的工作模式。MCP2515共有5種工作模式,分 別是配置模式、休眠模式、僅監(jiān)聽(tīng)模式、回環(huán)模式和正常模式。一般設(shè)備都工作在正常模式。3.1.3環(huán)形數(shù)據(jù)接收緩沖區(qū)結(jié)構(gòu)體typedef struct (CanFrame can_recv_bufRECV_BUF_SIZE;int recv_pos;int read_

14、pos;wait_queue_head_twq; CanDev;其中,can_recv_buf為接收CAN報(bào)文幀環(huán)形數(shù)據(jù)緩沖區(qū),recv_pos和read_pos分別表示數(shù)據(jù)存入 和讀出緩沖區(qū)的位置;wq定義的是一個(gè)等待隊(duì)列,用于實(shí)現(xiàn)阻塞型read操作。3.2驅(qū)動(dòng)程序接口驅(qū)動(dòng)程序的接口主要分為3個(gè)部分:初始化與退出函數(shù)接口,完成設(shè)備安裝和卸載等操作;文件系統(tǒng) 接口,由file_operations數(shù)據(jù)結(jié)構(gòu)來(lái)完成;與設(shè)備的接口,完成對(duì)設(shè)備的讀/寫(xiě)等操作。3.2.1初始化與退出函數(shù)在安裝驅(qū)動(dòng)程序時(shí),操作系統(tǒng)會(huì)調(diào)用初始化函數(shù)進(jìn)行設(shè)備注冊(cè)、設(shè)備初始化以及安裝中斷處理例程等 操作。參考文獻(xiàn)3詳細(xì)論述了設(shè)

15、備注冊(cè)的方法,而這里主要討論設(shè)備初始化時(shí)的配置方法。在本驅(qū)動(dòng)程序 中,設(shè)備初始化分兩步:一是對(duì)9200的SPI控制器初始化,二是對(duì)5個(gè)MCP2515初始化。在卸載設(shè)備驅(qū)動(dòng)程序時(shí)會(huì)調(diào)用退出函數(shù),退出函數(shù)主要完成設(shè)備的注銷(xiāo)和中斷釋放。參考文獻(xiàn)3詳細(xì)論述了中斷處理例程的安裝、設(shè)備注銷(xiāo)和中斷釋放的方法,此處不再詳述。3.2.2中斷接收服務(wù)例程MCP2515收到CAN報(bào)文幀后,產(chǎn)生中斷并將INT引腳置低。9200響應(yīng)外部中斷,并調(diào)用和外部中 斷相對(duì)應(yīng)的中斷處理例程。中斷處理例程共有3個(gè):at91_mcp2515_irq_handler_0響應(yīng)舊Q0的中斷, at91_mcp2515_irq_handle

16、r_1_2 響應(yīng)舊Q1 的中斷,at91_mcp2515_irq_handler_3_4 響應(yīng)舊Q2 的中斷。 其中 舊Q0只和一個(gè)MCP2515相連,而舊Q1和舊Q2分別被兩個(gè)MCP2515所共享。IRQ0和舊Q1的 中斷處理流程分別如圖5和圖6所示,IRQ2與舊Q1的中斷處理流程相同。圖5舊Q0中斷處理流程喚醒等待認(rèn)列中的遇程中斷SbJlUi程圖6舊Q1中斷處理流程需要注意的是,在圖5的處理流程中并沒(méi)有清中斷操作。這是因?yàn)椴捎昧薘X讀緩沖區(qū)指令讀取 MCP2515 RX緩沖區(qū)中的數(shù)據(jù)。該指令操作結(jié)束后,MCP2515會(huì)自動(dòng)清除相應(yīng)的接收中斷標(biāo)志位。3.2.3文件系統(tǒng)接口定義文件系統(tǒng)接口 s

17、truct file_operations的成員全部是函數(shù)指針,這些指針指出了設(shè)備驅(qū)動(dòng)程序所提供的 入口點(diǎn)位置。本驅(qū)動(dòng)程序所定義的file_operations為:static struct file_operations at91_mcp2515_fops = (owner: THIS_MODULE,write: at91_mcp2515_write,read:at91_mcp2515_read,ioctl: at91_mcp2515_ioctl,open: at91_mcp2515_open,release:at91_mcp2515_release,;3.2.4 ioctl 函數(shù)ioctl

18、函數(shù)用于對(duì)設(shè)備進(jìn)行配置。我們?cè)趇octl函數(shù)中實(shí)現(xiàn)了兩個(gè)命令:IOCTRL_CONFIG_CAN_DEV 用于配置節(jié)點(diǎn)的CAN總線(xiàn)波特率和報(bào)文濾波,IOCTRL_SET_OPER_MODE用于配置節(jié)點(diǎn)的工作模式。 這兩種配置命令所對(duì)應(yīng)的配置參數(shù)都是指向應(yīng)用層相應(yīng)數(shù)據(jù)結(jié)構(gòu)的指針,兩個(gè)配置結(jié)構(gòu)在3.1.2小節(jié)已經(jīng) 介紹過(guò)了。用IOCTRL_CONFIG_CAN_DEV命令配置波特率和報(bào)文濾波時(shí),在配置完成后,如果節(jié)點(diǎn)處于 INACTIVE狀態(tài),則需要使能節(jié)點(diǎn)內(nèi)部的接收中斷,使能節(jié)點(diǎn)所對(duì)應(yīng)的外部中斷,并將節(jié)點(diǎn)狀態(tài)設(shè)置為 ACTIVEo在通常情況下,通過(guò)ioctl函數(shù)對(duì)需要配置的節(jié)點(diǎn)執(zhí)行完IOCTRL_CONFIG_CAN_DEV命令后, 還要再對(duì)配置過(guò)的節(jié)點(diǎn)執(zhí)行IOCTRL_SET_OPER_MODE命令,使節(jié)點(diǎn)處于正常

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論