汽车CAN总线-01 介绍

admin 2024年2月15日15:21:52评论6 views字数 3532阅读11分46秒阅读模式

免责声明:本文涉及到的所有技术仅用来学习交流,严禁用于非法用途,未经授权请勿非法渗透。否则产生的一切后果自行承担!一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!

本专题文章将分为三部分:介绍、攻击、演示,本文为第一部分汽车CAN总线介绍 。

工作原理

CAN总线协议介绍

  CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一,是当前应用最广的汽车总线,并最终成为国际标准(ISO 11898)。

    CAN总线通常采用屏蔽或非屏蔽的双绞线,总线接口能在极其恶劣的环境下工作。根据ISO 11898的标准建议,即使双绞线中有一根断路,总线都必须能继续工作。

汽车CAN总线-01 介绍

在一个CAN总线上,存在CAN传输器,CAN控制器以及微控制器。CAN传输器以及控制器负责建立CAN协议的底层规则,微控制器负责提取CAN协议部分并提供给应用程序使用。

寻址方式

汽车CAN总线-01 介绍

CAN协议具备两种寻址方式一种是点对点传输,一种是广播传输。

CAN过滤器

汽车CAN总线-01 介绍

在CAN网络上控制器部分,实现了过滤节点,将不属于自身以及自身不感兴趣的报文进行过滤。

冲突访问与仲裁

汽车CAN总线-01 介绍

上图可以看出总线上三个节点同时发送报文,但是是由优先级的,谁先发谁后发都是有一定规则。

优先级裁定

显性与机制

汽车CAN总线-01 介绍

不同节点同时发送数据,0为显性位,1位隐形位。将按照$1 & 0$的方式来确定发送优先级,仲裁优胜一方将继续发送并仲裁,另外一方将从发送节点转为接收节点,上图的节点A仲裁输了,将转换身份从发送节点转变为接收节点。随后B,C节点继续仲裁。

汽车CAN总线-01 介绍

优先级

介于仲裁优先级判断方式,CANID越低优先级越高。

汽车CAN总线-01 介绍

报文协议

名称 id长度 数据长度 常见度
远程帧 11位 0 不常见,仅起请求作用
标准帧 11位 64位 常见
扩展帧 29位 64位 商用车常见
扩展远程帧 29位 0位 极少见

汽车CAN总线-01 介绍

完整的一帧CAN报文

汽车CAN总线-01 介绍

字段名称 解释

帧起始(SOF)

汽车CAN总线-01 介绍

发送节点设置起始为0,表示总线非空闲。接收节点与发送节点做硬同步。

标识(Identifier)

汽车CAN总线-01 介绍

远程传输请求(RTR)

汽车CAN总线-01 介绍

  • 0 表示此帧是数据帧

  • 1 表示此帧是远程帧

标识扩展(Identifier Extension)

汽车CAN总线-01 介绍

  • 0 表示此帧是标准CAN报文

  • 1 表示此帧是扩展CAN报文

扩展帧的远程请求位(SRR)

扩展帧状态下,SRR位与RTR的作用相同,都是表示此帧是否是一个远程帧。

保留位(r)

此位是存在标准帧上无意义,一般为0。在CANFD时对此进行重新定义。

数据长度与数据(DLC)

汽车CAN总线-01 介绍

此域总共4位可以表示0-15个整数。

  • 0-8 表示实际数据段的字节数

  • 9-15 表示数据段有8个字节

CANFD中将数据段可以扩展到16个字节。

循环校验(CRC)

汽车CAN总线-01 介绍

发送节点计算从SOF到数据部分的校验值存入CRC字段中。接收节点按照同样的算法进行计算并与CRC中的值进行比较。

界定符位(DEL)

固定格式1,目前无实际意义。

应答位(ACK)

汽车CAN总线-01 介绍

接收节点会根据CRC得校验来设置ACK位来表明传输是否存在错误。

  • 0 表示成功

  • 1 表示失败

发送节点在发送帧之后会接收回应帧,如果ACK位为0,则表示发送数据成功,它会继续发送。如果为1,则发送节点会停止发送并再之后发送一个错误帧。

界定符位(DEL)

固定格式1,目前无实际意义。

结束位(EOF)

汽车CAN总线-01 介绍

EOF是连续的7个1表示一帧的结束。ITM是帧间隔,是三个111,紧跟在每帧的EOF后。

总线空闲

因为DEL + EOF + ITM一般是连续11个1。所以在检测到总线上存在连续11个1时,即表示总线空闲。当有节点检测到总线上连续11个1时既可以在总线上发送数据。

这里就造成了一个问题,如果在一帧报文中出现11个1的话如何解决。这里就涉及到位填充的机制了。

位填充

汽车CAN总线-01 介绍

在总线上,如果存在连续5个1或者0,那么会在随后插入一个相反的位。填充范围是从SOF开始到CRC结束。也就是说报文区域不可能存在连续相同的位。从上图可以看出,连续存在是包含了插入相反位的状况,也就是说连续五个1后,插入一个0,如果报文正常时跟的连续4个0,那么加上插入的0又构成连续5个0,那么就又插入了1。下图清晰的展示了这种情况。

汽车CAN总线-01 介绍

数据保护机制

