(完整版)CAN总线解析
概述
CAN ( Controller Area Network )即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。
想到CAN 就要想到德国的Bosch 公司,因为CAN 就是这个公司开发的(和Intel ) CAN 有很多优秀的特点,使得它能够被广泛的应用。比如:传输速度最高到1Mbps ,通信距离最远到
10KM ,无损位仲裁机制,多主结构。
近些年来,CAN 控制器价格越来越低,很多MCU 也集成了CAN 控制器。现在每一辆汽车上都装有CAN 总线。
个典型的CAN 应用场景:
CAN 总线标准
CAN 总线标准只规定了物理层和数据链路层,需要用户来自定义应用层。不同的CAN 标准仅物理层不同。
CAN 收发器负责逻辑电平和物理信号之间的转换,将逻辑信号转换成物理信号(差分电平)或者将物理信号转换成逻辑电平。
CAN 标准有两个,即IOS11898 和IOS11519 ,两者差分电平特性不同。(有信号时,CANH 3.5V,CANL 1.5V ,即显性;没有信号时,CANH 2.5V ,CANL 2.5V ,即隐性)
IOS11898 高速CAN 电平中,高低电平的幅度低,对应的传输速度快。
双绞线共模消除干扰,是因为电平同时变化,电压差不变
2.1物理层
CAN 有三种接口器件
多个节点连接,只要有一个为低电平,总线就为低电平,只有所有的节点都输出高电平时, 才
为高电平。所谓“线与”
CAN 总线有 5 个连续性相同的位后,就会插入一个相反位,产生跳变沿,用于同步。从而 消
除累计误差。
和 485 、 232 一样, CAN 的传输速度与距离成反比
CAN
总线终端电阻的接法:
特点:低速CAN 在CANH 和CANL 上串入2.2k Ω的电阻;高速CAN 在CANH 和CANL
之间并入120 Ω电阻。为什么是120 Ω,因为电缆的特性阻抗为120 Ω,为了模拟无限远的传输
120 欧姆只是为了保证阻抗完整性,消除回波反射,提升通信可靠性的,因此,其只需要在总线最远的两端接上120 欧姆电阻即可,而中间节点并不需要接(接了反而有可能会引起问题)。因此各位在使用CAN Omega 做CAN 总线侦听的时候,大多数情况下是不需要这个120 欧姆电阻的,当然,即使当前网络中并没有终端匹配电阻,只要传输线长度不长(比如SysCan360 比赛环境中,传输线只有1-2 米)CAN 节点数量不多的情况下,不要这个120 欧姆电阻也完全可以工作,甚至,你接任意电阻都是不会有影响的。因为此时传输线长度和波长还相差甚远,节点不多的情况下,反射波的叠加信号强度也不会很强,因此传输线效应完全可以忽略。
而哪些情况需要呢,主要就是,当使用2 个CAN Omega 对发或者当前网络中仅有2 个
CAN 设备的时候,此时两个端点最好都加上终端匹配电阻,当然,前面也说过了,传输线长度不长的时候,也可以不需要2 端120 欧姆电阻,但为了信号完整性考虑,加上这两个电阻才是严谨的。
2 个120 欧姆电阻的意义在于,使用USB CAN 调试某些不带终端电阻的中间节点设备时,有时候CAN 总线上没有2 个120 欧姆电阻通信可能会异常,此时可以接入2 个120 欧姆电阻作为2 个终端电阻来作阻抗匹配,这时候其他端点不应接入任何终端电阻!并且,这2 个120
欧姆电阻不可用1 个60 欧姆电阻代替!
125kHz 载波的波长大概在 (c / f) = (3e8m/s) / (125e3Hz)=2.4km ,其临界长度为 2.4kM
/ 10 = 240m >> 2m ,也即传输线长度不超过 240m ,分布阻抗带来的影响可以忽略不计
2.2 数据链路层
CAN 总线传输的是 CAN 帧, CAN 的通信帧分成五种,分别为数据帧、远程帧、错误帧、 过载帧和帧间隔。
数据帧用来节点之间收发数据, 是使用最多的帧类型; 远程帧用来接收节点向发送节点接收 数据; 错误帧是某节点发现帧错误时用来向其他节点通知的帧; 过载帧是接收节点用来向发送节 点告知自身接收能力的帧; 用于将数据帧、 远程帧与前面帧隔离的帧。 数据帧根据仲裁段长度不 同分为标准帧( 2.0A )和扩展帧( 2.0B )
2.3 帧起始
帧起始由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;帧结 束由 7 个隐形位(高电平)组成。
2.4 仲裁段
CAN 总线是如何解决多点竞争的问题?由仲裁段给出答案。
CAN 总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处 理。
如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。
帧 ID 越小,优先级越高。由于数据帧的 RTR 位为显性电平,远程帧为隐性电平,所以帧格 式和帧 ID 相同的情况下, 数据帧优先于远程帧; 由于标准帧的 IDE 位为显性电平, 扩展帧的 IDE 位为隐形电平,对于前 11 位 ID 相同的标准帧和扩展帧,标准帧优先级比扩展帧高。 2.5 控制段 2.6 数据段 为 0-8 字节,短帧结构,实时性好,适合汽车和工控领域; 2.7 CRC 段 CRC 校验段由 15 位 CRC 值和 CRC 界定符组成 共 6 位,标准帧的控制段由扩展帧标志位 IDE 、保留位 r0 和数据长度代码 DLC 组成;扩展 帧控制段则由 IDE 、 r1 、r0 和 DLC 组成
2.8ACK 段
当接收节点接收到的帧起始到CRC 段都没错误时,它将在ACK 段发送一个显性电平,发送节点发送隐性电平,线与结果为显性电平。
2.9远程帧
远程帧分为6 个段,也分为标准帧和扩展帧,且RTR 位为1 (隐性电平)
CAN 是可靠性很高的总线,但是它也有五种错误。
CRC 错误:发送与接收的CRC 值不同发生该错误;格式错误:帧格式不合法发生该错误;应答错误:发送节点在ACK 阶段没有收到应答信息发生该错误;位发送错误:发送节点在发送信息时发现总线电平与发送电平不符发生该错误;位填充错误:通信线缆上违反通信规则时发生该错误。
当发生这五种错误之一时,发送节点或接受节点将发送错误帧
为防止某些节点自身出错而一直发送错误帧,干扰其他节点通信,
3 种状态及行为
2.10过载帧
当某节点没有做好接收的"准备"时,将发送过载帧,以通知发送节点
CAN 协议规定了节点的