CAN通讯协议介绍

CAN是Controller Area Network的简称,即控制器局域网络的意思。1986年,由汽车零部件生产厂商首先提出一种异步通信协议,由于其丰富的功能,很快在汽车行业内应用推广起来。

CAN协议是基于消息的协议,而不是基于地址的协议,意味着已传输的数据可用于所有节点,并且其接收方可以选择是否接收数据。

为防止反射,CAN节点连接在两根以120Ω电阻端接的双绞线(CAN_H和CAN_L)上,双绞线电缆(称为CAN总线)。

CAN节点连接拓扑

CAN节点在总线上的连接拓扑

CAN协议是为了取代汽车上ECU通讯的传统布线方式而提出的。在现代汽车系统中,有很多应用于各个子系统的ECU,例如发动机控制单元,转向,悬架,ADAS等。相互之间的互连是必不可少的,如果采用常规的布线将非常昂贵且复杂,而CAN可以提供经济且安全可靠的解决方案。

CAN应用领域

CAN最初是由Bosch开发的,用于乘用车的车载通信,但由于其丰富的功能,如今已在许多行业中使用。应用领域如下:

  1. 运输系统(铁路车辆,飞机,船舶等)
  2. 家庭和楼宇自动化(例如HVAC,电梯)
  3. 工业机械控制系统
  4. 移动机器(建筑和农业设备)
  5. 医疗设备和实验室自动化

为什么需要CAN

随着科技的发展,人民生活水平的提高,人们对汽车的功能不断增加,在汽车中增加了更多的功能,因此ECU数量也跟着增加。这些ECU相互之间需要相互连接共享信息,如果采用传统的方式进行连接,汽车布线将会变得非常复杂而且价格也非常昂贵,同时汽车通讯的可靠性也是一个巨大的挑战。

为了克服常规布线的这种复杂性并提高数据传输速率,Bosch于1983年开始开发串行协议,并在1986年由SAE引入,称为控制器局域网。
传统通讯网络 VS CAN通讯网络

CAN协议的功能

CAN通讯协议出来后,由于其具有丰富的功能,因此众多汽车工业领域的厂商纷纷投入研发,将其应用于产品数据通讯。

配置的灵活性:所有节点都连接到以120欧姆电阻端接的差分电缆上。任何节点都可以连接或断开,而不会干扰网络上的其他节点。

CAN是基于消息的协议:任何节点都可以在CAN总线上广播消息,并且其他节点都可以收听该节点广播的消息,但是接收方可以选择是否接收该消息,即它不是基于地址的点对点的通讯协议。

CAN提供多主机通信:如上所述,任何节点都可以随时发送/接收信号,这意味着任何人都可以驱动CAN总线并开始通信。CAN的这个功能非常适合应用于汽车工业中,许多严格要求安全的ECU(如动力系统,安全气囊等)在收到消息后需要立即响应执行相应的操作。

CAN提供消息优先级:在车辆中,许多ECU的安全性至关重要,因此消息将以更高的优先级进行处理,CAN协议可以通过分配较低的标识符的值来实现。

CAN具有内置的CSMA/CA和CSMA/CD功能:CSMA/CA即载波侦听多路访问避免冲突,用于检查总线状态,如果空闲,则节点将传输数据或处于空闲等待状态。CSMA/CD是冲突检测,意味着如果CAN总线上的数据损坏(即数据与其他Node数据混合,即冲突),它将直接停止传输。这种传输方式节省了传输时间,当总线空闲时节点将会重新传输数据。

错误检测和故障限制功能:每个CAN节点都具有自我诊断和恢复状态。每个节点都有TEC(发送错误计数器)和REC(接收错误计数器)以将其错误状态分为以下几类:

  1. 主动错误
  2. 被动错误
  3. Bus-OFF
    如果CAN节点进入Bus-OFF状态,它将在不干扰其他节点的情况下与CAN网络断开连接。正因为具有Bus-OFF的功能,使得CAN通讯非常稳定可靠。

CAN传输速率快,同时还具有降噪功能:CAN协议可在40米CAN总线长度上提供最高1 Mbps的速度。CAN总线使用差分电缆,可减少串扰(噪声)和电磁干扰。

除了这些CAN协议还有其他强大的功能。它提供了CAN控制器中的内置功能,例如节点同步,帧 通过CRC机制进行完整性检查,验收过滤等,因为所有这些功能都在硬件提供,所有大大减少了软件的工作量。

CAN节点

CAN通讯网络在嵌入式系统中的架构如下图所示:
CAN通讯嵌入式系统架构图

在嵌入式系统中,CAN网络由CAN总线(Bus)和CAN节点(Node)组成。如上图所示为一个节点,它主要由MCU,CAN控制器(如今CAN控制器基本是内置于MCU内部)和CAN收发器组成。它们主要的功能如下:

  1. MCU是主控制器,决定如何处理接收或发送的数据,它处理从应用层到网络层的数据或者网络层到应用层的数据。
  2. CAN控制器负责消息的接收和发送,错误检测和处理等。
  3. CAN收发器在数据发送给CAN总线之前将CAN控制器数据转换为适合总线发送的电平。同理,CAN收发器在收到总线的电平信号后,将信号转换为适合CAN控制器处理的电平。

OSI层的CAN架构和标准

CAN协议在OSI中的映射关系图
AUI (Attachment Unit Interface),即附件单元接口
MDI(Medium Dependent Interface),即媒介依赖接口

1986年,博世发布了针对两种CAN框架架构的CAN协议规范:

  1. A部分(CAN2.0A)-11位标识符CAN的规范(经典/标准CAN)
  2. B部分(CAN2.0B)-29位标识符CAN(扩展CAN)的规范。

1993年,ISO发布了数据链路层和物理层的CAN协议处理规范。

  1. 物理层(CAN收发器)
    • 高速CAN编入ISO-11898(2)
    • 低速CAN编入ISO-11898(3)
  2. 数据链路层
    • ISO-11898(1)用于消息发送/接收,错误处理,CRC检查等。
下一节