can通信的基本原理

CAN(Controller Area Network,控制器局域网总线)是一种由德国博世公司于20世纪80年代初开发的串行通讯协议总线,最初用于汽车电子系统中实现各控制单元间的高速与可靠通信,现已广泛应用于汽车、工业控制、航空航天、机器人等领域。其核心设计目标是在恶劣电磁环境下实现实时、高效、多节点的分布式通信。本文将从定义与特点、物理层特性、数据链路层工作原理、帧格式、仲裁机制、同步机制、错误检测与恢复等多个维度,全面阐述CAN通信的基本原理。

一、CAN通信的概述与核心特点

1. 定义与诞生背景

CAN通信的全称为Controller Area Network,是一种支持分布式实时控制系统的串行通信局域网。该协议由Bosch公司开发,旨在解决汽车内部众多电子控制单元(ECU)之间复杂布线和高可靠性通信的问题。传统点对点接线方式导致线束庞大、成本高昂且故障率高,而CAN总线通过一对双绞线即可连接多个节点,极大简化了线路。

2. 核心特点

多主工作模式:网络上任意节点均可在任意时刻主动向总线发送信息,无需主从关系的约束。这与传统的主从式总线(如RS-485)有本质区别,使得系统具有更高的灵活性和实时性。

非破坏性逐位仲裁:当多个节点同时发送时,通过标识符(ID)的优先级仲裁,优先级高的节点继续发送,低优先级节点自动退出发送,不会造成数据破坏或时间浪费。

实时性强:帧传输时间确定,满足苛刻的实时控制需求。例如,标准帧在500 kbps波特率下传输仅需约250 μs。

错误检测与容错能力:协议内置多种错误检测机制(位监测、CRC校验、格式检查等),并提供故障界定和自动重发功能。

传输介质简单:通常采用双绞线,利用差分信号传输,抗共模干扰能力强。

通信速率与距离可调:最高速率达1 Mbps(对应约40米),最低速率可至5 kbps(对应约10公里)。

二、CAN通信的物理层特性

物理层负责数据在通信通道上的有效传输,包括电气特性、传输介质、拓扑结构、编码方式和比特定时等。CAN协议基于ISO/OSI模型的分层结构,实际应用中通常只实现物理层和数据链路层,以简化实现并降低成本。

1. 传输介质

双绞线(主流)‍ :使用无屏蔽双绞线(UTP)或屏蔽双绞线(STP),通过差分信号传输。两根线分别称为CAN_High和CAN_Low,总线电平由两者的电压差决定。差分信号能有效抑制共模干扰,适合工业及汽车等高噪声环境。

单线总线:成本更低,但抗干扰能力弱,主要用于汽车部分低端应用。

光纤:可提供完全的抗电磁干扰能力,适用于危险环境(如矿井、化工厂)或需要远距离通信的场景。

2. 电气规范与信号电平

CAN总线采用“隐性”(Recessive)与“显性”(Dominant)两种逻辑电平:

显性电平(逻辑0)‍ :CAN_High电压高于CAN_Low,形成电压差。在总线争用中,显性位会覆盖隐性位。

隐性电平(逻辑1)‍ :CAN_High和CAN_Low电压接近,差值为0.总线空闲时为隐性状态。

这种电平设计使得总线具有“线与”特性:只要有任何一个节点输出显性位,总线就呈现显性状态,这是实现非破坏性仲裁的物理基础。

3. 拓扑结构与终端电阻

拓扑:基于共享总线结构,所有节点通过分支线接入主总线。

终端电阻:在总线的两端必须各连接一个120 Ω的电阻,以消除信号在总线末端产生的反射,保证信号质量。标准ISO 11898明确规定此要求。

4. 编码与同步机制

编码方式:采用非归零(NRZ)编码,数据位和同步信息融合在一起,编码效率高。

位填充(Bit Stuffing)‍ :为了防止连续相同位导致接收器时钟失同步,协议规定在发送连续5个相同位后,必须自动插入一个相反电平的填充位。接收端会识别并自动移除填充位恢复原始数据。位填充仅适用于从帧起始(SOF)到CRC段之间的区域。

同步机制:接收器通过检测总线上的显性到隐性(或隐性到显性)跳变边缘,利用数字锁相环(DPLL)提取时钟信息,使自己的位时序与发送器保持同步。

5. 传输速率与距离的关系

CAN总线的最大通信距离与位速率成反比:

  • 1 Mbps :约40米
  • 500 kbps:约100米
  • 250 kbps:约250米
  • 125 kbps:约500米
  • 50 kbps :约1公里
  • 5 kbps :约10公里

这一关系由信号在总线上的传播延迟和位时序容差决定,ISO 11898-1标准给出了详细的时序参数。

