潘文卿,潘玉鑫,何晓飞
(潍柴动力股份有限公司,山东 潍坊 261061)
CAN总线是当前汽车高速网络系统的主要应用标准,CAN2.0技术规范中2.0A定义了CAN报文标准帧格式,2.0B定义了标准帧和扩展帧两种格式。在整车通信中,控制器由于各厂家硬件选型和设计的不同,整车通信环境的复杂性越来越高,会出现诸多通信异常的现象,除了通用CAN通信监控设备,例如CANoe可以排查一些较普遍和常见的问题,还可以采用示波器波形诊断技术进行一些特殊问题的排查。
图1为CAN2.0B帧结构图,数据帧由7个不同位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结束。
图1 CAN2.0B帧结构图
1)显性电平和隐性电平:显性电平逻辑为0,隐性电平逻辑为1。显性具有优先的特性,只要有一个控制单元输出显性电平,总线上即为显性电平;隐性具有包容的特性,只有所有的控制单元都输出隐性电平,总线上才为隐性。
2)帧起始(SOF):标识帧开始,仅由一个显性位构成,只有在总线处于空闲状态时才允许开始发送。
3)仲裁场:标准帧中仲裁场由11位ID标识符和RTR位组成;在扩展帧格式中,仲裁场由29位ID标识符和SRR位、IDE位、RTR位组成。其中SRR位为替代远程请求位,扩展帧中必须始终为隐性位;IDE位为标识符扩展位,在标准帧中为显性电平,属于控制场,在扩展帧中为隐性电平,属于仲裁场;RTR位为替代远程请求位,在数据帧中为显性电平,在远程帧中必须为隐性电平。
4)控制场:在标准帧格式中,包括DLC、IDE、保留位r0;在 扩 展 帧格 式 中,包 括DLC和 两 个 保 留 位r1、r0。DLC数据的字节数为0~8个字节。保留位r1、r0必须以显性电平传送,然而在接收侧可以接收显性、隐性及任意组合的电平。
5)数据场:由0~8个字节组成,传输数据。
6)CRC场:包括CRC序列和CRC界定符DEL。CRC序列计算范围是SOF、仲裁场、控制场、数据场。CRC界定符CRC DEL是一个常态隐性位。
7)应答场:包括应答间隙ACK和应答界定符ACK DEL,发送节点发送数据时会将这两位同时设置为隐性,接收节点计算CRC序列的值准确无误后,会在应答间隙期间向发送方发送一个显性位以示应答。
8)帧结束:由7个隐性位组成。
基于客户一台实际运行的公交车,出现其中一个控制器发送报文,发动机控制器不能解析的问题。对标一台可以正常通信的整车,发现发动机控制器及程序是一致的,只有这个控制器的厂家是不一致的,初步断定是此控制器的问题。通过CAN设备可以正常接收报文,在整车上,对标一辆可以正常通信的公交车,通过CANoe监控总线报文,两辆车的报文数据均正常。通过CANoe采集故障车和正常车的报文数据,回到试验室通过数据回放的形式将数据注入到发动机控制器中进行多方位验证,发动机控制器均能正常接收报文,下文是实际解决的方法。
分别采集故障车和正常车的一段报文数据,回到试验室,利用CANoe的数据回放功能将其他控制器发送的数据屏蔽掉,只将故障报文发送到总线上,如图2所示。
图2 利用CANoe回放数据并筛选报文
通过监控工具看到总线报文以及发动机控制器能够收到此报文并且能够解析总线上的数据,如图3所示,总线上的电压值与监控到的发动机控制器收到的数据一致,都是170V。
图3 解析数据一致
为了进一步分析发动机控制器接收到总线上的报文的各个状态值的情况,采用调试器监控发动机控制器接收报文的寄存器状态,如图4所示:ID为0x1801A79B,收到的8个 字 节 的 信 息Byte0-7依 次 是:0x4B,0x01,0xAA,0x00,0x08,0x00,0x26,0x00,各关键标志位SRR为1,IDE为EXT,RTR为0,LENGTH为8,这些数据均正常,未发现异常点。通过分析,数据通过CANoe进行回放的形式将数据重新发送到总线上可能规避了一些问题。回放的时候可以认为是CANoe这个控制器在发送一个已知的报文数据,而非真正的问题控制器在发送报文数据,所以此方法不能真正找到问题的原因。
图4 接收报文寄存器状态
带着示波器与CANoe同步在问题车上进行报文抓取,为了尽量避免其他控制器众多报文的干扰,将能拔掉的控制器都从总线上拔掉,仅留下问题控制器和发动机控制器,通过CANoe的报文序列形式和示波器同步抓取进行分析。图5为总线上抓取到的问题控制器发送出来的问题报文,地址为0x1801A79B,对着CAN2.0B的帧结构进行波形解析。总线通信波特率为250kb/s,所以传输1bit的时间为4μs。根据CAN总线未填充通信原则,当发送器在发送位流中检测到5个极性相同的连续位时,它在实际发送时,自动插入一个补码位。结合CAN2.0B的帧结构对图5进行CAN波形解析,解析结果如图6所示。
图5 问题报文波形图
图6 问题报文波形解析图
根据CAN2.0B帧结构对照波形图进行CAN波形的位解析,每一个报文都是从一个显性位开始,即SOF帧起始位,此帧的开始位,然后继续往后以4μs一个bit进行解析。优先级P为(110)B,R为(0)B,DP为(0)B,PF为(0000 0001)B,SRR为(0)B,IDE为(1)B,PS为(1010 0111)B,SA为(1001 1011)B,DLC为(1000)B,RTR为(0)B,通 过 组 合 解 析ID为0x1801A179B,DLC为8,RTR为远程帧位0显性位表示数据帧,IDE为1隐性位表示扩展帧,SRR为0是一个显性位,SRR在扩展帧中是替代远程请求位,按照CAN2.0B的要求应该是隐性位,即为1,所以通过CAN波形诊断分析定位问题控制器在发送报文时在将SRR位处理错了。SRR位不出现在总线的报文地址、数据长度、数据内容中,通过CAN总线数据分析仪是无法判断的,只能通过CAN波形的诊断才能分析出来。这样也为后续整车通信故障诊断积累了宝贵的经验,同时为自主控制器的开发提供了技术支撑。
通过这个实际案例,可以总结在排查整车通信故障的时候,通用的整车数据分析工具可以排查总线容易可见的故障,例如总线负载率过高、总线存在应答错误帧、传输数据异常等,针对一些不易可见的故障,需要采用CAN波形诊断技术深层次地分析控制器发送报文时各个场中每个关键位的正确性。