CAN 总线基础

CAN总线历史

CAN 即(Controller Area Network)控制器局域网,由德国Bosch 公司提出,并在国际应用最广的现场总线之一。
1983年,Bosch开始开发车身网络。
1986年2月,在SAE(汽车工程协会)大会发布了CAN协议,正式开始了国际化普及。
1991年,Bosch发布了CAN2.0,里面包含了CAN2.0 A,CAN2.0 B两部分,分别为标准CAN和扩展CAN。
1993年11月,ISO 11898发布(data link 数据链路层规范,high-speed physical layer 高速物理层规范)。
1995年,发布扩展CAN数据格式。
2003年,将ISO 11898 分成 11898-1(数据链路层) 和11898-2(高速物理层)。
2004-2013年,相继发布了 ISO 11898 -4(TTCAN),11898-3(低功耗低速物理层),11898-5(低功耗高速物理层),11898-6(带选择性唤醒的物理层)
2015年, ISO 11898-1修订版发布包含经典CAN和CAN FD。

CAN总线初识

SAE委员根据SAE J2057将汽车数据传输网分为了A,B,C三类,主要原因是因为当前没有哪一个总线网络能够兼顾未来汽车的性能和成本要求,所以主机厂和OEM都还将继续采用多协议的通讯网络。CAN总线在其中被划分为了B类总线的国际标准。

CAN总线是一种串行通讯总线,是一种多主总线,通讯介质可以是双绞线,同轴电缆或光导纤维,传输速率可达1Mbp/s。
CAN总线通讯接口集成了CAN协议的物理层和数据链路层功能,可以完成对通讯数据的成帧处理,完整帧中包括了位填充、数据块编码、循环冗余校验、优先级判断等工作。
CAN协议最大特点是废除了传统的站地址编码,取而代之的是对通信数据块进行编码,最多可以标识2048(标准格式2.0A)或者5亿(2.0B扩展格式)个数据块,这样理论上就不会在节点个数上有限制,而数据块长度最大为8字节,不会占用总线过长时间,这样保证了通讯的实时性。CAN协议还采用了CRC校验,且提供了错误处理功能(错误检测,错误通知,错误恢复),保证了通信数据的可靠性

CAN总线基本原理

CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发
送方通过使总线电平发生变化,将消息发送给接收方。

在这里插入图片描述
总线电平为隐性时,CAN高和CAN低的电压都为2.5V,电压差为0,总线为隐性状态(逻辑值1)
总线电平为显性时,CAN高电压为3.5V,CAN低电压为1.5V,电压差为2.0V,总线为显性状态(逻辑值0)

CAN物理层规范

显性状态下CAN高电压最小值为2.75V,最大值为4.5V
隐性状态下CAN高电压最小值为0.5V,最大值为2.25V
即CAN总线识别CAN 高CAN低的极限要求。通常产品会进行这类测试。
在这里插入图片描述

终端电阻

高速CAN线需要在CAN_H和CAN_L加终端电阻,电缆上的终端电阻应与电缆的标称阻抗相匹配,终端匹配电阻一般为120Ω(min 119Ω;max130Ω),每个终端电阻应能消耗0.25W的功率(标准来源:ISO 11898-2:2003)。

如果高速CAN传输线路没有终止,线路上的每个信号变化都会导致反射,这可能会导致通信故障。由于通信在CAN总线上双向流动,因此CAN要求终止电缆的两端。然而,这一要求并不意味着每个设备都应该有一个终端电阻。如果沿电缆放置多个设备,只有电缆末端的设备应该有终端电阻。放置终端电阻位置应放置于总线两端,即CAN网络中应该有两个120欧的终端电阻。

CAN数据帧帧结构

CAN帧的种类

数据帧:用与发送单元给接收单元传送数据的帧。

远程帧:接收数据的节点可以通过发送远程帧要求源节点发送数据,它由6个域组成:帧起始、仲裁场、控制场、CRC场、应答场和帧结束。它没有数据场,其RTR位为隐性电平.3.

错误帧:错误帧由错误标志和错误界定符两个域组成。
接收节点发现总线上的报文有错误时,将自动发出活动错误标志,它是 6 个连续的显性位。其他节点检测到活动错误标志后发送错误认可标志,它由6个连续的隐性位组成。由于各个接收节点发现错误的时间可能不同,所以总线上实际的错误标志可能由6~12个显性位组成。错误界定符由8个隐性位组成。当错误标志发生后,每一个CAN节点监视总线,直至检测到一个显性电平的跳变。此时表示所有的节点已经完成了错误标志的发送,并开始发送8个隐性电平的界定符。