汽车CAN总线-01 介绍

以下列出了几种检测手段。

  • 位检查

  • ACK回应包

  • ACK回应位检查

  • CRC校验

  • 位填充

  • 格式检测

ACK回应包,CRC校验,位填充。都在以上小节叙述过了,下面小节讲解位检查、格式检查以及ACK回应位检查。

位检查

汽车CAN总线-01 介绍

发送节点通过位监控的手段来检测是否发送错误,具体原理就是检测回应报文是否与发送一致。这里分几个部分,在上图中在仲裁场也就是Identifier+RTR部分(图中显示为虚线)如果发1读0,不会认为这事一个位错误,当作仲裁失败处理。但是发0读1。在ACK部分也是虚线表示,因为ACK是返回0表示回应正确。1表示错误,所以发1读0,是没有错误的。

格式检测

格式检测就是检测两个DEL位以及EOF位是否为1,这样的固定格式。如果检测到错误则会发送错误帧。

ACK回应位检查

ACK回应检查一般由接收节点来填充回应,当它发送了回应包,它也会回读总线上的回应包,如果它发送的是1,回读到的是0,那么它会认为破坏了帧的内容,则这个节点就会在下一帧发错误帧。

错误帧

当一个错误被检测到,那么错误帧会在下一刻立即发送。这里除了CRC校验错误。CRC校验错误会在返回给发送节点之后,由发送节点判断ACK位是否为1来确定是否发送错误帧。

汽车CAN总线-01 介绍

错误帧格式

错误帧是由错误标志位+错误界定符组成。错误标志位由主动状态与被动状态组成。

主动错误状态(Error-Active Node)

在主动检测到发送存在错误时,节点会发送6个0的测试标志位+8个1的错误界定符,但是可能总线上存在其他节点也在发送主动错误帧,所以这里的错误标志位可能不止6个。

被动错误状态(Error-Passive Node)

在被动错误状态,将发送6个1的测试标志位+8个1的错误界定符。如果是发送节点它的错误状态是直接可以发出来的,但当接收节点处于被动错误状态时,检测到错误,它发送的错误帧可能会被其他节点的发送覆盖掉,所以它只能等待处于主动状态的节点发送6个0后,它再发送6个1。

错误帧例子讲解

首先假设所有节点都处于主动状态,也就是说当它们检测到错误后,会连续发6个0和8个1。下图展示了,当发送节点发送数据3个1后又发送了1个0,但是根据位监控机制回读总线上读出来是1。

汽车CAN总线-01 介绍

那么它会发送6个0与8个1,表示错误。

汽车CAN总线-01 介绍

但是接收节点读取总线数据,它读到错误发送1,它是不知道1是错误的。它继续读取直到读取到连续的6个0。由于位填充规则总线上是不可能有连续6个相同的位的。破坏了填充规则。

汽车CAN总线-01 介绍

它会任何这是一个错误,它会发送一个6个0加8个1的主动错误帧。从下图可以看出是所有接收节点都会这样去做。

汽车CAN总线-01 介绍

那么此时错误帧可能存在连续12个0外加8个1。最后会再填充3个1的帧间隔,总共连续11个1,那么总线又进入一个空闲状态。那么发送节点会将这帧进行重发。从上图可以看出,再出现错误时,只要是参与通讯的节点都会发送错误帧。

错误状态判断

下图展示了主动错误状态与被动错误状态的转换。可以看出总共有三种状态,那么一个节点就有这三种状态。

  1. 主动错误状态

  2. 被动错误状态

  3. BUS OFF状态

汽车CAN总线-01 介绍

在每个节点内实现了两个寄存器,一个是TEC(发送错误计数器)一个是REC(接收错误计数器)。节点内部通过这两个计数器的数值来完成两个错误状态的切换。当TEC与REC都小于等于127时,节点处于主动错误状态,当TEC或者REC数值大于127时,状态切换到被动错误状态,当TEC和REC都小于128时节点又切换回主动错误状态,当处于被动错误状态时,TEC大于255那么会切换到BUSOFF状态,在BUSOFF状态,或者通过软件重置或者等待连续128组11个1后转为主动错误状态。

在CAN11898-1中明确定义了TEC,REC的数值说明。简要来讲就是当一个节点成功发送一帧报告,那么它的TEC与REC的计数就减1。发送节点在发送数据后检测到错误,那么它的TEC就会加8。接收节点率先检测到错误之后它的REC就会加8。如果在其他节点检测到错误帧的状况下,又检测到错误那么它的REC就会加1。具体可参见标准。

主动错误状态与被动错误状态的不同

汽车CAN总线-01 介绍

三种错误状态的不同,在主动错误状态的节点,就是正常的节点,收发都是正常的。但是当处于被动错误状态在检测到连续11个1的帧末尾后,它是不能直接发送数据的,它必须等待8位的空闲时间后再进行发送。这是对它的一个惩罚。当进入BUSOFF状态的节点那么是不允许它发送数据的。

汽车CAN总线-01 介绍汽车CAN总线-01 介绍

原文始发于微信公众号(安全脉脉):汽车CAN总线-01 介绍

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日15:21:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   汽车CAN总线-01 介绍http://cn-sec.com/archives/2202003.html

发表评论

匿名网友 填写信息