CAN/CANFD通信协议简介

电子说

1.3w人已加入

描述

汽车常用总线

收发器

收发器

CAN发展时间线

1983年,Bosch开始研究汽车网络技术

1986年,Bosch在SAE(美国汽车工程师协会)大会正式公布CAN协议

1987年,Intel和Philips先后推出CAN控制器芯片

1991年,Bosch颁布CAN 2.0技术规范,同年,CAN总线最先在Benz S系列轿车上实现

1993年,ISO颁布CAN国际标准ISO-11898

1994年,CiA(CAN in AUTOMATION)组织举办第一届国际CAN大会(iCC),同年,CiA在中国开了第一场CAN研讨会

2011年,Bosch发布第二代CAN通信技术:CANFD 1.1版(Non-ISO)

2015年,CAN FD被ISO标准化

2018年,CiA应大众汽车要求开始开发第三代CAN通信技术CAN XL

2020年,CAN XL登场第十七届iCC大会

CAN的分层结构

CAN遵循ISO制定的OSI(Open System Interconnection)七层模型,其结构体现了两层:数据链路层、物理层。

收发器

CAN控制器:生成CAN帧并以二进制码流的方式发送,在此过程中进行位填充、CRC校验、应答检测等;将接收到的二进制码流进行解析并接收,在此过程中进行收发比对、去位填充、CRC校验等。此外还需要进行冲突判断、错误处理等。

CAN收发器:将二进制码流转换为差分信号发送,将差分信号转换为二进制码流接收。

CAN差分信号

CAN收发器逻辑信号和物理信号之间的转换采用差分电平方式。

收发器

收发器

问:为什么CAN线是双绞线?

答:双绞线传输差分信号时受到共模信号干扰后,电位差不变,信号解码正常。

双绞线一般要求:芯截面积:0.35mm^2~0.5mm^2;绞距:33twist/m~50twist/m。

CAN终端电阻

收发器

为了保证CAN通信稳定,CAN总线两端各添加一个终端电阻。终端电阻的作用有3个:

1、提高抗干扰能力,让高频低能量的信号迅速走掉;

2、确保总线快速进入隐性状态,让寄生电容的能量更快走掉;

3、提高信号质量,放置在总线的两端,让反射能量降低。

ISO 11898-2中规定终端电阻标称值为120Ω(最小100Ω,最大130Ω),最低功耗是220mW。

收发器

收发器

对于有SPLIT引脚的CAN收发器,如常用的NXP TJA1040,终端电阻采用分离式(分裂式)连接,使用两个6062Ω的电阻,中间一个小电容(45nF),这样可以有效地降低电磁辐射,提高总线的抗干扰能力。

CAN波特率与位时间

位:bit,数据存储的最小单位,每个0或1就是一个位。

字节:byte,计量存储容量的一种计量单位,1字节=8位。

波特率是位速率,即发送节点在非同步的情况下发送的每秒钟的位数。常见的有250kb/s、500kb/s等。

位时间顾名思义是发送一个位所需要的的时间,位时间=1/位速率,比如波特率250kb/s的位时间就是4us。

收发器

CAN数据帧格式

数据帧是五种报文帧(数据帧、远程帧、错误帧、过载帧、帧间隔)里最复杂,也是最常用的。数据帧格式如下图,平时使用我们看到的只有仲裁段的ID和数据段。

收发器

CAN 2.0A标准定义了标准帧,CAN 2.0B标准定义了扩展帧,支持CAN 2.0B的芯片可以兼容两者帧格式。

标准帧和扩展帧的区别只在于ID,标准帧ID是11位,扩展帧ID是29位。

CAN负载率

CAN总线负载率是指在CAN总线上单位时间内实际传送的位数和可以传送的位数之比,即1s实际发送报文位数除以波特率。

CAN总线负载率宜控制在30%以内。实际整车负载率会控制在65%左右,对各模块的要求是达到85%左右而不会出现错误帧。

为了降低总线负载,一些不重要或实时性不强的报文周期比较长,会低于采集或计算周期。

CAN的数据排列格式

从CANalyzer的DBC编辑器可以看出,每行表示一个字节的8个位,从右到左依次是bit0, bit1...bit7。一共有8行,从上到下依次是byte0, byte1...byte7。这也能看出数据段包含最多8个byte的数据,共64个bit(bit位序从byte0到byte7依次递增排序)。

收发器