超载帧:用于接收单元通知其尚未完成接收准备的帧。包括两个位场:超载标志和超载界定符存在两种导致发送超载标志的超载条件类型:一个是要求延迟下一个数据帧或远程帧的接收器的内部条件:另一个是在间歇场的第一和第二位上检测到显性位。超载标志由6个显性位组成,超载界定符由8个连续的隐性位组成

帧间隔 :用于将数据帧及遥控帧与前面的帧分离开来的帧。由间歇(3个隐性位)、总线空闲、暂停发送等场构成

数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 (2047)个位的标识符(Identifier: 以下称 ID),
扩展格式有 29 (5亿)个位的 ID。

数据帧

数据帧由 7 个段构成。

帧起始(SOF):

表示数据帧或遥控帧开始的段,由1个显性位组成。

仲裁段:

表示该帧优先级的段,标准帧中由11位ID+1位RTR共12位组成。扩展帧中由29位ID+1位SRR+1位IDE组成。
注:***RTR(远程传输请求位)***在数据帧中必须为显性电平,在遥控帧中必须为隐性电平。
***SRR(代替传输请求位)***在扩展格式中始终为隐性。
IDE (标识符扩展位) 对于扩展格式属于仲裁场,对于标准格式属于控制场。IDE 在标准格式中为显性电平,而在扩展格式中为隐性电平。

控制场

表示数据的字节数及保留位的段。由 6 位组成。
在标准格式中,一个信息帧中包括DLC,发送显性电平的IDE位和保留位r0。
在扩展格式中,一个信息帧包括DLC和两个保留位r1和r0,这两个位必须发送显性电平。
注:DLC占长度为4个位,最大能表示十进制15,表示标准数据帧8字节没有问题,而对于CAN FD 来说最大传输数据字节数为64,这4个位的DLC无法直接表达,所以就有了以下的映射表。
在这里插入图片描述

数据段:数据的内容,可发送 0~8 个字节的数据。
CRC 段:检查帧的传输错误的段。包括15位CRC序列和1位CRC界定符。
ACK 段:

表示确认正常接收的段。包括ACK 槽和ACK界定符。发送端在应答场中发送2个隐性位,一个正确接收到有效报文的接收器在应答间隙期间传送一个显性位报告给收发器,表示自己正确接收到报文。其他的接收到匹配CRC序列的接收器通过在应答槽(应答间隙内)把显性位写入发送端的隐性位来报告自己接收到了正确报文。应答界定符必须一直是隐性位。

帧结束(EOF)

:表示数据帧结束的段。
在这里插入图片描述

非破坏性仲裁特点

总线按照“线与”机制,对总线上可能存在冲突的节点进行仲裁,显性电平覆盖隐性电平。发送隐性电平的节对于发送显性电平的节点将会仲裁失利,失去总线访问权从而转为接收节点。

位填充 :属于比较重要的一种抗干扰的措施,减少数据在传输时候出错。

数据帧或远程帧中除了CRC界定符,ACK场和帧结束不需要位填充,其余场都需要每遇到连续5个相同极性位时自动插入一个相反的位(补码位)

错误状态

总线上的单元只有三种状态,错误主动,错误被动,总线脱离(Buss-Off):TEC和REC为0~127,单元可以正常参与总线通讯,这说明CAN正常通讯是允许错误帧的存在。接收单元当处于主动错误的时候检测到错误接收错误计数值加1,当发送单元输出错误标志的时候发送错误计数器加8。接收单元检测到错误后检测到第一个显性位时,接收错误计数器加8。
发送单元成功发出一帧,TEC减1;接收单元成功接收一帧,REC减1,如果REC>127,计数器将被设置为119~127之间。在这里插入图片描述

标题错误帧

用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
错误帧的构成如图 25 所示。
(1) 错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6 个位的显性位。
被动错误标志:6 个位的隐性位。
(2) 错误界定符
错误界定符由 8 个位的隐性位构成
在这里插入图片描述

标题过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
(1) 过载标志
6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。
(2) 过载界定符
8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。
在这里插入图片描述

标题错误计数值

一次数据的接收和发送可能同时满足多个条件。
错误计数器在错误标志的第一个位出现的时间点上开始计数。
在这里插入图片描述

文中如有错误之处,欢迎交流指正,感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值