郭丹丹楊瀛陸(.鄭州同源電力設(shè)計有限公司,河南 鄭州 450000;.北京軒宇空間科技有限公司,北京 00085)
基于SJA1000的CAN通信
郭丹丹1楊瀛陸2
(1.鄭州同源電力設(shè)計有限公司,河南 鄭州 450000;2.北京軒宇空間科技有限公司,北京 100085)
本文介紹了CAN總線的概念,給出了SJA1000控制器的基本功能,原理框圖,描述了軟件設(shè)計的流程,分為初始化、發(fā)送和接收流程,給出了上位機(jī)測試軟件界面,總結(jié)SJA1000是很好的CAN通訊控制器。
CAN;SJA1000控制器;硬件設(shè)計框圖
CAN總線(Controller Area Network)是眾多現(xiàn)場通信總線的一種,它屬于串行數(shù)據(jù)通訊總線。CAN網(wǎng)絡(luò)最大通訊距離為10km(5kbps),通訊速率可配置最高可達(dá)1Mbps(40m)。
CAN總線器件有兩種:一種是獨(dú)立CAN控制器;另外一種是片上微控制器的總線控制器。SJA1000CAN控制器屬于獨(dú)立的CAN控制器,因為它支持CAN2.0B規(guī)約,軟件和硬件都兼容之前的同類型芯片PCA82C200,技術(shù)相對比較成熟,并能應(yīng)用在汽車和工業(yè)環(huán)境下,因此應(yīng)用的范圍比較廣泛。SJA1000的主要特性為:
(1)硬件的外特性與CAN總線控制器PCA82C200兼容;(2)軟件操作和使用與PCA82C200兼容;(3)增加了擴(kuò)展接收緩沖器;(4)在通信上支持CAN2.0B協(xié)議;(5)同時支持11位和29位標(biāo)識符;(6)通訊速率1Mbits/s;(7)對于增強(qiáng)CAN模式的支持;(8)時鐘頻率可以支持到24MHz;(9)對于微處理器接口支持多種;(10)CAN輸出配置可編程;芯片的工作溫度范圍-40℃~+125℃。
板卡集成了1片PCI9054總線接口芯片,它負(fù)責(zé)PCI總線接口的轉(zhuǎn)換;1片Cyclone III系列的FPGA(EP3C25F324),它負(fù)責(zé)輸出控制信號和初始化CAN控制器;4片CAN控制器(SJA1000),它負(fù)責(zé)并行數(shù)據(jù)總線到CAN總線協(xié)議的轉(zhuǎn)換;4片CAN總線接口控制器(PCA82C250),它負(fù)責(zé)TTL的CAN總線信號到符合ISO 11898標(biāo)準(zhǔn)的CAN總線信號的轉(zhuǎn)換;2片高速數(shù)字隔離器(ADuM1410),它實現(xiàn)CAN總線控制器的數(shù)字信號與CAN總線接口控制器的數(shù)字信號的隔離。另外,板卡還集成了電平轉(zhuǎn)換芯片(TXS0108EPWR)、隔離電源模塊、EEPROM(93LC56)配置芯片、Flash存儲器(EPCS16)、狀態(tài)指示燈和JTAG/AS下載座等。
表1
軟件設(shè)計思想:
CAN通信分為兩種模式:基本模式和擴(kuò)展模式,擴(kuò)展模式較為復(fù)雜,本文以基本模式為范例講述CAN的通信流程。
軟件從整體上分為:初始化,發(fā)送和接收三個部分。
注意一些寄存器只在PeliCAN 模式有效控制寄存器就僅在BasicCAN 模式里有效而且一些寄存器是只讀的或只寫的還有一些只能在復(fù)位模式中訪問。
4.1 初始化。SJA1000的初始化只有在復(fù)位模式下才可以進(jìn)行。芯片的初始化包括工作方式的設(shè)定、芯片的接收屏蔽寄存器(AMR)設(shè)置和芯片的接收代碼寄存器(ACR)的設(shè)置、芯片的總線時序寄存器的設(shè)置、芯片的輸出模式寄存器和芯片的中斷寄存器的設(shè)置等。初始化設(shè)置完成,需要設(shè)定SJA1000芯片進(jìn)入工作模式,然后就可以進(jìn)行正常的通訊。芯片的初始化步驟如下:(1)關(guān)閉中斷,進(jìn)入復(fù)位模式;(2)配置接收屏蔽寄存器(AMR)和配置接收代碼寄存器(ACR);(3)配置波特率;(4)輸出寄存器的配置(建議選擇開開漏輸出);(5)配置basican模式,關(guān)閉CLKOUT輸出;(6)打開數(shù)據(jù)溢出中斷、錯誤中斷、發(fā)送中斷和接收中斷(中斷寄存器);(7)進(jìn)入工作模式。
4.2 發(fā)送數(shù)據(jù)。發(fā)送數(shù)據(jù)的流程相對簡單主要是配置設(shè)備的ID,發(fā)送數(shù)據(jù)長度,然后把需要發(fā)送數(shù)據(jù)放到buffer即可,(表1為發(fā)送區(qū)列表)發(fā)送數(shù)據(jù)流程如下:(1)首先判斷上次發(fā)送數(shù)據(jù)是否完成;(2)判斷發(fā)送緩沖區(qū)是否鎖定;(3)如果數(shù)據(jù)發(fā)送完成并且發(fā)送緩沖區(qū)沒有鎖定;(4)啟動發(fā)送。
4.3 接收數(shù)據(jù)
(1)判斷中斷寄存器是否有接收中斷;(2)如果有接收中斷則判斷狀態(tài)寄存器是否有數(shù)據(jù);(3)狀態(tài)寄存器中有數(shù)據(jù)那么判斷報文是否有效;(4)如果有效,那么從接收buffer中獲取接收數(shù)據(jù)的長度和數(shù)據(jù)屬于遠(yuǎn)程幀還是數(shù)據(jù)幀,然后開始接收數(shù)據(jù);(5)接收數(shù)據(jù)完成清buffer,以便下次接收數(shù)據(jù)。
本文以使用SJA1000作為CAN通信的控制芯片進(jìn)行數(shù)據(jù)發(fā)送和接收,在基本模式下滿足了通信的需要并且滿足了對于CAN通信參數(shù)的設(shè)置,在效率測試中可以實現(xiàn)1ms周期接收數(shù)據(jù)64小時不丟包。通過搭建的測試界面,不但大大地方便了通信的調(diào)試,而且驗證了邏輯功能以及驅(qū)動和動態(tài)庫的可靠性。
[1]郭發(fā)東.P89V51RD2與SJA1000實現(xiàn)CAN節(jié)點(diǎn)實例[J].山東科學(xué),2006.
TN915
A