三、CAN通信的数据链路层功能

数据链路层在ISO 11898中标准化,分为两个子层:逻辑链路控制(LLC)和介质访问控制(MAC)。

1. LLC子层功能

  • 接受过滤:每个节点根据自身配置的标识符过滤规则,决定是否接收当前总线上的消息。相当于广播通信中每个接收者只关心与自己相关的信息。
  • 超载通知:当接收节点内部缓冲区满时,可发送过载帧通知发送端延迟发送。
  • 恢复管理:在发生传输错误后,协调自动重发等恢复操作。

2. MAC子层功能

  • 数据封装/解封装:将上层下发数据组装成带有起始位、标识符、CRC、ACK等字段的完整帧,或者从接收帧中提取有效数据。
  • 帧编码(填充/解填充)‍ :在发送时执行位填充,接收时移除填充位。
  • 介质访问管理:通过非破坏性逐位仲裁机制协调多个节点的并发访问。
  • 错误检测与信号:检测位错误、填充错误、CRC错误、格式错误、ACK错误,并发送错误帧进行通告。
  • 确认(Acknowledgment)‍ :每个接收节点在ACK槽发送显性位以表示正确接收。
  • 序列化/反序列化:将并行数据转换为串行位流,或反之。

3. 非破坏性逐位仲裁机制

这是CAN协议最核心的功能之一,实现了高效、无冲突的多节点并发通信。

工作原理:

当总线空闲时,任何节点都可以开始发送消息。

多个节点同时发送时,它们各自逐位输出自己的标识符(ID)并同时监控总线电平。

显性位(逻辑0)覆盖隐性位(逻辑1)‍ :如果一个节点发送隐性位但总线上出现显性位,说明有节点发送了显性位(即ID位为0),该节点立即失去仲裁,停止发送并转为接收模式。

仲裁过程持续到所有标识符位比较完毕,最终只有ID数值最小的节点(最高优先级)赢得仲裁,继续发送完整帧,其他节点退出并在总线空闲后自动重试。

关键特性:整个仲裁过程不破坏任何数据,未赢得仲裁的节点只是“自愿”退出,没有数据丢失或冲突破坏,故称“非破坏性”。

优先级划分:

ID越小,优先级越高。因此,在设计CAN网络时,将时间紧迫的关键消息(如发动机转速、刹车信号)分配较小的ID编号。

远程帧(RTR位)‍ :在标准帧中,RTR位为显性表示数据帧,隐性表示远程帧。由于数据帧的RTR位为显性,因此数据帧优先级高于同ID的远程帧。

扩展帧与标准帧共存:当标准帧和扩展帧同时发送时,扩展帧的SRR位(替代远程请求位)必须为隐性,IDE位(标识符扩展位)决定帧类型。标准帧的IDE位为显性,因此标准帧优先级高于同ID值的扩展帧。

四、CAN帧格式详解

CAN总线上传输的信息称为报文,由不同类型的帧构成。主要包括数据帧、远程帧、错误帧和过载帧。其中数据帧和远程帧有标准格式(CAN 2.0A,11位ID)和扩展格式(CAN 2.0B,29位ID)两种版本。

1. 数据帧结构(以标准帧为例)

标准数据帧由以下比特段组成(按发送顺序):

段名位数说明
SOF (帧起始)1显性位,标志帧开始,用于同步
仲裁场1211位标识符(ID28~ID18)+ 1位RTR(远程请求位,数据帧为显性0,远程帧为隐性1)
控制场6包括IDE(标识符扩展位,标准帧为显性)、r0(保留位)、DLC(4位数据长度码,0~8)
数据场064 (08字节)实际传输的数据,每个字节高位先行(MSB first)
CRC场1615位CRC校验和 + 1位CRC界定符(隐性)
ACK场21位ACK槽(发送端输出隐性,接收节点如果正确接收则显性ACK)+ 1位ACK界定符(隐性)
EOF (帧结束)77个隐性位,标志帧结束
IFS (帧间隔)33个隐性位,用于分隔不同帧

2. 扩展帧格式

CAN 2.0B扩展帧的仲裁场为32位:包含11位基本ID(ID28ID18)+ SRR位(隐性,替代标准帧的RTR)+ IDE位(隐性,表示扩展帧)+ 18位扩展ID(ID17ID0)+ 1位RTR。其余字段(控制场、数据场等)与标准帧类似,但控制场中还有r1保留位。扩展帧增加了地址空间,适合复杂网络。

3. 其他帧类型

远程帧:用于请求其他节点发送数据。结构与数据帧类似,但RTR位为隐性,且无数据场。发送远程帧后,具有相应ID的节点会回复数据帧。

