汽车常用总线
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再转发。
-
收发器
+关注
关注
10文章
3424浏览量
105961 -
控制器
+关注
关注
112文章
16332浏览量
177808 -
CAN通信
+关注
关注
5文章
93浏览量
17829 -
二进制
+关注
关注
2文章
795浏览量
41643 -
CRC校验
+关注
关注
0文章
84浏览量
15207
发布评论请先 登录
相关推荐
评论