数据的传输规则:字节的高位(msb)先发送,字节的低位(lsb)最后发送。对于字节的发送而言,可以选择高字节(MSB)先发(Byte 7先发),也可以低字节(LSB)先发(Byte 0先发),通常来说是用低字节先发。

数据排列有Intel和Motorola两种格式,两者只有在跨字节时才有区别。

按照byte0, byte1...的先后顺序,Intel格式小字节在前,大字节在后,所以叫小端;Motorola格式大字节在前,小字节在后所以叫大端。

比如一个数据,byte 0是12,byte 1是34,Intel格式解析是0x12 34,Motorola格式解析是0x34 12。

CAN的CRC

CRC是循环冗余校验(Cyclic Redundancy ),用来检测或校验数据传输或者保存后可能出现的错误。CRC的计算方法由ISO 11898-1规定。

收发器

如果接收方判断该数据帧无效,则该帧报文弃之不用,发送节点会重新发送该报文,接收方收到后回复确认后结束。

CAN的Checksum

Checksum是校验和,和CRC作用类似,也用来检验数据的准确性。

实际应用中,CRC并不能检测到所有的差错,为了尽可能保证数据传输的准确性,一般CAN通信里还增加了Checksum。

Checksum的计算方式没有统一规定,各厂家可以根据自身需要制定。

Checksum的值一般会在数据段里发出来。

CAN的计数器

CRC和Checksum可以保证信号的有效性,而计数器可以保证信号的时效性。计数器一般叫Live Counter或Rolling Counter。发送节点每次在发送一帧报文后就对该Live Counter位加1。通常live Counter是4bit,那么live Counter就会在015(也有014)之间循环增加。

如果发送节点发送报文出了问题,从Live Counter波形上就会体现出现。

收发器

接收节点接收到报文后对计数器的值进行评估,当计数器值出现不连续的情况时,该帧报文的内容将被丢弃不再使用,直到计数器值重新连续为止。

CANFD的特点

CANFD(CAN with Flexible Data Rate)可以理解成CAN协议的升级版,只升级了协议,物理层未变。

CANFD与CAN最明显的区别:可变速率、新的数据段长度。

收发器

1.可变速率

从控制段中的BRS位到ACK段之前(含CRC分界符)为可变速率(理论最大可达12Mb/s),其余部分为原CAN总线用的速率,比如某CANFD总线波特率为500kb/s+2Mb/s。

2.新的数据段长度

CAN-FD对数据段的长度作了很大的扩充,最大可达64字节。

CANFD同样有标准帧和扩展帧之分,与CAN一致。

上图两个帧结构图都是扩展帧,区别在CRC段。用CRC多项式区分:CRC_15用于CAN,CRC_17用于数据段不超过16字节的CANFD,CRC_21用于数据段超过16字节的CANFD。

CANFD的波特率

ISO没有规定CANFD的波特率,考虑实际应用时通信稳定性,一些标准推荐了几种波特率选择。

收发器

SAE J2284-4:推荐汽车CANFD网络应用(不同ECU通信)采用500kb/s+2Mb/s的波特率

SAE J2284-5:推荐汽车CANFD点对点通信应用(单个ECU刷写)采用500kb/s+5Mb/s的波特率

CiA:推荐1Mb/s+5Mb/s,500kb/s+2Mb/s,250kb/s+2Mb/s

CANFD的优势

CANFD支持更高的速率,可以更快地刷写ECU;

CANFD在单个数据帧内传送率可达64字节,避免了经常发生的数据分拆传输的状况;

CANFD可重新再利用CAN线束和其它物理层面元件;

CANFD在电动车(更多的ECU)以及今后的动力CAN(更高的速率)上应用更有优势;

CANFD上层应用层架构不需要改变,在原来基础上扩展即可。

CANFD与CAN的兼容性问题

未来的CAN网络,较长时间内都会存在着传统CAN与CAN FD并存的情况。部分需解决速率问题的节点会率先采用CAN FD,其他对实时要求不高的节点仍然会使用传统CAN。

CANFD和CAN节点之间的通信数据可以通过CANFD路由器转发,类似于现在车上处于不同网络的ECU之间的通信。

收发器

ECU和ABS之间通信由CANFD路由器将ECU与ABS的数据1:1转发;ECU或者ABS与ECAS之间通信由CANFD路由器换为传统CAN再转发。

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

全部0条评论

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

×
20
完善资料,
赚取积分