基于MCP2515的多路CAN總線接口及驅動程序設計
引 言
本文引用地址:http://www.j9360.com/article/82980.htm在鐵路系統中,為了保證列車的安全運行,需要對鐵軌及周圍狀況進行實時檢測。目前采用的方法是在鐵路沿線安裝多個檢測設備,用于檢測洪水、大風、泥石流等自然災害及軌溫等參數。這些設備一般采用的通信方式是RS232、RS485或CAN,并通過專線連接至監控中心的各個監控設備。這種方式極大浪費了線路資源,也不易于設備的統一管理。因此,需要一種安裝在鐵路沿線的設備,它將附近的檢測設備發送的信息統一收集并通過一條專線直接送往監控中心。為了與多個檢測設備通信,必須同時具有多個RS232、RS485和CAN接口。基于這種應用需要,本文提出了擴展多個CAN總線接口的方法。
1 系統結構
1.1 芯片介紹
系統采用Atmel公司的AT91RM9200(以下簡稱“9200”)作為MCU。該處理器基于ARM920T內核,主頻為180 MHz時,性能可達到200MIPS;最高主頻為209MHz。該處理器還具有豐富的外設資源,非常適合工業控制領域的應用;采用的操作系統是ARM-Linux,內核版本為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位驗收屏蔽寄存器;它的SPI接口時鐘頻率最高可達10 MHz,可滿足一個SPI主機接口擴展多路CAN總線接口的需要。
1.2 系統硬件接口
圖1是9200與MCP2515的接口原理框圖,通過9200的SPI接口,連接了5個MCP2515。由于9200的SPI從設備片選線數量有限,故采用片選譯碼方式,NPCS0可作為普通的外部中斷線使用(NPCS0與IRQ5復用引腳)。由于9200的外部中斷線資源有限,故采用中斷線共享的方式,即分別有兩個MCP2515共享同一中斷線,最后一個MCP2515獨占一條中斷線,以滿足不同通信速率下數據處理的需要。
圖2是MCP2515的外圍CAN總線接口框圖,圖中省略了MCP2515和9200的接口部分。由于設備需要安裝在鐵路沿線,必須具有防雷擊的能力。因此MCP2515與CAN總線收發器(TJA1050)之間采用高速光耦進行完全的電氣隔離,并且光耦兩端電路的電源也必須用電源隔離模塊隔離開,這樣才能真正起到隔離的作用。在TJA1050的CANH和CANL引腳與地之間連接2個30 pF的電容,可以過濾CAN總線上的高頻干擾;2個二極管可以在總線電壓發生瞬變干擾時起保護作用。光耦正常工作時輸入電流為10 mA左右,內部發光二極管的正向電壓降為1.7 V左右,因此要特別注意輸入端串聯電阻的阻值選擇。
2 SPI主機的工作方式
9200通過SPI接口與5個MCP2515進行通信,9200的SPI控制器工作在主機模式,MCP2515工作在從機模式。MCP2515支持多個指令(如復位指令、讀指令、寫指令等),以便于9200通過SPI接口對MCP2515的內部寄存器進行讀/寫操作。9200 SPI控制器作為主機時工作模式流程如圖3所示。
需要注意的是,SPI使能后,只有在SPI_TDR(發送數據寄存器)中有數據時,才會根據片選配置(固定外設或可變外設)使能相應片選;而SPI_TDR中無數據時,則片選自動禁用。因此,9200向MCP2515連續發送多個字節時,要保證在前一個字節傳輸完畢前,后一個字節就被寫入到SPI_TDR中,以避免片選被自動禁用;同時,在傳輸完每一個字節后,還要讀取SPI_RDR(接收數據寄存器)。
下面以MCP2515的讀指令為例,說明圖4所示的驅動程序完成一次讀指令操作(只讀一個字節數據)的過程,并假設9200 SPI采用固定外設的片選配置方式。其他指令的軟件實現流程與讀指令類似。
評論