一、CAN总线协议
CAN总线协议是一种专为高可靠性、实时通信设计的串行总线标准。它最初由博世公司为汽车电子系统开发,现已广泛应用于工业控制、医疗设备等诸多领域。其核心思想是创造一个共享的通信通道,让多个微控制器或设备能够可靠地交换信息,特别适合在电磁环境复杂、对安全要求严苛的场景中使用。

图1 CAN总线网络拓扑图
该协议采用多主架构,任何节点都可以在总线空闲时主动发送信息。当多个节点同时发送时,其独特的非破坏性仲裁机制会确保优先级最高的报文(标识符数值最小)无延迟地继续传输,而其他节点则自动转为接收状态,这个过程不会造成任何数据损坏或时间浪费,从而保证了系统的实时性。
在物理连接上,CAN总线通常使用双绞线进行差分信号传输,用CAN_H和CAN_L两根线之间的电压差来表示逻辑“0”(显性电平)和逻辑“1”(隐性电平)。这种设计赋予了其强大的抗共模干扰能力。总线两端必须连接终端电阻以匹配阻抗,确保信号完整性。

图2 CAN协议硬件连接图
CAN协议定义了严谨的帧结构来封装数据。其中最主要的是数据帧,用于承载实际信息,它包含一个标识符(ID)、控制场和最多8个字节的数据场。此外还有用于请求数据的远程帧、在检测到错误时主动发出的错误帧,以及用于协调总线负载的过载帧。根据标识符长度不同,分为标准帧(11位ID)和扩展帧(29位ID)。
帧类型
(1)数据帧:传输数据
-
标准帧(CAN 2.0A):11位标识符,最大数据长度8字节。
-
扩展帧(CAN 2.0B):29位标识符,兼容标准帧。
数据帧结构:
| 字段 |
描述 |
|---|---|
| 帧起始(SOF) |
1位显性电平,同步节点 |
| 仲裁场 |
标识符(ID)+ RTR位(远程请求标志) |
| 控制场 |
数据长度码(DLC,0-8字节) |
| 数据场 |
实际传输的数据(0-8字节) |
| CRC场 |
循环冗余校验码 + CRC定界符 |
| 应答场(ACK) |
发送隐性位,接收节点回显显性位 |
| 帧结束(EOF) |
7位隐性电平 |
(2)远程帧:请求发送数据
-
无数据场,通过标识符请求对应节点发送数据。
(3)错误帧:节点检测错误时主动发出
-
由错误标志(6位相同电平)和错误界定符(8位隐性电平)组成。
(4)过载帧:节点请求延迟下一帧
-
在数据帧之间插入延迟。
错误处理
CAN总线定义5种错误类型,节点具备错误计数器:
-
位错误:发送与监控电平不一致。
-
填充错误:连续6位相同电平(违反位填充规则)。
-
CRC错误:校验码不匹配。
-
格式错误:固定格式字段出现非法位。
-
应答错误:未收到接收节点的显性ACK。
节点状态:
-
主动错误:正常通信。
-
被动错误:错误计数较高,发送时需等待额外延迟。
-
总线关闭:严重错误下节点自动断开连接。
CAN总线以其稳定、实时、多主的特性,成为复杂分布式系统的首选通信协议。其简洁的硬件设计、可靠的错误机制和灵活的网络扩展性,使其在车辆和工业领域持续占据核心地位。随着CAN FD和CAN XL等演进,CAN协议仍在不断适应更高带宽和更复杂的应用需求。
二、CAN总线应用优势
下面对嵌入式常见协议进行对比:
| 协议 |
|---|


1万+

被折叠的 条评论
为什么被折叠?



