1、CAN介绍
1.1、什么是CAN?
(1)CAN(Controller Area Network:控制器局域网),是ISO国际标准化的串行通信协议。为满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。
(2)CAN总线的发展历史:
- 1986年,博世公司开发出CAN通信协议
- 1993年,ISO发布CAN标准ISO11898及ISO11519
- 2011年,博世公司开发出CAN FD
- 现在,汽车网络的标准协议
(3)小结
- 低速CAN(ISO11519)通信速率10~125kbps,总线长度可达1000米。
- 高速CAN(ISO11898)通信速率125kbps~1Mbps,总线长度 <= 40米。
- 高速CAN也称为经典CAN。
- CAN FD通信速率可达5Mbps,并且兼容经典CA,遵循ISO 11898-1做数据收发。
(4)CAN官网
(5)CAN总线拓扑图
- 下图中电阻为终端电阻,用于阻抗匹配,以减少回波反射。
- 闭环总线的为高速CAN,开环总线的为低速CAN。
- CAN总线由两根线(CANL和CANH)组成,允许挂载多个设备节点。
- CAN入门规范中:低速CAN可挂载20个;高速CAN可挂载30个。
- CAN能挂载多少个由CAN的收发器芯片决定。
图1 高速CAN
图2 低速CAN
1.2、CAN总线特点
(1)多主控制:每个设备都可以主动发送数据。
(2)系统的柔软性:没有类似地址的信息,添加设备不改变原有总线的状态。
(3)通信速度:速度快,距离远。
(4)错误检测&错误通知&错误恢复功能。
(5)故障封闭:判断故障类型,并且进行隔离。
(6)连接节点多:速度与数量找个平衡。
1.3、CAN应用场景
(1)CAN总线协议已广泛应用再汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
2、CAN物理层
2.1、CAN物理层特性
(1)CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。
(2)总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),二者必居其一。
(3)显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。
(4)CAN总线逻辑时序图:
(5)总结(表中的值只是典型值,真实值有一定偏差)
电平 | 高速CAN | 低速CAN |
---|---|---|
显性电平(0) | UCAN_H - UCAN_L = 2V | UCAN_H - UCAN_L = 3V |
隐形电平(1) | UCAN_H - UCAN_L = 0V | UCAN_H - UCAN_L = -1.5V |
2.2、CAN收发器芯片介绍
(1)CAN收发器芯片常见有:TJA1050、TJA1042、SIT1050T。
(2)收发器芯片原理图:
(3)CAN芯片引脚介绍
引脚 | 功能 |
---|---|
D | 接STM32 CAN_TX,CAN发送引脚 |
GND | 接地 |
VCC | 该芯片工作电压为5V |
R | 接STM32 CAN_RX,CAN接收引脚 |
RS | 高速/静音模式选择(低电平为高速) |
CANH | 高电位CAN电压输入输出端 |
CANL | 低电位CAN电压输入输出端 |
Vref | 参考电压输出 |
3、CAN协议层
3.1、CAN帧种类介绍
(1)CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。
(2)各类数据帧作用:
帧类型 | 帧作用 |
---|---|
数据帧(Data Frame) | 用于发送单元向接收单元传送数据的帧 |
遥控帧(Remote Frame) | 用于接收单元向具有相同ID的发送单元请求数据的帧 |
错误帧(Error Frame) | 用于当检测出错时向其他单元通知错误的帧 |
过载帧(Overload Frame) | 用于接收单元通知其尚未做好接收准备的帧 |
间隔帧(Inter Frame Space) | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
3.2、CAN数据帧介绍
(1)数据帧由7段组成。数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段。
(2)数据帧各段功能
- 帧起始:表示数据帧开始的段,显性信号0
- 仲裁段:表示该帧优先级的段,优先级
- 控制段:表示数据的字节数及保留位的段
- 数据段:数据的内容,一帧可发送0~8字节数据
- CRC段:检查帧的传输错误的段
- ACK段:表示确认正常接收的段
- 帧结束:表示数据帧结束的段,7个隐形信号
(3)标准数据帧
位长度 | 功能 | ||
---|---|---|---|
帧起始 | SOF | 1bit | 表示数据帧开始的段,显性信号0 |
仲裁段 | Ident ifier(ID) | 11bit | 标识符位:标识帧优先级 |
RTR | 1bit | 远程发送请求位:0数据帧、1遥控帧(遥控帧没有后面的数据段) | |
控制段 | IDE | 1bit | 扩展标识符位:这一位决定是标准数据帧还是扩展数据帧 |
R0 | 1bit | 保留位 | |
DLC | 4bit | 数据段长度编码位,单位是字节;2表示数据段有2字节数据 | |
数据段 | Data Field | 0~64bit | 数据的内容 |
CRC段 | CRC15 | 15bit | 循环校验序列(帧起始到数据段) |
DEL | 1bit | 界定符 | |
ACK段 | ACK | 1bit | 确认位(发送方拉高,接收单元接收后校验通过拉低) |
DEL | 1bit | 界定符 | |
帧结束 | EOF | 7bit | 表示数据帧结束的段,7个隐形信号 |
(4)扩展数据帧
位长度 | 功能 | ||
---|---|---|---|
帧起始 | SOF | 1bit | 表示数据帧开始的段,显性信号0 |
仲裁段 | Ident ifier(ID) | 11bit | 标识符位:标识帧优先级 |
SRR | 1bit | 用在扩展格式,替代RTR | |
IDE | 1bit | 扩展标识符位:这一位决定是标准数据帧还是扩展数据帧 | |
Extended Identifier | 18bit | 扩展标识符 | |
RTR | 1bit | xx | |
控制段 | R0 | 1bit | 保留位 |
R0 | 1bit | 保留位 | |
DLC | 4bit | 数据段长度编码位,单位是字节;2表示数据段有2字节数据 | |
数据段 | Data Field | 0~64bit | 数据的内容 |
CRC段 | CRC15 | 15bit | 循环校验序列(帧起始到数据段) |
DEL | 1bit | 界定符 | |
ACK段 | ACK | 1bit | 确认位 |
DEL | 1bit | 界定符 | |
帧结束 | EOF | 7bit | 表示数据帧结束的段,7个隐形信号 |
3.3、CAN位时序介绍
(1)CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。
(2)CAN位时序图
(3)采样点是指读取总线电平,并将读到的电平作为位值的点。根据位时序,就可以计算CAN通信的波特率。
(4)注意 : 节点监测到总线上信号的跳变在SS段范围内,表示节点与总线的时序是同步,此时采样点的电平即该位的电平。
3.4、CAN位时序数据同步
(1)时钟频率误差、传输上的相位延迟引起偏差,会造成CAN的传输出错。CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。
(2)硬件同步
- 节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在位数据的SS段内,判断内部时序与总线是否同步。
- 假如不在SS段内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会使用硬件同步方式调整,把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。
- CAN空闲时高电平,在SS段会产生一个下降沿跳变。
(3)再同步
- 再同步利用普通数据位的边沿信号(帧起始信号是特殊的边沿信号)进行同步。
- 再同步的方式分为两种情况:超前和滞后,即边沿信号与SS段的相对位置。
- 再同步时,PBS1和PBS2种增加或减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4Tq。
- 限定了SJW值后,再同步时,不能增加限定长度的SJW值。SJW值较大时,吸收误差能力更强,但是通讯速度会下降。
3.5、CAN总线仲裁
(1)CAN总线仲裁是通过优先级决定的。
(2)CAN总线处于空闲状态时,最先开发发送消息的单元获得发送权。
(3)多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐形电平的单元失去对总线的占有权变为接收。
(4)仲裁段(报文ID)值越小,优先级越高。
(5)仲裁失败的单元,会自动检测总线空闲,在第一时间再次尝试发送。