一文读懂CAN

1、CAN定义

CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低功耗、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,在欧洲已是汽车网络的标准协议。

CAN两个ISO国际标准:

1)ISO11898 :定义了通信速率为 125 kbps~1 Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达1Mbps,总线长度 ≤ 40米。

2)ISO11519:定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为40kbps时,总线长度可达1000米。

2、种类

CAN总线根据CAN收发器的不同又分为3种:

1)高速CAN:

a.根据线缆的长度提供从5Kbit/s到1Mbit/s的波特率

b.高速CAN网络在每个网络端点端接一个120欧姆的电阻

c.电平静默为2.5V,上下限是3.5V和1.5V

2) 容错CAN:

a.提供从5 Kbit/s到125 Kbits/s的波特率

b.显性时则为1V和4V

3)单线CAN:

a.提供从5 Kbit/s到125 Kbits/s的波特率

b.单线CAN的波特率一般为33.3KHz

3、一般燃油车的CAN网络分类

1)PT CAN (PowerTrain CAN ) 动力总成CAN总线

2)CH CAN (Chassis CAN) 底盘控制CAN总线

3)Body CAN车身控制总线

4)Info CAN ( Infomercial CAN ) 娱乐系统总线

5)DiagCAN ( Diagnose CAN ) 诊断控制总线

4、汽车CAN网络拓扑图

5、CAN网关

CAN网关是整个CAN网络的核心, 控制着整车5条CAN总线的各类信号转发与处理

6、CAN组成

在实际应用中,CAN总线的一个帧主要由帧信息,帧ID和帧数据组成。

1)帧信息:四类,标准数据帧(汽油车、电机)、标准远程帧(少见)、扩展数据帧(广大柴油车、部分汽油车)、扩展远程帧(少见)。

2)帧ID:是CAN的一种“地址”。CAN有个特点是竞争机制,帧ID越小越有占用总线资源的权利,越会优先发送。

DBC文件:在车辆行业中,如果对车辆CAN总线上的每个帧ID及每个帧数据都做出了标准的解释,形成了文件的话,此文件为DBC文件。

3)帧数据:与串口相比,CAN的帧数据只有8个字节,即64个位,不会再多了。但CAN FD作为新型总线解决了仅有8字节这个问题。

4)终端电阻:CAN和RS485一样,要在终端减少差分信号的反射,如不在两个终端加电阻,信号会反弹回来影响通讯。终端电阻在CAN总线上要有两个,阻值为120欧姆,并联,最远的两端一边一个。如果有多个节点的话,终端电阻应适当加大。

5)波特率:常见的CAN波特率大多都是整数。常见的车辆波特率有500K,250K,125K,100K。

7、CAN标准

CAN标准分为底层标准(物理层和数据链路层)和上层标准(应用层)两大类。

底层标准:

CAN底层标准都相同,涵盖OSI模型中的物理层和数据链路层,与ISO/OSI模型的对应关系如下图所示:

  • ISO 11898-1:数据链路层协议,描述CAN总线的基本架构,定义不同CAN总线设备在数据链路层通信方式

  • ISO 11898-2:高速CAN总线物理层协议,最高数据传输速率 1Mbps,应用为两线平衡式信号(CAN_H, CAN_L)

  • ISO 11898-3:定义低速CAN总线(LS-CAN, Fault-Tolerant CAN)物理层标准,数据传输速率在 5Kbps ~ 125Kbps 。Fault-Tolerant是指总线上一根传输信号失效时,依靠另外的单根信号也可以通信

  • ISO 11898-4:定义CAN总线中的时间触发机制(Time-Triggered CAN, TTCAN),定义与ISO 11898-1 配合的帧同步实体,实现汽车ECU之间基于时间触发的通信方式。

上层标准:

涉及到例如流控制、设备寻址和大数据块传输控制等,不同应用领域或制造商会有不同的做法,没有统一的国际标准

8、帧分类

CAN总线定义四种帧类型:

1)数据帧

用于发送单元向接收单元传送数据的帧

数据帧的帧结构图:

SOF:表示数据帧开始;(1 bit),发出一个显性位边沿,网络节点以此开始同步

Identifier:标准格式11 bit,扩展格式29 bit包括Base Identifier(11 bit)和Extended Identifier(18 bit),该区段标识数据帧的优先级,数值越小,优先级越高;

