一、CAN介绍
CAN ,是ISO国际标准化的串行通信协议,为了汽车产业“减少线束的数量”,“通过多个LAN,进行大量数据的告诉通信”的需求。
低速CAN 通信速率 10~125kbps,总线长度可达1000米
高速CAN通信速率 125kbps ~ 1mbps, 总线长度 小于等于 40米(经典CAN)
CANFD 通信速率可达 5 mbps兼容经典CAN 做数据的收发
高速CAN总线拓扑图如下
高速 CAN 总线呈现的是一个闭环结构,总线是由两根线 CAN_High 和
CAN_Low 组成,且在总线两端各串联了 120Ω的电阻(用于阻抗匹配,减少回波反射),同时总线上可以挂载多个节点。每个节点都有 CAN 收发器以及 CAN 控制器,CAN 控制器通常是MCU 的外设,集成在芯片内部;CAN 收发器则是需要外加芯片转换电路。
CAN 总线特点
1、多主控制
每个设备都可以主动发送数据
2、系统的柔弱性
没有类似地址信息,添加设备不改变原来的总线状态
3、通信速度
速度快,距离远
4、错误检测&错误通知&错误恢复功能
5、故障封闭
判断故障类型,并且进行隔离
6、连接节点多
速度与数量找个平衡
CAN应用场景
CAN总线协议已广泛应用在汽车电子、工业自动化、船舶、医疗设备、工业设备等方面
1、CAN物理层
CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差判断总线电平。
总线电平分为显性电平(逻辑0)和隐形电平(逻辑1),二者必居其一。显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。
2、CAN协议层
CAN总线是以“帧”的形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。
数据帧:用于发送单元向接收单元传送数据的帧
遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧:用于当检测出错误时向其它单元通知错误的帧
过载帧:用于接收单元通知其尚未做好接收准备的帧
间隔帧:用于将数据帧及遥控帧与前面的帧分离开来的帧
数据帧一般由 7 个段构成。数据帧又分为标准帧(CAN2.0A)和拓展帧(CAN2.0B),主要体现在仲裁段和控制段。
帧起始:表示数据帧开始的段,显性信号
仲裁段:表示该帧优先级的段,优先级
控制段:表示数据字节数及保留的位的段
数据段:数据的内容一帧可发送 0~8字节的数据
CRC段:检查帧传输错误的段
ACK段:表示确认正常的接收的段
帧结束:表述数据帧结束的段
3、CAN位时序介绍
CAN总线以”位同步“机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。
采样点是指读取总线电平,并将读到的电平作为位值的点。
根据位时序,就可以计算CAN通信的波特率
数据同步过程
CAN为了实现总线电平信号的正确采样,数据同步分为硬件同步和再同步。
硬件同步
节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测起始信号在不在SS段内,判断时序与总线是否同步。
假如不在SS段内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会使用硬件同步方式调整,把自己的SS段平移到检测边沿的地方活得同步,同步情况下,采样点获得的电平状态才是正确的。
再同步
再同步利用普通数据位的边沿信号进行同步
再同步的方式分为两种情况:超前和滞后。
CAN总线仲裁
CAN总线处于空闲状态,最开始发送消息的单元获得发送权。
多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。(ID越小优先级越高)