目录
一、概述
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 位定时与同步
一、概述
1.1 发展
背景:为了适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求
- 1986 年:德国电气商博世公司开发了CAN协议作为解决方案
- 1991年:德国电气商博世公司发布了CAN 2.0(CAN 2.0A:11位,2.0B:29位)
- 1993年:CAN被采用为国际标准(ISO 11893)
- 2012年:博世发布了CANFD 1.0
- 2015年:CANFD协议标准化(ISO 11898-1)
- 2016年:CAN物理层,数据速率高达5 Mbit/s,已通过ISO 11898-2标准化
1.2 规范
CAN总线标准只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。
CAN标准有两个,即ISO11898和ISO11519,两者差异主要在物理层不一样。
- PLS: Physical Signaling Sublayer (物理信号子层)
- PMA: Physical Medium Attachment (物理介质连接)
- MDI: Medium Dependent Interface (介质相关接口)
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个段构成:
- 帧起始:表示数据帧开始的段;1个位的显性位。
- 仲裁段:表示数据帧优先级的段;扩展格式与标准格式该段构成有所差异。
- 控制段:表示数据的字节数以及保留位的段;由6个位构成,其中DLC为4位,表示数据字节长度
- 数据段:数据的内容,可以发送0-8字节的数据;数据段可包含 0~8 个字节的数据。
- CRC段:检查帧的传输错误的段;由15位CRC值和1位的CRC界定符构成。
- ACK段:表示确认正常接收的段;由ACK槽和ACK界定符共2位构成。
- 侦结束:表示数据段结束;EOF由7个位的隐性位构成。
2.3.3 遥控帧
数据帧有6个段构成:
- 帧起始:表示数据帧开始的段;1个位的显性位。
- 仲裁段:表示数据帧优先级的段;扩展格式与标准格式该段构成有所差异。
- 控制段:表示数据的字节数以及保留位的段;由6个位构成,其中DLC为4位,表示请求的数据字节长度。
- CRC段:检查帧的传输错误的段;由15位CRC值和1位的CRC界定符构成。
- ACK段:表示确认正常接收的段;由ACK槽和ACK界定符共2位构成。
- 侦结束:表示数据段结束;EOF由7个位的隐性位构成。
注意事项:数据帧和遥控帧的区分在于PTR位不同,数据帧PTR位为显性位,而遥控帧PTR位为隐性位。
2.3.4 错误帧
用于在接收和发送消息事检测出错误后通知错误的帧。错误帧由错误标志和错误界定符构成:
- 错误标志:主动错误标志6个位显性位构成;被动错误标志由6个位的隐性位构成。
- 错误界定符:8个隐性位构成
2.3.5 过载帧
过载帧事用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成:
- 过载标志:6个位显性位构成
- 过载界定符:8个隐性位构成
大部分高层协议不使用过载帧。
2.3.6 帧间隔
帧间隔事用于分隔数据帧和遥控帧的帧。过载帧和错误帧前不能插入帧间隔。其构成如下:
- 间隔:3个位的隐性位
- 总线空闲:隐性电平,无长度限制
- 延迟传送:发送暂时停止,8个位的隐性位
2.3.7 位填充
位填充是为了防止突发错误而设定的功能。当相同的电平持续5个位时则填充一个位的反型数据。
2.3.8 位定时与同步
一个位时间包含4个时间段,8-25个时间份Time Quantum。为方便编程,许多CAN模块将传播段和相位缓冲段1合并为一个时间段,即只有3个时间段
同步的方式有两种:
(1)硬同步:接收单元再总线空闲状态检测到帧起始时进行的同步调整文章来源:https://www.toymoban.com/news/detail-477597.html
(2)再同步:再接收过程中检测到总线上的电平变化时进行的同步调整文章来源地址https://www.toymoban.com/news/detail-477597.html
到了这里,关于CAN总线基础梳理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!