CAN总线协议
CAN总线协议简介
控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线、同轴电缆或光纤来传输信号。因其高性能、高可靠性和高实时性等特点,已经成为了世界上应用最广泛的现场总线之一。
CAN总线工作原理
CAN总线没有主从节点之分,所有CAN总线上的节点都是地位等价的。当 CAN 总线上的一个节点(站)发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。
每组报文开头的11 位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文,当几个站同时竞争总线读取时,这种配置十分重要。接收节点也会根据标识符来判断是否接收这帧信息(报文滤波)。CAN总线的优先权由发送数据报文中的标识符决定报文占用总线的优先权;标识符越小,优先权越高。
CAN总线接收节点可以通过远程数据请求发送远程帧请求发送节点发送相应的数据,回应节点传送的数据帧与请求数据的远程帧具有相同的标识符。
目前CAN总线通信协议仅仅包括OSI七层互联参考模型中的数据链路层和物理层。
CAN总线物理层
CAN总线有两条线,CAN_H
和CAN_L
,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻(因为电缆的特性阻抗为120欧)。
每个Node节点分为两部分:CAN收发器、CAN控制器。
CAN收发器负责将CAN控制器的TTL或CMOS的电平信号转换为CAN差分模拟电平信号进行数据传输;也将CAN的差分模拟电平信号转换为TTL/CMOS的电平信号送到CAN控制器,以实现完整的双向通信。
CAN控制器负责解析来自CAN收发器送来的数据,也将用户的数据传送到CAN收发器并发送出去;CAN控制器一般具备数据帧的解析与解码,数据屏蔽与滤波,数据帧的打包与封装等功能,是与用户交互的端口。
CAN总线显性与隐性:
CAN总线为隐性(逻辑1)时,CANH和CANL电平都为2.5V(电位差为0);CAN总线为显性(逻辑0)时,CANH和CANL电平分别为3.5V和1.5V(电位差为2V)。
**CAN总线采用的"线与"的规则进行总线冲裁。**即1&0=0;所以0为显性。
这句话隐含的意思是,如果总线上只要有一个节点将总线拉到低电平(逻辑0)即显性状态,总线就为低电平(逻辑0)即显性状态而不管总线上有多少节点处于传输隐性状态(高电平或是逻辑1),只有所有节点都为高(隐性),总线才为高,即隐性。
CAN总线数据链路层
识别符的概念
识别符顾名思义,就是为了区分不同报文的可以鉴别的好多字符位。有标准的,和扩展的。标准的是11 位,扩展的是29 位。他有一个功能就是可以提供优先级,也就是决定哪个报文优先被传输,报文标识符的值越小,报文具有越高的优先权。
CAN 的报文格式有两种,不同之处其实就是识别符长度不同,具有11 位识别符的帧称为标准帧,而还有29 位识别符的帧为扩展帧,CAN 报文有以下4 个不同的帧类型。分别是:
(1) 数据帧:数据帧将数据从发送器传输到接收器;
(2) 远程帧:总线节点发出远程帧,请求发送具有同一标识符的数据帧;
(3) 错误帧:任何节点检测到总线错误就发出错误帧;
(4) 过载帧:过载帧用已在先行的后续的数据帧(或远程帧)之间提供一附加的延时。