RTR:远程传输请求位,0时表示为数据帧,1表示为远程帧,也就是说RTR=1时,消息帧的Data Field为空;(1 bit)

IDE:(1 bit)标识符扩展位,0时表示为标准格式,1表示为扩展格式;扩展帧和标准帧格式不同,不能存在于同一can网络

DLC:数据长度代码,0-8表示数据长度为0~8 Byte;(4 bit)

Data Field:数据域;(0~8 Byte)

CRC Sequence(15 bit):

  • 校验域,从sof到数据场的所有数据进行encode

  • 由发送方填

  • 校验算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15 bit)

DEL:校验域和应答域的隐性界定符;(1 bit)

ACK:(1 bit)

  • 应答域,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。

  • 发送节点将此位为1,由接收方进行确认,收到消息给出一个显性位0

  • 如果一个节点都没有确认收到消息,发送方监听此位为隐形位就会报错
SRR:替代远程请求位,在扩展格式中占位用,必须为1;(1 bit)
EOF:连续7个隐性位(1)表示帧结束;(7 bit)
ITM(3 bit):
  • 帧间空间,Intermission (ITM),又称Interframe Space (IFS),连续3个隐性位,但它不属于数据帧。
  • 帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间
2)远程帧
用于接收单元向具有相同标识符的发送单元请求数据的帧
远程帧与数据帧的帧结构类似,区别:
  • 1、数据帧的 RTR 值为“0”,远程帧的 RTR 值为“1”
  • 2、远程帧没有数据块
  • 3、远程帧的 DLC 块表示请求发送单元发送的数据长度
格式图
当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 RTR 位是显性的,数据帧将在仲裁中赢得总线控制权
3)错误帧
用于当检测出错误时向其它单元通知错误的帧
错误帧的帧结构由错误标志和错误界定符构成
错误标志:
错误界定符:由8bit的隐性位构成
结构图:
4)过载帧

接收单元通知发送单元它尚未完成接收准备
发送过载帧的两种情况:
1、接收单元条件的制约,要求发送节点延缓下一个数据帧或远程帧的传输
2、帧间空间(Intermission)的 3 bit 内检测到显性位
每个节点最多连续发送两条过载帧
过载帧由过载标志和过载界定符(8 个隐性位)构成
9、仲裁机制
优先级:标识符值越小,消息的优先级越高
Wire-AND Bus Logic:只有节点发送的全是隐性,总线电平才表现为隐性
所有发送节点在发送数据的同时,也检测总线上的电平状态,逐位对比总线上电平与自身发送的电平
  • 1)send 0 出现 1 :报错
  • 2)send 0 出现 0 :继续
  • 3)send 1 出现 1:继续
  • 4)send 1 出现 0:竞争失败,转为接收方
竞争失败节点:会自动在检测到总线空闲的第一时间再次尝试发送。
10、条件接收

消息在CAN总线上是广播式的,节点可以通过设置控制器中过滤码(Filter Code )和掩码(Mask Code),再检验总线上消息的标识符,来判断是否接收该消息
对于掩码,“1”表示该位与本节点相关,“0”表示该位与本节点不相关
举例说明:
11、位填充
CAN采用NRZ编码,没有单独的时钟线,它的优点是效率高,但却不易区分哪里是bit开始,哪里是bit结束。因此为确保在同步通信过程中有足够的电平跳变,规范中应用到位填充机制,即在每连续 5 个相同电平后插入 1个反相电平,接收节点在收到消息后自动将填充位删除。
在帧内除了CRC界定符、ACK域和EOF外,其余部分均应用到位填充机制。
在应用到位填充的域,检测到连续 6 个显性位或隐性位均视为报错。
数据帧在位填充前后的比较图。
12、错误检验
CRC错误
1)在发送消息时,发送节点会根据特定的多项式计算出由数据帧SOF位到数据域最末位的Checksum值,并将该值放在数据帧的CRC域,随着数据帧广播到总线上
2)接收节点在收到数据后,应用同样的多项式计算Checksum值,并与收到的Checksum值对比。如果两者一致,正常接收;如果不一致,则舍弃该消息,并发送错误帧请求发送节点重传消息
应答错误(ACK Error)
接收方会在收到消息后在ack应答位给出一个显性电平,如果发送方检测到该位为隐性,则报错

