亚洲精华国产精华精华液网站,你懂的,娇生惯养4ph归寻(矜以),丰年经继拇中文3与其他教材比较

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 基于MCP2515的多路CAN總線接口及驅動程序設計

基于MCP2515的多路CAN總線接口及驅動程序設計

時間:2008-10-08 11:55:00來源:ronggang

導語:?為了與多個檢測設備通信,必須同時具有多個RS232、RS485和CAN接口。基于這種應用需要,本文提出了擴展多個CAN總線接口的方法
引言   在鐵路系統中,為了保證列車的安全運行,需要對鐵軌及周圍狀況進行實時檢測。目前采用的方法是在鐵路沿線安裝多個檢測設備,用于檢測洪水、大風、泥石流等自然災害及軌溫等參數。這些設備一般采用的通信方式是RS232、RS485或CAN,并通過專線連接至監控中心的各個監控設備。這種方式極大浪費了線路資源,也不易于設備的統一管理。因此,需要一種安裝在鐵路沿線的設備,它將附近的檢測設備發送的信息統一收集并通過一條專線直接送往監控中心。為了與多個檢測設備通信,必須同時具有多個RS232、RS485和CAN接口。基于這種應用需要,本文提出了擴展多個CAN總線接口的方法。 1 系統結構   1.1 芯片介紹系統   采用Atmel公司的AT91RM9200(以下簡稱“9200”)作為MCU。該處理器基于ARM920T內核,主頻為180 MHz時,性能可達到200MIPS;最高主頻為209 MHz。該處理器還具有豐富的外設資源,非常適合工業控制領域的應用[1];采用的操作系統是ARMLinux,內核版本為2.4.19。   目前主流的CAN協議控制器一般采用I/O總線(SJA1000等)或SPI接口(MCP2515等)與MCU進行通信。由于本設計采用PC /104總線擴展卡的方式來擴展多個RS232和RS485接口,沒有多余的I/O片選線可用,因此最終選用9200的SPI接口與MCP2515進行多路CAN總線接口的擴展。   MCP2515是Microchip公司推出的具有SPI接口的獨立CAN控制器。它完全支持CAN V2.0B技術規范,通信速率最高可達1 Mbps,內含3個發送緩沖器、2個接收緩沖器、6個29位驗收濾波寄存器和2個29位驗收屏蔽寄存器[2];它的SPI接口時鐘頻率最高可達10 MHz,可滿足一個SPI主機接口擴展多路CAN總線接口的需要。   1.2 系統硬件接口   圖1是9200與MCP2515的接口原理框圖,通過9200的SPI接口,連接了5個MCP2515。由于9200的SPI從設備片選線數量有限,故采用片選譯碼方式,NPCS0可作為普通的外部中斷線使用(NPCS0與IRQ5復用引腳)。由于9200的外部中斷線資源有限,故采用中斷線共享的方式,即分別有兩個MCP2515共享同一中斷線,最后一個MCP2515獨占一條中斷線,以滿足不同通信速率下數據處理的需要。 [align=center]   圖1 AT91RM9200與MCP2515接口原理框圖[/align]   圖2是MCP2515的外圍CAN總線接口框圖,圖中省略了MCP2515和9200的接口部分。由于設備需要安裝在鐵路沿線,必須具有防雷擊的能力。因此MCP2515與CAN總線收發器(TJA1050)之間采用高速光耦進行完全的電氣隔離,并且光耦兩端電路的電源也必須用電源隔離模塊隔離開,這樣才能真正起到隔離的作用。在TJA1050的CANH和CANL引腳與地之間連接2個30 pF的電容,可以過濾CAN總線上的高頻干擾;2個二極管可以在總線電壓發生瞬變干擾時起保護作用。光耦正常工作時輸入電流為10 mA左右,內部發光二極管的正向電壓降為1.7 V左右,因此要特別注意輸入端串聯電阻的阻值選擇。 [align=center] 圖2 MCP2515 CAN總線接口電路[/align] 2 SPI主機的工作方式   9200通過SPI接口與5個MCP2515進行通信,9200的SPI控制器工作在主機模式,MCP2515工作在從機模式。MCP2515 支持多個指令(如復位指令、讀指令、寫指令等),以便于9200通過SPI接口對MCP2515的內部寄存器進行讀/寫操作。9200 SPI控制器作為主機時工作模式流程如圖3所示[1]。 [align=center] 圖3 AT91RM9200 SPI控制器主機模式流程[/align]   需要注意的是,SPI使能后,只有在SPI_TDR(發送數據寄存器)中有數據時,才會根據片選配置(固定外設或可變外設)使能相應片選;而 SPI_TDR中無數據時,則片選自動禁用。因此,9200向MCP2515連續發送多個字節時,要保證在前一個字節傳輸完畢前,后一個字節就被寫入到 SPI_TDR中,以避免片選被自動禁用;同時,在傳輸完每一個字節后,還要讀取SPI_RDR(接收數據寄存器)。   下面以MCP2515的讀指令為例,說明圖4所示的驅動程序完成一次讀指令操作(只讀一個字節數據)的過程,并假設9200 SPI采用固定外設的片選配置方式。其他指令的軟件實現流程與讀指令類似。 [align=center] 圖4 SPI讀指令操作軟件流程[/align] 3 驅動程序設計   驅動程序是應用程序與硬件之間的中間軟件層,它完全隱蔽了設備工作的細節。Linux操作系統根據設備中信息傳送方式的不同,將設備分成3種類型:字符設備、塊設備和網絡設備[3]。9200與MCP2515的通信都是通過SPI接口以字節為單位進行的,因此MCP2515屬于字符設備。由于5 個MCP2515共享9200的一個SPI接口,因此采用一個驅動程序來管理所有的MCP2515,這樣做有利于對所有設備進行統一管理。   3.1 驅動程序中定義的主要數據結構   CAN總線通信是基于報文幀的,在驅動程序中,無論發送數據還是接收數據都是基于報文幀的操作[4],因此需要設計合適的數據結構以滿足數據操作的需要。   3.1.1接收與發送CAN報文幀結構體      其中,node_num為MCP2515的節點號(0~4),id為CAN報文幀的標識符,dlc為數據長度(0~8),data為CAN報文幀的數據緩沖區,ext_flag用于標識CAN報文幀是否為擴展幀,rtr_flag用于標識CAN報文幀是否為遠程幀。   3.1.2 設備配置結構體   (1) 波特率和報文濾波配置結構體      其中,node_num為MCP2515的節點號(0~4),baudrate為CAN總線通信速率,filter為報文濾波配置結構,br_flag用于標識波特率配置是否有效,fi_flag用于標識報文濾波配置是否有效。 baudrate和filter的數據結構類型定義如下:      (2) 工作模式配置結構體      其中,node_num意義同上,oper_mode表示該節點的工作模式。MCP2515共有5種工作模式,分別是配置模式、休眠模式、僅監聽模式、回環模式和正常模式。一般設備都工作在正常模式。   3.1.3 環形數據接收緩沖區結構體      其中,can_recv_buf為接收CAN報文幀環形數據緩沖區,recv_pos和read_pos分別表示數據存入和讀出緩沖區的位置;wq定義的是一個等待隊列,用于實現阻塞型read操作。   3.2 驅動程序接口   驅動程序的接口主要分為3個部分: 初始化與退出函數接口,完成設備安裝和卸載等操作;文件系統接口,由file_operations數據結構來完成;與設備的接口,完成對設備的讀/寫等操作。   3.2.1 初始化與退出函數   在安裝驅動程序時,操作系統會調用初始化函數進行設備注冊、設備初始化以及安裝中斷處理例程等操作。參考文獻[3]詳細論述了設備注冊的方法,而這里主要討論設備初始化時的配置方法。在本驅動程序中,設備初始化分兩步:一是對9200的SPI控制器初始化,二是對5個MCP2515初始化。   在卸載設備驅動程序時會調用退出函數,退出函數主要完成設備的注銷和中斷釋放。   參考文獻[3]詳細論述了中斷處理例程的安裝、設備注銷和中斷釋放的方法,此處不再詳述。   3.2.2 中斷接收服務例程   MCP2515收到CAN報文幀后,產生中斷并將INT引腳置低。9200響應外部中斷,并調用和外部中斷相對應的中斷處理例程。中斷處理例程共有3個: at91_mcp2515_irq_handler_0響應IRQ0的中斷,at91_mcp2515_irq_handler_1_2響應IRQ1的中斷,at91_mcp2515_irq_handler_3_4響應IRQ2的中斷。其中IRQ0只和一個MCP2515相連,而IRQ1和IRQ2分別被兩個MCP2515所共享。IRQ0和IRQ1的中斷處理流程分別如圖5和圖6所示,IRQ2與IRQ1的中斷處理流程相同。    [align=center] 圖5 IRQ0中斷處理流程[/align] [align=center] 圖6 IRQ1中斷處理流程[/align]   需要注意的是,在圖5的處理流程中并沒有清中斷操作。這是因為采用了RX讀緩沖區指令讀取MCP2515 RX緩沖區中的數據。該指令操作結束后,MCP2515會自動清除相應的接收中斷標志位。   3.2.3 文件系統接口定義   文件系統接口struct file_operations的成員全部是函數指針,這些指針指出了設備驅動程序所提供的入口點位置。本驅動程序所定義的file_operations為:      3.2.4 ioctl函數   ioctl函數用于對設備進行配置。我們在ioctl函數中實現了兩個命令: IOCTRL_CONFIG_CAN_DEV用于配置節點的CAN總線波特率和報文濾波,IOCTRL_SET_OPER_MODE用于配置節點的工作模式。這兩種配置命令所對應的配置參數都是指向應用層相應數據結構的指針,兩個配置結構在3.1.2小節已經介紹過了。   用IOCTRL_CONFIG_CAN_DEV命令配置波特率和報文濾波時,在配置完成后,如果節點處于INACTIVE狀態,則需要使能節點內部的接收中斷,使能節點所對應的外部中斷,并將節點狀態設置為ACTIVE。在通常情況下,通過ioctl函數對需要配置的節點執行完 IOCTRL_CONFIG_CAN_DEV命令后,還要再對配置過的節點執行IOCTRL_SET_OPER_MODE命令,使節點處于正常的工作模式。   3.2.5 關于競爭問題   本系統是單CPU系統,采用Linux 2.4.19內核,且是非搶占式的;同時,此設計的驅動程序也只允許一個進程打開并操作該設備。在這種情況下,驅動程序中所涉及的競爭問題主要就是中斷處理程序內核代碼和其他設備操作的內核代碼之間的資源競爭。在上文中所提到的所有設備操作中,都要通過9200的SPI接口與MCP2515進行通信。 9200與MCP2515進行通信都是以命令字節開始的,并且在一個命令操作過程中(一般會連續傳輸多個字節),片選和時鐘是不能被禁用的,否則操作就會失敗。因此,MCP2515的一個完整的命令操作就是一個臨界區域,在對MCP2515進行一個命令操作的過程中必須禁用所有的中斷,以保證命令操作的正常執行。在驅動程序中,采用local_irq_save和local_irq_restore函數對中斷禁用和恢復,在這兩個函數調用之間,就是對 MCP2515執行一個命令操作的代碼。 結語   本文針對特有的應用需求提出的多路CAN總線接口和驅動程序設計,經過測試,可以穩定正常地運行。關于驅動程序的編譯和運行方法,參考文獻 [3]有很好的說明。上層的測試程序編寫也比較簡單,但要注意數據結構的定義和底層驅動程序的一致性。本文側重介紹設計的基本方法和實現基本的功能。 MCP2515本身提供了許多的功能,在實現基本功能的基礎上,也可以根據自己的應用需要再進行功能擴展。 參考文獻   [1] Atmel corporation. AT91RM9200 data sheet, 2006.   [2] Microchip Technology Inc. MCP2515 data sheet,2005.   [3] 魏永明,駱剛,姜君. LINUX設備驅動程序[M]. 第2版.北京:中國電力出版社,2004.   [4] 杜尚豐,曹曉鐘,徐津.CAN總線測控技術及其應用[M].北京:電子工業出版社,2007.

標簽:

點贊

分享到:

上一篇:基于CAN總線的雙容水箱控制系統

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.siyutn.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 筠连县| 大埔区| 营口市| 黄石市| 广宁县| 扶沟县| 肥城市| 中宁县| 余江县| 吉隆县| 曲阳县| 崇州市| 岚皋县| 云龙县| 清水县| 麟游县| 雅江县| 巴东县| 襄汾县| 绥阳县| 进贤县| 山阳县| 京山县| 彭水| 宁陵县| 达拉特旗| 阿勒泰市| 安化县| 治多县| 福鼎市| 兰坪| 印江| 伊金霍洛旗| 河西区| 界首市| 驻马店市| 壤塘县| 秭归县| 怀宁县| 安远县| 卓资县|