错误帧:由错误标志(6个显性位)和错误界定符(8个隐性位)组成。当节点检测到总线错误时,主动发送错误帧通知所有节点。

过载帧:在数据帧或远程帧的帧间隔期间,接收节点因尚未准备好接收下一帧而发送过载帧,迫使发送端延迟。

4. 位传输顺序

CAN帧的所有位均采用高位先行(Most Significant Bit first)方式传输,即先发送标识符的最高位。

五、CAN通信的错误检测与恢复机制

CAN协议具备极其强大的错误检测和处理能力,这是其在严苛工业环境中获得广泛信赖的重要原因。协议定义了五种主要错误检测方法:

1. 五种错误检测方法

错误检测方法原理检测范围
位监测 (Bit Monitoring)发送节点在每位发送后,读取总线电平并与自己发送的电平比较。若不匹配且非仲裁阶段,则视为位错误。覆盖整个帧
填充检测 (Bit Stuffing Check)接收方检查在SOF到CRC之间的数据流中是否出现连续6个相同电平(违反填充规则)。出现则报填充错误从SOF到CRC段
CRC检测 (Cyclic Redundancy Check)发送方根据帧内容计算15位CRC校验和放在CRC场;接收方重新计算并与接收到的CRC比较,不一致则报CRC错误。覆盖SOF、仲裁场、控制场、数据场
ACK检测 (Acknowledgment Check)发送方在ACK槽发送隐性位后,监控总线是否出现显性位(表示至少一个节点正确接收)。若未出现,则报ACK错误。ACK槽
格式检测 (Form Check)检查帧中所有固定格式的位(如CRC界定符、ACK界定符、EOF等)是否保持隐性。若出现显性位,则报格式错误。固定格式位

2. 错误信令与故障界定

错误帧:任何节点一旦检测到错误,立即发送由6个显性位构成的主动错误标志(或6个隐性位构成的被动错误标志),强制破坏当前传输,通知所有节点丢弃该帧。

故障界定状态机:每个CAN控制器维护发送错误计数(TEC)和接收错误计数(REC)。根据计数状态,节点可处于三种状态:

  • 主动错误(Error Active)‍ :可正常发送和接收,检测到错误时发送主动错误标志。
  • 被动错误(Error Passive)‍ :仍能通信,但检测到错误时只能发送被动错误标志(隐性位),且退出前需增加延迟时间。
  • 总线关闭(Bus Off)‍ :当TEC超过255时,节点完全断开与总线的连接,不再参与任何通信。

自动重发:发送节点在检测到错误并发送错误帧后,会在总线空闲时自动重发之前未能成功发送的消息。这种机制确保了短暂干扰不会导致数据丢失。

3. 一致性与容错特性

CAN协议保证:只要总线上有一个节点检测到错误,所有节点都会被告知并丢弃该帧。这种“全网一致”的错误信令机制极大地提升了系统的可靠性。同时,故障界定机制防止单节点故障拖垮整个网络,实现了“容错”设计。

六、CAN通信的典型应用与优势总结

1. 应用领域

汽车电子:动力系统(发动机、变速箱控制)、车身系统(门窗、灯光)、信息娱乐系统、高级驾驶辅助系统(ADAS)等。

工业自动化:传感器网络、PLC间通信、机器人关节控制。

航空航天:飞行控制系统、航电设备互联。

医疗设备:手术机器人、影像设备内部通信。

船舶与重型机械:动力分配、状态监测。

2. 与其他总线对比

与LIN、RS-485、Ethernet等总线相比,CAN在实时性、可靠性、抗干扰能力及仲裁机制方面具有独特优势。特别是其非破坏性仲裁和确定性的帧传输时间,使其成为硬实时系统的首选。

3. 标准化与协议族

CAN协议的基础标准为ISO 11898系列(定义物理层和数据链路层)。在此之上,许多应用层标准如CANopen(CiA DS301)、SAE J1939(重载车辆)、DeviceNet等,进一步规范了设备配置、通信对象和网络管理行为。

七、总结

CAN通信的基本原理可以概括为:一个基于差分双绞线的共享总线网络,所有节点以多主方式平等接入,采用非破坏性逐位仲裁机制解决冲突,通过NRZ编码配合位填充实现同步,利用丰富的帧结构传递数据或请求,并内置多重容错机制确保极端环境下的通信可靠性。这套设计完美平衡了实时性、灵活性、鲁棒性和成本,使其至今仍是汽车和工业领域最具生命力的现场总线之一。随着CAN FD(CAN with Flexible Data-Rate)等新标准的出现,CAN协议正向着更高带宽和更大数据场方向演进,持续焕发活力。

滚动至顶部