趙 佳
(中通客車控股股份有限公司,山東 聊城 252000)
隨著CAN總線通訊技術在商用車上的廣泛應用,研究分析CAN總線傳輸的數據信息對于檢測電器故障有很大幫助[1]。中通客車選擇較實用的周立功USBCAN-Ⅱ板卡和ZLG CANTest通用測試軟件為工具采集報文數據。使用中默認驗收碼為0x00000000,屏蔽碼為0xFFFFFFFF,數據顯示域采集到的是CAN總線中所有交換的通訊數據。要想單獨采集某一特定ID的數據,必須根據ID正確設置驗收碼和屏蔽碼。筆者根據USBCAN-Ⅱ板卡內部的SJA1000獨立CAN控制器的濾波原理,應用VB語言開發出一套針對SJA1000芯片的單濾波驗收碼和屏蔽碼換算程序。
SJA1000是Philips公司PCA82C200的替代產品。它是應用于汽車和一般工業環境的獨立CAN總線控制器,具有完成CAN通信協議所要求的全部功能[2-3]。SJA1000芯片是目前廣泛流行的CAN總線器件之一,經過簡單總線連接的SJA1000,可實現CAN總線的物理層和數據鏈路層的所有功能。圖1是SJA1000芯片的硬件結構框圖。
CAN核心模塊負責CAN信息幀的收發和CAN協議的實現,接口管理邏輯負責同外部主控制器的接口。該單元中的每一個寄存器都可由主控制器通過SJA 1000的地址/數據總線訪問[4-5]。發送緩沖區可存貯一個長度為13個字節的完整信息幀。主控制器可直接將標識符和數據送入發送緩沖區,然后置位命令寄存器CMR中的發送請求位TR,啟動CAN核心模塊讀取發送緩沖區中的數據。按CAN協議封裝成一完整CAN信息幀,通過收發器發往總線。驗收濾波器單元負責完成接收信息的濾波功能,只有驗收濾波通過且無差錯,才把接收的信息幀送入接收FIFO緩沖區,且置位接收緩沖區狀態標志SR.0,表明接收緩沖區中已有成功接收的信息幀[6-9]。
SJA1000有兩種工作模式:基本模式和增強模式。在基本模式下,SJA1000只可收發標準數據幀(標準數據幀的標識符為11位),且錯誤報警的極限值不能修改;在增強模式下,SJA1000既可接收標準數據幀,也可接收擴展數據幀(擴展數據幀的標識符為29位),并且可修改錯誤報警的極限值[10]。SJA1000具有更加靈活的濾波方式,能夠根據數據幀的標識符有選擇地接收一些數據幀。
SJA1000驗收濾波器由4個驗收碼寄存器(ACR0、ACR1、ACR2、ACR3) 和 4 個驗收屏蔽寄存器(AMR0、AMR1、AMR2、AMR3)組成[11]。這8 個寄存器在 SJA1000的復位模式下可由主控制器設置。通過對這些寄存器的設置,可對接收信息構成非常靈活的濾波。SJA1000兼容CAN2.0B技術規范,具有標準幀和擴展幀兩種幀格式。每種幀格式都有單濾波和雙濾波功能,所以SJA1000共有四種濾波方式??蛙嘋AN通訊遵循的SAE J1939協議基于CAN2.0B規范,但只使用擴展幀格式全面定義整車網絡的標準化通信。因此,本文主要研究濾波方式為單濾波,接收幀為擴展幀時的情形。圖2為擴展幀單濾波工作邏輯流程圖。
單濾波驗收濾波器由4個驗收碼寄存器和4個驗收屏蔽寄存器組成,總線上的信息只有通過了它的驗收濾波才予以接收。從圖2中可以看出,接受信息位首先與驗收代碼位進行同或邏輯計算,結果再與驗收屏蔽位進行或邏輯計算,最后經過與門判斷是否接收。如果把相應的一個驗收碼寄存器和驗收屏蔽寄存器看作一組,那么四組寄存器共32位,而接收的CAN信息位(29位擴展幀標識符ID+1位遠程傳輸請求位RTR)為30位,ACR3和AMR3的最后兩位需進行置位處理[12]。
在實際應用中,常用8位十六進制數表示CAN擴展幀的ID。在進行驗收碼換算程序設計時,必須先把十六進制的數據表示成二進制的數據。在十六進制轉二進制的過程中,8位十六進制數表示為32位二進制后要舍去前3位。這是因為SAE J1939中定義擴展幀的ID為29位,十六進制轉為二進制后的前3位無效。而在計算驗收碼時,需在29位二進制的數的后面補上“011”3位湊足32位,然后再轉換為十六進制的驗收碼?!?11”中的“0”是SAE J1939中RTR的規定值,“11”是對ACR3的最后兩位的置位。
通過以上分析,可以應用VB語言制作一個計算CAN擴展幀ID單濾波驗收碼和屏蔽碼的簡單程序。
部分主要程序代碼如下:
其中:ch()為 16 進制轉二進制的函數,xch()為二進制轉十六進制的函數[13]。
編寫完成后生成exe格式的可執行文件,通過計算發動機水溫信號的ID的驗收碼和屏蔽碼進行驗證,結果換算成功。如圖3所示。
這個小程序解決了利用USBCAN-Ⅱ板卡,采集客車CAN通訊測試中某一特定ID數據的問題。對降低換算時間,提高數據采集效率有很大幫助。
[1]趙佳.基于SAE J1939協議的混合動力客車通訊技術[J].客車技術與研究,2011,33(2):55-57.
[2]陳寧.CAN總線技術在汽車局域網中的應用[J].客車技術與研究,2006,28(3):11-16.
[3]鄔寬明.CAN總線原理與應用系統設計[M].北京:北京航空航天大學出版社,2002.
[4]劉正權,許維勝,岳繼光,等.關于CAN控制器SJA1000新特性的一些應用[J].電子技術,2000,(11)
[5]李丹,何猛,屈金標.CNA總線物理層波形的采集與譯碼[J].四川兵工學報,2011,(1):103-105.
[6]陸前鋒,劉波,陳明昭.基于SJA1000的CAN總線智能控制系統設計[J].自動化技術與應用,2003,(1):61-64.
[7]王毅峰,李令奇.SJA1000在數據采集與控制系統中的應用[J].測控自動化,2004,(1):32-35.
[8]張小鳴,李永新.基于SJA1000的CAN網橋設計[J].儀表技術與傳感器,2007,(11):22-24.
[9]邵玉華.基于SJA1000的CAN總線通信系統的設計[J].鐵道通信信號,2010,(3):56-58.
[10]韓黨群.CAN控制器SJA1000及其應用[J].電子技術應用,2003,(1):66-69.
[11]廣州周立功單片機發展有限公司.CAN控制器SJA1000驗收濾波器原理與應用[DB/OL].[2012-05-15].http://www.zlgmcu.com/searchEx.asp?q=sja1000%20Dato Sheet
[12]鄒繼軍,饒運濤.CAN控制器SJA1000驗收濾波器原理與應用[J].南昌大學學報:工科版,2000,(8):1-5.
[13]林卓然.VB語言程序設計(第2版)[M].北京:電子工業出版社,2009.