基于Vector工具进行CAN协议错误帧的分析实践

描述

 


作者 | Dawnfly
小编 | 不吃猪头肉

Vector

 引言

 

CAN(Controller Area Network)协议是当前使用最普遍的车载通信协议之一,其优点不只体现在多主并行、最高达1Mbit/sec的传输速率(针对标准CAN)、基于优先级的仲裁机制以及广播发送的短帧结构,还体现在其错误检测机制上。通过总线数据以及总线波形来分析总线故障时,CAN协议错误检测机制中丰富的错误帧类型能让定位问题的效率更高。错误帧是CAN协议进行错误报告的方式,可以将总线上任何一个节点发现错误的信号通知给其他节点。作为一名总线测试工程师,在日常测试过程中不可避免的会接触到错误帧,因此了解错误帧的作用、类型与产生原因,对于测试工作的顺利开展有很大的帮助。

Vector

CAN错误帧格式

Vector

图1 错误帧通用格式

 

CAN错误帧通用格式如上图1所示,主要包括错误标志和错误界定符两个部分,其形成的原理以及作用如下:

错误标志

出现错误后若CAN节点处在主动错误阶段则发送6个连续显性位,在被动错误阶段则发送6个连续隐性位。由于6个连续相同的位违背了位填充规则会引发填充错误,会使其他节点也发送错误标志,因此,一个错误标志通常由两个连续6位的信号组成,由于会存在错误标志的重叠,所以错误标志的长度会在6-12位的范围。

错误界定符

错误界定符由8个连续隐性位组成,所有节点在发送错误标志后,都会向总线发送1个隐性位,若检测到总线上该位为隐性,则发送剩下的7个隐性位。

Vector

CAN错误帧分类

 

CAN错误帧根据产生错误的节点类型可以分为发送错误接收错误两大类,根据错误产生的原因则可以分为位错误、填充错误、ACK错误、格式错误以及CRC错误,下图2为各类错误帧所检测范围的分布。

Vector

图2 错误检测分布

位错误:回读总线位状态与自身发送的位不同,发送节点发送错误帧,需要注意仲裁段和ACK位发送隐性位但是回读到显性位除外。

填充错误:违反位填充规则,发送节点在发送报文时遇到5个相同极性位后需要插入1个极性相反的位,接收节点再接收报文时则需要删除填充位。如果接收到的报文存在6个相同极性的位,则第6个位便是出现了填充错误,需要在该位后发送错误帧。

ACK错误:当发送节点发送报文后,在ACK位没有在总线上检测到其他节点发送的显性电平。

格式错误:固定格式位场(如CRC界定符、ACK界定符、EOF等)与协议标准定义的显隐性不同则会被检测为非法位触发格式错误,发送和接收节点都会发送错误帧。

CRC错误:接收节点计算的CRC序列与接收到报文中的CRC序列不同。

Vector

错误帧的表现形式

Vector

图3 实验环境配置

 

为了更直观的展示各种错误帧类型,搭建了如图3所示的实验环境,以VN1630为发送节点,VH6501为接收节点,结合VH6501的报文干扰功能制造各类错误帧。

 

1. 发送错误

位错误

如图4所示,用VH6501干扰发送节点仿真报文的SOF位后,SOF位出现位错误,在Bit0开始发送错误帧,接收节点在Bit5检测到存在6个连续的隐性位,触发填充错误。

Vector

图4 位错误报文示例

ACK错误

按照CAN协议的规定,在一帧报文发出之后,如果接收节点成功接收了该帧报文,则接收节点需要在该帧报文ACK段内向总线上发送一个显性位来对发送节点的报文进行应答,此时发送节点会在ACK段内从总线上回读到一个显性位。如图5所示,通过配置关闭接收节点的ACK应答功能,此时发送节点在ACK位没有收到其他节点应答,触发ACK错误。

Vector

图5  ACK错误报文示例

格式错误

如图6所示,分别干扰EOF的第一位和第六位都会导致发送和接收节点出现格式错误,是由于发送节点发送隐性位EOF,回读到总线为显性位,在该位后发送格式错误帧。

Vector

图6  EOF格式错误报文示例

 

2. 接收错误

填充错误

如图7所示,干扰报文0x210,使Bit7隐性变为显性,总线出现6个连续显性位,使得发送节点和接收节点都检测到填充错误,发送错误帧。

Vector

图7  报文填充错误

CRC错误

如图8所示,通过VH6501直接发送报文序列,并篡改数据场使其与CRC序列不匹配,触发接收节点检测到CRC错误,错误位置是100(ACK DEL),ISO 11898-1中规定检测到CRC错误后,应该在ACK界定符之后发送错误标志。

Vector

图8  CRC错误报文示例

格式错误

如图9所示,Position 98和Position 100分别为CRC界定符和ACK界定符,干扰发送报文固定格式位后,接收节点检测到格式错误帧。

VectorVector

图9 界定符格式错误报文示例

Vector

错误标志重叠由于错误标志为6个极性相同的位,因此错误标志会导致填充错误,引起其他节点发送错误标志,或在发送错误标志时将原本个,从而使其他节点紧跟着发送错误标志,当引起全局错误时,所有节点都会同时发送错误标志,使得错误标志为6个位。以下为三种典型错误标志重叠范例

重叠部分为6个位时

如图10所示,在固定格式ACK界定符发送后,总线获取到的信号为显性位,由此发送节点和接收节点同时检测到格式错误,都在ACK界定符后发送6个连续显性位。

Vector

图10 错误标志完全重叠
 

重叠部分为5个位时

用定位可以如图11所示,当接收节点B出现CRC错误时,在ACK DEL后发送主动错误标志,发送节点和接收节点A监测到EOF的第一位被显性位覆盖,发送格式错误帧,总线上表现为7位长度的错误标志。

Vector

图11 错误标志部分重叠

重叠部分为0时

如图12所示,发送节点回读总线监测到位错误,发送错误标志,当错误标志的6个连续显性位发送完毕之后,总线上出现填充错误,引起其他节点发送错误标志,从而使错误标志达到12个位。

Vector

图12 错误标志不重叠

Vector

 总结

 

CAN总线在几十年的使用和发展下,被使用在几乎每一台车辆上,可以说是车辆行业不可或缺的存在,是现如今国际上应用最广泛的现场总线之一。而错误帧是CAN总线用于错误报告的报文,丰富的错误帧类型有助于迅速排查定位总线故障,因此错误帧的理解和使用也是作为总线测试工程师的必修课,希望这篇简介能够帮助了解错误帧的相关内容。北汇信息是一家专注于汽车电子测试领域的企业,对网络测试有着丰富经验,并可提供相关培训、咨询服务以及测试解决方案,帮助汽车制造商和零部件供应商确保其车载网络的可靠性和安全性。如果需要具体的测试服务或了解更多信息,欢迎大家来联系我们。

 

参考文献:【1】《ISO11898-1 - 2015》,Road vehicles - Controller area network (CAN) - Part 1:Data link layer and physical signalling【2】《CAN入门书》瑞萨科技RCJ05B0027-0100【3】文中部分图片来源于Vector

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分