何红芬,肖 兵
(华南理工大学 自动化科学与工程学院,广州 510640)
CAN总线是德国BOSCH公司为现代汽车应用领域推出的一种多主局域网。它实现了汽车电子的网络化,大幅度减少了汽车内的线束,实现数据共享[1]。汽车整车网络数据是分析汽车运行状态及故障原因的依据,对汽车设备开发和诊断等方面有着非常重要的意义。为了实时记录整车网络的数据,车载数据记录仪等汽车电子设备随之发展。目前普通的车载数据记录仪是以CAN数据帧的形式来采集和存储数据的,这样必然会造成存储空间的浪费,此外未能实现数据的分析定位功能和故障诊断功能,局限性较大,而高端的数据记录仪价格过于昂贵。SAE J1939通信协议作为CAN的高层应用协议被广泛应用于工程车和商用客车中。基于CAN网络的SAE J1939协议可以对数据进行准确的分析定位。此外,数据记录仪的安全性和可靠性也是衡量产品好坏的标准。
因此本文开发了一款基于TI双核高性能控制芯片F28M35x的整车网络侦听器,实时采集整车CAN网络的数据,并集成SAE J1939通信协议以便对CAN数据帧进行解析和消息定位。数据侦听器将解析后的数据分类存储在SD卡的文件系统中。各个外设接口电路均采用了数字隔离电路,从而保证数据侦听器的安全性和可靠性。
SAE J1939通信协议是卡车和商用客车中应用最广泛的高层应用协议,美国汽车工业协会的车辆委员会提出其相关的规范,并选择了CAN作为SAE J1939标准的底层基础。它是一种传输速率较高的通信网络协议,波特率可达到250 kb/s,可以支持分布在整个车辆中的电子控制系统间的实时性闭环控制及其通信[2]。SAE-J1939协议也遵循OSI 7层网络模型,如表1所示对ISO/OSI参考模型进行了描述。
表1 J1939协议的分层模型Tab.1 Hierarchical model of J1939 protocol
J1939协议中有以下相关的数据单元:
(1)CAN数据帧。CAN总线网络中的节点进行通信的单位,能够携带8个字节的数据。
(2)协议数据单元 PDU(protocol data unit)。 本质上是CAN数据帧,J1939协议对其ID有另一种解析方法。
(3)报文。带有标准约定功能的PDU或PDU组,根据PDU个数又分为单包报文和多包报文。
(4)消息。传输层以上使用的数据单元,能容纳大于8个字节的数据。
整车网络通信数据的智能侦听器采用了美国TI公司的双核高性能单片机F28M35x为主控芯片。主控芯片具有多种通信外设,基于其CAN总线接口设计了整车数据侦听模块;基于SPI总线接口设计了SD卡数据存储模块;基于USB外设接口设计了USB接口模块,硬件示意如图1所示。为了提高数据侦听器的安全性和可靠性,各个模块的接口电路中均采用了数字隔离电路设计。数据侦听模块通过2个高速隔离式CAN收发器ISO1050芯片连接到整车CAN网络中。基于主控芯片的SPI接口经过高速数字隔离器ISO7240CF-Q1与外部带SPI接口容量为128 G的SD卡相连。采用了ADI公司的隔离芯片ADuM4160来实现USB总线电气隔离电路。各路隔离电路均采用独立的隔离电源,防止数据总线或者其它电路上的噪音电流进入本地接地并干扰和损坏敏感电路。
图1 系统硬件示意Fig.1 Schematic diagram of hardware system
为了能实现数据的分析定位功能和故障诊断功能,并充分利用存储空间,该数据侦听器集成了SAE J1939通信协议的软件中间件。本系统的软件整体实施框架如图2所示,数据侦听器接收到整车CAN网络上的CAN数据帧后,由J1939通信协议解释器解析定位出CAN数据帧的有用信息,并将该信息分类存储在SD卡中。当有USB设备接入数据侦听器时,可通过USB接口将数据传输到上位机进行显示和分析。
软件系统的开发平台是TI公司提供的CCS6.0软件集成开发环境,它提供了C语言或汇编语言编程开发方式。此外,TI公司还提供ControlSUITE软件基础设施和工具集,方便开发者快速部署软件系统和应用开发[3]。系统首先进行初始化工作,包括F28M35自身的初始化、CAN控制器的初始化、USB接口的初始化以及SAE J1939通信协议栈的初始化。然后判断是否插入SD卡,如果没有插入SD卡则故障灯亮;判断已插入SD卡后,使能该软件系统的中断,包括CAN模块的接收中断和USB设备中断。当CAN总线网络上有数据传输时,产生接收中断,转而去处理接收中断处理函数,主要是CAN数据帧的解析和存储。
图2 系统软件实施框图Fig.2 Block diagram of software implementation system
软件系统关键的部分是J1939通信协议的集成,作为CAN协议的高层协议,它可以根据应用层的SPN提取出其物理值。J1939协议通过协议栈的形式实现,如图3所示,由数据链路层、网络管理层以及应用层组成。网络管理层描述节点地址分配和管理,该数据侦听器使用预置地址,并未涉及。
图3 J1939协议栈实现模型Fig.3 Implementation model of J1939 protocol stack
数据链路层描述基于CAN2.0B规范的CAN数据通信,还描述了传输服务[5],协议栈实现数据链路层的功能包括了硬件抽象层HAL、数据层DL、传输层TL。
主要负责设置CAN底层驱动,提供CAN数据收发的接口。F28M35x的CAN模块的驱动有2种方式:一种是直接调用外设驱动库中的关于CAN控制器的配置函数来配置邮箱和管理CAN中断,这种方式不需要了解外设管理的细节,有助于快速开发;另外一种是直接配置外设寄存器,这种方式虽然需要了解各个寄存器的细节,但是更加可靠有效[4]。本设计中选用的是直接配置寄存器的方法,确保CAN底层驱动的有效可靠。
CAN底层驱动包含了几种CAN模块的操作:CAN控制器配置 HAL_init()、发送数据Trans_CANpkt()、接收数据处理Get_CANpkt()。其中CAN模块的初始化函数流程如图4所示,首先使能时钟,配置引脚工作在CAN模式下,配置位时序等来设置波特率,配置发送和接收邮箱。CAN接收函数流程如图5所示,采用中断工作模式,当邮箱接收到数据帧后会产生中断,调用相应的中断函数将CAN数据帧放入接收缓冲区。CAN底层发送函数的程序流程如图6所示,主要是将CAN数据帧的ID(标识符)、数据长度和数据域赋给发送邮箱进行发送。
图4 CAN初始化配置流程Fig.4 Configuration flow chart of CAN initialize
图5 CAN接收函数流程Fig.5 Flow chart of CAN receive function
图6 CAN发送函数流程Fig.6 Flow chart of CAN send function
主要是定义协议数据单元PDU的数据结构,取出接收缓冲区中的CAN数据帧,根据CAN标识符解析 PDU域,并根据 PF(PDU格式)来完成CAN数据帧与PDU之间的转换,具体流程如图7所示。
图7 CAN数据帧转换成PDU的流程Fig.7 Flow chart of changing CAN data frame into PDU
完成J1939消息与PDU之间的解析转换,消息的拆装和重组。由于数据侦听器需要侦听整车CAN网络上的数据,所以传输方式采用广播方式,连接管理报文为TP.CM_BAM。进行多包方式传输时,建立接收状态机来管理传输过程。状态转换图如图8所示,初始状态是Wait_for_mesaage,当收到了连接报文TP.CM_BAM,则转到Init状态开始初始化,将报文中关于接收消息的数据存储在状态机中;状态转到Wait_for_data等待数据报文TP.DT,此时开启定时器用于超时计时,当没有收到TP.DT则跳到Check_timer状态进行超时判断,若超过750 ms,则判定为超时,状态跳转到Reset状态,重新回到Wait_for_message状态。如果收到了TP.DT,则跳转到Check_data状态,进行包序检查,包序正确则跳转到Save_data状态存储数据报文,否则跳转到Reset状态。当所有数据报文都重组完成,则将J1939消息传输到上层进行解析。
图8 状态转换Fig.8 Diagram of state transition
应用层主要描述了车辆使用的每个参数的数据长度、数据类型、分辨率、数据范围和标称符等内容,此外应用层还定义了故障诊断代码。所以应用层的主要功能是对接收到的消息和故障代码进行解析,实现信息定位。参数可分为连续型参数和离散型参数,关于连续型参数在J1939的应用层协议中有一套连续型参数的定义,这些参数用SLOT来描述。 SLOT 就是比例(scaling)、界限(limit)、偏移量(offset)和传送功能(transfer)的缩写[6]。 可根据 SLOT的定义及物理数据的计算公式:物理数据=比例系数×传输数值+偏移量来获取实际的参数值。如表2所示,以发动机冷却剂温度(SPN 110)为例说明:SPN=110,可知其数据范围、分辨率等。根据SLOT的定义及物理数据的计算公式:物理数据=比例系数×传输数值+偏移量。CAN数据帧的数据域为12 23 34 45 56 67 78 89。第一字节为0x12,转换为十进制是18,18×1-40=-22℃,从而可以得知发动机的冷却剂温度为-22℃。
表2 发送机冷却剂温度的应用层定义Tab.2 Application layer definition of transmitter coolant temperature
根据参数值的物理意义分别以树形结构存储于SD卡中的发动机温度文件系统中。上位机可以直接定位到该数据是发动机的冷却液的温度,而不只是简单的CAN数据帧。
将数据侦听器与实验室自主开发的发动机电子控制单元ECU连接进行系统测试,结果表明:数据侦听器侦听总线上的CAN数据帧,通过J1939协议对接收到的CAN数据帧进行解析实现信息定位,并将得到参数的实际值分类存储到SD卡中。SD卡中的数据可供上位机的分析软件进行图形化显示,此时显示的数据可以直接定位到数据的实际来源和数值,更加直观,上位机的分析软件的显示界面如图9所示。
图9 上位机显示界面Fig.9 Display interface of PC
基于SAE J1939的整车CAN网络数据侦听器的软件系统中集成SAE J1939协议对CAN数据帧进行解析和准确的信息定位,并将解析后的物理信息分类存储在SD卡中,从而有效地提高了存储空间的利用率。借助TI双核单片机的实时控制和通信的优越性能,在各个外设接口都设计了数字隔离电路来确保数据记录仪的安全性和可靠性。
[1]顾卫钢.手把手教你学DSP—基于TMS320X281x[M].北京:北京航空航天大学出版社,2011.
[2]李伟.基于CAN/LIN总线的汽车仪表信息系统研究与设计[D].武汉:华中科技大学,2006.
[3]TheTexasInstrumentsInc.controlSUITE GettingStarted Guide(Rev.C)[EB/OL],2015.
[4]F2803x Firmware Development Package USER’S GUIDE[S],2014
[5]SAE J1939-21.Data Link Layer Standard.SAE Group[S],2001.
[6]SAE J1939-71.Vehicle Application Layer Standard.SAE Group[S],2004.