Contents

CAN协议知识点

CAN的出现

CAN(Controller Area Network)是BOSCH公司于20世纪80年代开发用于汽车中各个仪器数据交换的串行通信协议。CAN的出现改变了以往汽车中各个控制单元以及测试仪器之间连接的错综复杂的情况。仅以两根线即可实现CAN网络,其他的个控制单元可挂在这两根线上实现与网络中其他单元的通信。

/images/can_base_1.png

CAN的特性

  1. CAN通信采用双线差分信号传输 /images/can_base_2.png

  2. 总线上的元器件可以动态的增加与减少,协议本身对总线上的元器件的数量没有做出限制,但总线的物理特性会限制总线上的元器件数量。

  3. 总线上所有的报文都是广播发送,总线上的所有单元都可以接收。

  4. 总线上的所有单元既可以是发送单元也可以是接收单元,优先权由报文ID确定。

  5. 每个报文内容由标示符识别,在网络中标示符是唯一确定的。

  6. 网络中的每个单元都可以根据需要对报文进行相关性过滤。

  7. CAN提供了一套复杂的错误检测与错误处理机制来保证系统数据的一致性,比如CRC检测、接口的抗电磁干扰能力、错误报文的自动重发、临时错误的恢复以及永久错误的关闭。

  8. 使用双绞线作为物理传输的介质,传输速率最高可达1Mbps(线缆长度小于40m)。

  9. 传输编码采用的是NRZ(No Return Zero)和位填充。

CAN总线标准

/images/can_base_3.png

通信机制

报文的发送:节点发送报文时需要检测总线状态,只有在总线状态为空闲时才能进行报文的发送,发送报文过程中需要进行回读保证送出的位和回读的位是一致的;报文发送时通过ID进行仲裁,ID越小发送的优先级越高;退出仲裁后,没有获得发送权限的单元进入“只听”状态,等待总线空闲后重新发送。发送节点在发送连续5个相同的极性位后插入一个极性相反的填充位。 报文的接收:各接收单元通过过滤器对相关的报文进行接收 /images/can_base_4.png

接收节点在接收到连续5个相同的极性位后去除填充位,然后继续进行有效数据的接收。

数据帧的格式

数据帧的格式分为两种,一种是标准帧和扩展帧 /images/can_base_5.png

缩写说明 /images/can_base_6.png

SOF之前的总线空闲区域,无需进行位同步,CRC之后的位都是固定格式无需进行位填充。

错误类型

/images/can_base_7.png

  1. 检测到错误后即发送错误标志,CRC错误标志在ACK后发送,其余的错误标志都是在检测到错误后下一位发送。
  2. 错误帧格式 /images/can_base_8.png

帧类型

/images/can_base_9.png

位定时与同步

  1. 位时间由四部分组成:同步段,传播段,相位缓冲段1以及相位缓冲段2。在多数的实现中会把传播段和相位缓冲段1合并为一个时间段。 /images/can_base_10.png

  2. 同步分为硬同步和重同步。硬同步发生在SOF位;当相位误差为正时,跳变沿位于采样点之前,当相位误差为负时,跳变沿位于采样点之后。