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