CAN总线概念
CAN(Controller Area Network),控制器局域网广泛应用于汽车ECU间网络通信,现也用于其它各类工业控制系统。
CAN网络的一些特点:
串行通信总线
线状总线,任意节点可随时加入和退出总线,不影响总线上其余节点
低速CAN总线通信速率125kBit/s
高速CAN总线通信速率500kBit/s
广播发送模式,总线上任意节点可以接收总线上的信息
总线访问原则CSMA(载波侦听多路访问),节点自己发送到总线上的信息自己可以监听
NRZ(non-return-to-zero)coding
CAN总线协议基础
CAN总线上以帧为单位传输数据,CAN帧分为数据帧、错误帧、远程帧、过载帧。
数据帧有两种格式,标准帧格式和扩展帧格式,标准帧与扩展帧唯一的不同是标准帧仲裁区是11位ID,扩展帧的仲裁区是29位ID。
以CAN数据帧的标准帧为例分析帧结构如下:
帧开始的标志,一个显性位,提供一个下降沿用于硬同步
仲裁区,11位的CAN ID用于仲裁
CAN ID越小,CAN帧的优先级越高,会获得总线控制权
禁止仲裁区高7位全为隐形,即禁止CAN ID为1111111XXXX,CAN ID范围为0x00-0x7EF
仲裁区的RTR(Remote Transmission Request)一直置显性
控制区的IDE(Identifier Extension)在标准帧中置显性位,在扩展帧中置隐性位。
r0预留
DLC0-DLC3表示数据区的字节长度,长度最大为8。
数据区的长度最大为8个字节
需要传输的数据长度在DLC中定义
传输的数据格式为MSB
CRC(Cyclic Redundancy Check)
CRC区DEL始终置隐性位
发送节点在ACK位置隐性位,任何收到此报文的节点置显性位,发送节点监听到ACK位被置成显性位,就会知道此条报文被至少一个节点正确的接收到。
ACK区的DEL始终置隐性位。
连续7个隐性位表示数据帧的结束
帧间隔为三个连续的隐性位
一般帧间隔期间CAN controller复制报文内容至Rx缓冲器
ACK位之后的ACK结束标志加上EOF加上IFS为11个连续的隐性位