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