深入理解CAN总线基础原理
目录
一、概述
1.1 发展
背景:为了适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求
1.2 规范
CAN总线标准只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。
CAN标准有两个,即ISO11898和ISO11519,两者差异主要在物理层不一样。
ISO11898和ISO11519物理层主要不同点如下图所示:
通信速率和最大总线长度关系曲线
1.3 特性
(1)串行、同步、半双工、CRC、多主通信、广播通信、手牵手式连接或T型分支式连接、线性拓扑总线结构
(2)位速率:125kbit/s、500kbit/s
(3)双绞线:外界干扰同时作用于两根导线,产生的电磁波辐射相互抵消(差分电压传输)。CAN总线得到保护而免受外界电磁场干扰,同时CAN总线向外辐射了保持中性,即无辐射
(4)终端电阻:数据传输终端连接的两个阻抗为120Ω的电阻,总线上的总阻抗大概是60-70Ω。终端电阻大小和传输线相关。模拟无限远的传输线,防止数据传送终了反射回来,产生的反射波而使数据遭到破坏,影响到CAN网数据的传输。
1.4 节点构成
CAN节点通常由三部分组成:CAN收发器、CAN控制器和MCU。
CAN总线通过差分信号进行数据传输,CAN收发器将差分信号转换为TTL电平信号,或者将TTL电平信号转换为差分信号,CAN控制器将TTL电平信号接收并传输给MCU,如下图所示:
目前,我们常用的STM32、华大、瑞萨等单片机内部就集成了CAN控制器外设,通过配置就可实现对CAN报文数据的读取和发送。
1.5 CAN总线结构
CAN总线是一种广播类型的总线,可支持线形拓扑、星形拓扑、树形拓扑和环形拓扑等。CAN网络中至少需要两个节点设备才可进行通信,无法仅向某一个特定节点设备发送消息,发送数据时所有节点都不可避免地接收所有流量。但是,CAN总线硬件支持本地过滤,因此每个节点可以设置对有效的消息做出反应。
虽然CAN总线可以支持多种网络拓扑,但在实际应用中比较推荐使用线形拓扑,且在IOS 11898-2中高速CAN物理层规范推荐也是线形拓扑。
ISO 11898-2中定义了通信速率为125Kbps~1Mbps的高速闭环CAN通信标准,当通信总线长度≤40米,最大通信速率可达到1Mbps,高速闭环CAN(高速CAN)通信如下图所示:
1.6 CAN收发器
收发器按照通信速度分为高速CAN收发器和容错CAN收发器。
类别 |
型号 |
备注 |
CAN收发器 |
PCA82C250 |
高速 CAN 收发器 |
PCA82C251 |
高速 CAN 收发器 |
|
PCA82C252 |
容错 CAN 收发器 |
|
TJA1040 |
高速 CAN 收发器 |
|
TJA1041 |
高速 CAN 收发器 |
|
TJA1043 |
高速 CAN 收发器 |
|
TJA1050 |
高速 CAN 收发器 |
|
TJA1053 |
容错 CAN 收发器 |
|
TJA1054 |
容错 CAN 收发器 |
二、数据链路层
2.1 CAN的特点
(1)多主控制:总线空闲时,所有单元都可以发送消息;最先访问的总线单元可以火的发送权;多个单元同事访问时,发送高优先级ID(标识符值更小的)消息的单元可以获得发送权;
(2)消息的发送:所有的消息都以固定的格式发送;ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级;仲裁失利的单元则立刻停止发送而进行接收工作;
(3)系统的柔软性:与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
(4)通信速度:在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
(5)远程数据请求:可通过发送“遥控帧” 请求其他单元发送数据。
(6)错误处理功能:
(7)节点连接:总线上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少
2.2 错误
2.2.1 错误类型
(1)位错误:节点检测到的位与自身送出的位数值不同
(2)填充错误:在使用位填充的帧场中(帧起始至CRC序列),不允许出现6个或跟多连续相同的电平位
(3)ACK错误:发送节点在ACK位期间未能检测到显性位
(4)格式错误:固定格式场位检测到一个或更多显性位(CRC界定符、ACK界定符、帧结束)
(5)CRC错误:接收节点计算的CRC与接收的CRC不同
发送节点:位错误、格式错误、ACK错误
接收节点:填充错误、格式错误、ACK错误
2.2.2 错误计数值
每个节点都含有REC和TEC
(1)当接收错误产生,REC增加;正确接收到数据帧,REC减少
(2)当发送错误产生,TEC增加;正确发送出数据帧,TEC减少
(3)REC、TEC的数值会引发节点状态改变
2.2.3 错误状态机
单元节点有三种错误状态,这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。
(1)主动错误状态(Error Active):可以正常参加总线通信,检测到错误时输出主动错误标志。
(2)被动错误状态(Error Passive):单元处于易引起错误的状态,接收时不能积极的发送错误通知,发送接收后再下一次发送前的间隔帧内必须加入“延迟传输”,检测到错误时输出被动错误标志。
(3)总线关闭态(Bus Off):不能参加总线上的通信,信息的接收和发送均被禁止。
2.2.4 错误处理机制
(1)错误通知功能:检测出错误的单元会立即发送错误帧通知其他所有单元;
(2)错误恢复功能:错误帧发送后,等总线空闲是自动重发出错的数据帧;
(3)故障封闭功能:节点可区分常规错误和永久错误。有故障的节点蒋切换到离线状态。相当于节点从物理总线断开连接;
2.2.5 Bus Off问题
根据具体需求确定
(1)DTC记录:检测到Bus-off状态持续x秒,或x秒内检测到进入Bus-off状态 y次(x,y为定义)
(2)恢复时间:x 毫秒发送一次数据帧,确认总线是否恢复(x为自定义,可自行调整)
2.3 通信机制
2.3.1 概念
(1)节点发送报文时要检测总线状态:只用总线空闲时才能发送报文,同时回读发送报文是否是否正确。
(2)线与机制:ID仲裁,显性位能够覆盖隐性位,ID数据越小,报文优先级越高
(3)分破坏性仲裁:仲裁失败的节点进入只听状态,在总线空闲时进行报文重发
(4)报文接收过滤:通过硬件过滤器对接收报文进行ID的过滤
(5)NRZ编码与位填充:前者确保报文紧凑,后者增加跳边沿用于同步
2.3.2 数据帧
数据帧有两种格式:标准帧和拓展帧
数据帧有7个段构成:
2.3.3 遥控帧
数据帧有6个段构成:
注意事项:数据帧和遥控帧的区分在于PTR位不同,数据帧PTR位为显性位,而遥控帧PTR位为隐性位。
2.3.4 错误帧
用于在接收和发送消息事检测出错误后通知错误的帧。错误帧由错误标志和错误界定符构成:
2.3.5 过载帧
过载帧事用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成:
大部分高层协议不使用过载帧。
2.3.6 帧间隔
帧间隔事用于分隔数据帧和遥控帧的帧。过载帧和错误帧前不能插入帧间隔。其构成如下:
2.3.7 位填充
位填充是为了防止突发错误而设定的功能。当相同的电平持续5个位时则填充一个位的反型数据。
2.3.8 位定时与同步
一个位时间包含4个时间段,8-25个时间份Time Quantum。为方便编程,许多CAN模块将传播段和相位缓冲段1合并为一个时间段,即只有3个时间段
同步的方式有两种:
(1)硬同步:接收单元再总线空闲状态检测到帧起始时进行的同步调整
(2)再同步:再接收过程中检测到总线上的电平变化时进行的同步调整