CAN总线单滤波验收码和屏蔽码换算程序的开发

2012-08-22 07:33
客车技术与研究 2012年5期
关键词:标识符二进制寄存器

赵 佳

(中通客车控股股份有限公司,山东 聊城 252000)

随着CAN总线通讯技术在商用车上的广泛应用,研究分析CAN总线传输的数据信息对于检测电器故障有很大帮助[1]。中通客车选择较实用的周立功USBCAN-Ⅱ板卡和ZLG CANTest通用测试软件为工具采集报文数据。使用中默认验收码为0x00000000,屏蔽码为0xFFFFFFFF,数据显示域采集到的是CAN总线中所有交换的通讯数据。要想单独采集某一特定ID的数据,必须根据ID正确设置验收码和屏蔽码。笔者根据USBCAN-Ⅱ板卡内部的SJA1000独立CAN控制器的滤波原理,应用VB语言开发出一套针对SJA1000芯片的单滤波验收码和屏蔽码换算程序。

1 SJA1000独立CAN控制器

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具有更加灵活的滤波方式,能够根据数据帧的标识符有选择地接收一些数据帧。

2 SJA1000滤波器工作原理

SJA1000验收滤波器由4个验收码寄存器(ACR0、ACR1、ACR2、ACR3) 和 4 个验收屏蔽寄存器(AMR0、AMR1、AMR2、AMR3)组成[11]。这8 个寄存器在 SJA1000的复位模式下可由主控制器设置。通过对这些寄存器的设置,可对接收信息构成非常灵活的滤波。SJA1000兼容CAN2.0B技术规范,具有标准帧和扩展帧两种帧格式。每种帧格式都有单滤波和双滤波功能,所以SJA1000共有四种滤波方式。客车CAN通讯遵循的SAE J1939协议基于CAN2.0B规范,但只使用扩展帧格式全面定义整车网络的标准化通信。因此,本文主要研究滤波方式为单滤波,接收帧为扩展帧时的情形。图2为扩展帧单滤波工作逻辑流程图。

单滤波验收滤波器由4个验收码寄存器和4个验收屏蔽寄存器组成,总线上的信息只有通过了它的验收滤波才予以接收。从图2中可以看出,接受信息位首先与验收代码位进行同或逻辑计算,结果再与验收屏蔽位进行或逻辑计算,最后经过与门判断是否接收。如果把相应的一个验收码寄存器和验收屏蔽寄存器看作一组,那么四组寄存器共32位,而接收的CAN信息位(29位扩展帧标识符ID+1位远程传输请求位RTR)为30位,ACR3和AMR3的最后两位需进行置位处理[12]。

3 单滤波验收码和屏蔽码换算程序开发

在实际应用中,常用8位十六进制数表示CAN扩展帧的ID。在进行验收码换算程序设计时,必须先把十六进制的数据表示成二进制的数据。在十六进制转二进制的过程中,8位十六进制数表示为32位二进制后要舍去前3位。这是因为SAE J1939中定义扩展帧的ID为29位,十六进制转为二进制后的前3位无效。而在计算验收码时,需在29位二进制的数的后面补上“011”3位凑足32位,然后再转换为十六进制的验收码。“011”中的“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.

猜你喜欢
标识符二进制寄存器
基于底层虚拟机的标识符混淆方法
用二进制解一道高中数学联赛数论题
DOI标识符查找文献的方法
有用的二进制
Lite寄存器模型的设计与实现
基于区块链的持久标识符系统①
有趣的进度
DOI标识符查找文献的方法
常用电子测速法在某数字信号处理器中的应用*
移位寄存器及算术运算应用