引言
CAN(Controller Area Network)协议是当前使用最普遍的车载通信协议之一,其优点不只体现在多主并行、最高达1Mbit/sec的传输速率(针对标准CAN)、基于优先级的仲裁机制以及广播发送的短帧结构,还体现在其错误检测机制上。通过总线数据以及总线波形来分析总线故障时,CAN协议错误检测机制中丰富的错误帧类型能让定位问题的效率更高。错误帧是CAN协议进行错误报告的方式,可以将总线上任何一个节点发现错误的信号通知给其他节点。作为一名总线测试工程师,在日常测试过程中不可避免的会接触到错误帧,因此了解错误帧的作用、类型与产生原因,对于测试工作的顺利开展有很大的帮助。
CAN错误帧格式
图1 错误帧通用格式
CAN错误帧通用格式如上图1所示,主要包括错误标志和错误界定符两个部分,其形成的原理以及作用如下:
错误标志:出现错误后若CAN节点处在主动错误阶段则发送6个连续显性位,在被动错误阶段则发送6个连续隐性位。由于6个连续相同的位违背了位填充规则会引发填充错误,会使其他节点也发送错误标志,因此,一个错误标志通常由两个连续6位的信号组成,由于会存在错误标志的重叠,所以错误标志的长度会在6-12位的范围。
错误界定符:错误界定符由8个连续隐性位组成,所有节点在发送错误标志后,都会向总线发送1个隐性位,若检测到总线上该位为隐性,则发送剩下的7个隐性位。
CAN错误帧分类
CAN错误帧根据产生错误的节点类型可以分为发送错误和接收错误两大类,根据错误产生的原因则可以分为位错误、填充错误、ACK错误、格式错误以及CRC错误,下图2为各类错误帧所检测范围的分布。
图2 错误检测分布
- 位错误:回读总线位状态与自身发送的位不同,发送节点发送错误帧,需要注意仲裁段和ACK位发送隐性位但是回读到显性位除外。
- 填充错误:违反位填充规则,发送节点在发送报文时遇到5个相同极性位后需要插入1个极性相反的位,接收节点再接收报文时则需要删除填充位。如果接收到的报文存在6个相同极性的位,则第6个位便是出现了填充错误,需要在该位后发送错误帧。
- ACK错误:当发送节点发送报文后,在ACK位没有在总线上检测到其他节点发送的显性电平。
- 格式错误:固定格式位场(如CRC界定符、ACK界定符、EOF等)与协议标准定义的显隐性不同则会被检测为非法位触发格式错误,发送和接收节点都会发送错误帧。
- CRC错误:接收节点计算的CRC序列与接收到报文中的CRC序列不同。
错误帧的表现形式
图3 实验环境配置
为了更直观的展示各种错误帧类型,搭建了如图3所示的实验环境,以VN1630为发送节点,VH6501为接收节点,结合VH6501的报文干扰功能制造各类错误帧。
1. 发送错误
- 位错误
如图4所示,用VH6501干扰发送节点仿真报文的SOF位后,SOF位出现位错误,在Bit0开始发送错误帧,接收节点在Bit5检测到存在6个连续的隐性位,触发填充错误。
图4 位错误报文示例
- ACK错误
按照CAN协议的规定,在一帧报文发出之后,如果接收节点成功接收了该帧报文,则接收节点需要在该帧报文ACK段内向总线上发送一个显性位来对发送节点的报文进行应答,此时发送节点会在ACK段内从总线上回读到一个显性位。如图5所示,通过配置关闭接收节点的ACK应答功能,此时发送节点在ACK位没有收到其他节点应答,触发ACK错误。
图5 ACK错误报文示例
- 格式错误
如图6所示,分别干扰EOF的第一位和第六位都会导致发送和接收节点出现格式错误,是由于发送节点发送隐性位EOF,回读到总线为显性位,在该位后发送格式错误帧。
图6 EOF格式错误报文示例
2. 接收错误
- 填充错误
如图7所示,干扰报文0x210,使Bit7隐性变为显性,总线出现6个连续显性位,使得发送节点和接收节点都检测到填充错误,发送错误帧。
图7 报文填充错误
- CRC错误
如图8所示,通过VH6501直接发送报文序列,并篡改数据场使其与CRC序列不匹配,触发接收节点检测到CRC错误,错误位置是100(ACK DEL),ISO 11898-1中规定检测到CRC错误后,应该在ACK界定符之后发送错误标志。
图8 CRC错误报文示例
- 格式错误:
如图9所示,Position 98和Position 100分别为CRC界定符和ACK界定符,干扰发送报文固定格式位后,接收节点检测到格式错误帧。
图9 界定符格式错误报文示例
错误标志重叠
由于错误标志为6个极性相同的位,因此错误标志会导致填充错误,引起其他节点发送错误标志,或在发送错误标志时将原本个,从而使其他节点紧跟着发送错误标志,当引起全局错误时,所有节点都会同时发送错误标志,使得错误标志为6个位。以下为三种典型错误标志重叠范例。
- 重叠部分为6个位时:如图10所示,在固定格式ACK界定符发送后,总线获取到的信号为显性位,由此发送节点和接收节点同时检测到格式错误,都在ACK界定符后发送6个连续显性位。
图10 错误标志完全重叠
- 重叠部分为5个位时:如图11所示,当接收节点B出现CRC错误时,在ACK DEL后发送主动错误标志,发送节点和接收节点A监测到EOF的第一位被显性位覆盖,发送格式错误帧,总线上表现为7位长度的错误标志。
图11 错误标志部分重叠
- 重叠部分为0时:如图12所示,发送节点回读总线监测到位错误,发送错误标志,当错误标志的6个连续显性位发送完毕之后,总线上出现填充错误,引起其他节点发送错误标志,从而使错误标志达到12个位。
图12 错误标志不重叠
总结
CAN总线在几十年的使用和发展下,被使用在几乎每一台车辆上,可以说是车辆行业不可或缺的存在,是现如今国际上应用最广泛的现场总线之一。而错误帧是CAN总线用于错误报告的报文,丰富的错误帧类型有助于迅速排查定位总线故障,因此错误帧的理解和使用也是作为总线测试工程师的必修课,希望这篇简介能够帮助了解错误帧的相关内容。
北汇信息是一家专注于汽车电子测试领域的企业,对网络测试有着丰富经验,并可提供相关培训、咨询服务以及测试解决方案,帮助汽车制造商和零部件供应商确保其车载网络的可靠性和安全性。如果需要具体的测试服务或了解更多信息,欢迎大家来联系我们。
参考文献
【1】《ISO11898-1 - 2015》,Road vehicles - Controller area network (CAN) - Part 1:Data link layer and physical signalling
【2】《CAN入门书》瑞萨科技RCJ05B0027-0100