格式错误(Form Error)
检测出与固定格式的位段相反的格式时所检测到的错误,如检测crc界定符和ack界定符以及eof区域是否出现显性位

位错误(Bit Error)
比较输出电平和总线电平(不含填充位),当两电平不一样时所检测到的错误。如发送显性位,但总线是隐性位就报错

填充错误(Stuff Error)
在需要位填充的段内,连续检测到 6 位相同的电平时所检测到的错误
区域图解
13、错误跟踪机制 error tracking
CAN总线上的每个节点控制器都会检测消息是否出错,如果节点发现消息出错,它将发送错误标志,从而打断总线上正常的数据传输。总线上其它没有发现原始消息错误的节点,在收到错误标志后将采取必要的措施,比如舍弃当前总线上的消息
CAN节点内部有两种错误状态计数器 :
  • 1)TEC /Transmit Error Counter,发送错误状态计数器,出现一次错误该计数器值 +8
  • 2)REC /Receive Error Counter,接收错误状态计数器,出现一次错误该计数器值 +1
  • 3)消息成功发送或接收一次,对应的 TEC 或 REC 值相应 -1

CAN规范定义了节点的 3 种基本错误状态:

  • 1) Error Active:正常状态,在此状态下,节点可以发送所有类型的帧,包括错误帧;发现错误后会很积极主动地上报错误
  • 2)Error Passive:节点可以发送除错误帧以外的所有帧;TEC or REC 计数超过127就进入此状态;此时,该节点发现错误后只会发送6个隐性位,不会把错误广播出去。并且,发送连续帧时,中间必须间隔8bit的延缓时间
  • 3)Bus Off:节点被控制器从总线上隔离;或者TEC大于255,就会进入这个状态,需要重启,或者等待128个11位隐性位电平
节点错误状态切换图
(0)

相关推荐

  • 干货分享:CAN总线详解 整车的控制只需要一条线

    CAN("Controller Area Network",控制器局域网) 作用:将整车中各种不同的控制器连接起来,实现信息的可靠共享,并减少整车线束数量.可以设想一种极端情况,如 ...

  • ARM Linux CAN 异常排查步骤

    ARM Linux CAN 异常排查方法 1. 背景 项目上经常有反馈,说我们的CAN总线相关设备不受控,或者控制板重启也没用.登陆系统后查看,会发现经常出现CAN通信异常或超时的情况,由于我们的控制 ...

  • CAN总线的显性电平为什么能覆盖隐性电平?

    大家都知道,CAN总线的差分电平分为显性电平和隐性电平,显性电平的逻辑为0,隐性电平的逻辑为1,在同一个位时间,一个节点发显性电平,另一个节点发隐性电平,则总线电平为显性电平,这是CAN总线仲裁的基础 ...

  • CAN总线学习笔记(1)- CAN基础知识

    本专辑是依照瑞萨公司<CAN入门书>的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成的笔记.希望对初学者有所帮助. 01 CAN的一些基本概念 1.1 什 ...

  • LIN总线

    LIN总线历史 1996年Volvo与Volcano通讯为Volvo S80系列开发了一种基于UART/SCI的Volcano Lite协议. 1997年,Motorola与Volvo.Volcano ...

  • 如何实现CAN与CAN FD组网通信呢?

    对于新能源车而言,随着局域网内节点,电控单元的功能以及节点间交互信号增多,CAN总线的局限性越来越突出,主要体现在: 1.节点以及交互信号增加,势必导致CAN网络总线负载过高,容易导致总线出错,例如低 ...

  • I2C总线通讯协议

    I2C总线通讯协议

  • 干货知识!CAN详解,错误数据格式坑&优先级&电阻&报文数量!

    什么是CAN(控制器局域网) 控制器局域网 (Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的车用总线标准.被设计用于在不需要主机(Host)的情况下, ...

  • CAN总线学习笔记(2)- CAN协议数据帧、遥控帧、错误帧

    本专辑是依照瑞萨公司<CAN入门书>的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成的笔记.希望对初学者有所帮助. 01 CAN 协议中的帧 在了解CAN ...

  • 为什么CAN一致性测试中这几项如此重要?

    CAN一致性测试在于缩小CAN总线节点间的差异,提高总线抗干扰能力,从而保障设备CAN网络系统的稳定.因此,CAN节点一致性测试就显得尤为重要,本文将重点对几个测试项进行讲解. 零部件CAN节点质量的 ...