首页 > 其他分享 >基于Vector工具进行CAN协议错误帧的分析实践

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

时间:2025-01-16 10:45:17浏览次数:1  
标签:基于 错误 ACK 报文 总线 实践 发送 Vector 节点

引言

 

 

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

 

翻译

搜索

复制

<iframe></iframe>

标签:基于,错误,ACK,报文,总线,实践,发送,Vector,节点
From: https://www.cnblogs.com/polelink/p/18674477

相关文章

  • 想要回报的善意不是真正的善意:基于利益的善意,是对善良的玷污
    在现代社会,人们往往认为善意是一种无私的行为,是一种对他人关怀与帮助的自然流露。然而,随着社会的发展和物质的积累,善意的背后往往掺杂了更多的动机,尤其是与利益相关的动机。当善意的行为背后隐藏着个人或团体的利益时,我们所理解的“善良”就会失去原本的纯粹性,甚至变得不再可信,成......
  • 国产化板卡设计原理图:2274-基于FMC接口的JFM7VX690T36的3U VPX信号处理板
    基于FMC接口的JFM7VX690T36的3UVPX信号处理板一、板卡概述     本板卡系我司自主研发的基于3U VPX导冷架构的信号处理板,适用于高速图像处理等。芯片采用工业级设计。该处理板包含1片 FPGA-JFM7VX690T36。板载两组64位宽DDR3,每组容量4GB,一个HPC FMC接口。VPX接口连接4......
  • 基于大数据+协同过滤推荐算法+数据可视化大屏+SpringBoot的校园食堂订餐系统设计和实
    博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W+,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术......
  • 【大模型实战指南】AI大模型学习路线:从理论到实践,全面提升核心竞争力!
    一、初聊大模型1、什么是大模型?大模型,通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑,这些大脑通过阅读大量的文本、图片、声音等信息,学习到了世界的知识。这些大脑(模型)非常大,有的甚至有几千亿个参数,这些参数就像是大脑中的神经元,它们通过......
  • 【开源】基于SpringBoot框架电商平台(计算机毕业设计)+万字毕业论文 T192
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......
  • 【开源】基于SpringBoot框架毕业设计系统(计算机毕业设计)+万字毕业论文 T200
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......
  • 【开源】基于SpringBoot框架在线考试系统(计算机毕业设计)+万字毕业论文 T207
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......
  • Java全栈项目-校园志愿者服务平台开发实践
    项目简介校园志愿者服务平台是一个面向高校的志愿服务管理系统,旨在提供志愿活动发布、报名、签到、时长统计等功能,促进校园志愿服务的规范化管理和高效开展。本文将详细介绍该项目的技术架构、核心功能实现以及开发过程中的经验总结。技术栈后端技术SpringBoot2.7.0Sp......
  • 基于Python实现的微博用户信息爬取
    微博爬虫系列之用户信息爬取,通过Pythonrequest库实现。1. 用户ID获取可通过访问指定用户的主页获取,见下图红框(本文皆以薛之谦账号为例):2. 基本信息爬取(1)爬取接口res=requests.get("https://weibo.com/ajax/profile/info?uid="+userid,headers={"Cookie":cookie}).......
  • GaussDB-SQL查询最佳实践
    GaussDB-SQL查询最佳实践根据数据库的SQL执行机制以及大量的实践总结发现:通过一定的规则调整SQL语句,在保证结果正确的基础上,能够提高SQL执行效率。使用unionall代替union。union在合并两个集合时会执行去重操作,而unionall则直接将两个结果集合并、不执行去重。执行去重会......