CAN(Controller Area Network) 是一种广泛应用于汽车电子、工业控制等领域的串行通信协议,由Bosch公司于1986年提出,现已成为ISO国际标准(ISO 11898)。它具有高可靠性、实时性强、抗干扰能力强等特点,支持多主通信和冲突检测机制。
1. CAN协议基本特性
- 多主通信:所有节点均可主动发送数据,无主从结构。
- 非破坏性仲裁:基于标识符(ID)优先级的冲突解决机制(低ID优先级高)。
- 高可靠性:
- CRC校验(15位循环冗余校验)
- ACK应答机制(接收节点确认数据正确)
- 错误检测与恢复(自动重发错误帧)
- 传输速率:
- 经典CAN:最高1 Mbps(短距离)
- CAN FD(Flexible Data Rate):最高5 Mbps(数据段)
- 数据长度:
- 经典CAN:每帧最多8字节
- CAN FD:每帧最多64字节
2. CAN帧结构
CAN协议定义了5种帧类型:
- 数据帧(Data Frame)——用于传输数据
- 远程帧(Remote Frame)——请求其他节点发送数据
- 错误帧(Error Frame)——报告通信错误
- 过载帧(Overload Frame)——请求延迟
- 帧间空间(Interframe Space)——帧之间的间隔
(1)数据帧(Data Frame)
用于节点发送数据,结构如下:
[SOF] [仲裁段] [控制段] [数据段] [CRC] [ACK] [EOF]
- SOF(Start of Frame):1 bit 显性(0),表示帧开始。
- 仲裁段(Arbitration Field):
- 11位标识符(标准CAN) 或 29位标识符(扩展CAN)
- RTR(Remote Transmission Request):显性(0)表示数据帧
- 控制段(Control Field):
- IDE(Identifier Extension):显性(0)表示标准帧,隐性(1)表示扩展帧
- DLC(Data Length Code):4 bits,表示数据长度(0~8字节)
- 数据段(Data Field):0~8字节(CAN FD可达64字节)
- CRC(Cyclic Redundancy Check):15位校验 + 1位界定符
- ACK(Acknowledge):
- ACK Slot(1 bit):发送隐性(1),接收节点应答显性(0)
- ACK Delimiter(1 bit隐性)
- EOF(End of Frame):7 bits 隐性(1),表示帧结束
(2)远程帧(Remote Frame)
用于请求其他节点发送数据,结构与数据帧类似,但:
- RTR位为隐性(1)
- 无数据段
- DLC表示请求的数据长度
(3)错误帧(Error Frame)
当节点检测到错误时发送,结构:
[错误标志(6位显性/隐性)] [错误界定符(8位隐性)]
- 主动错误标志(6位显性):正常节点检测到错误时发送
- 被动错误标志(6位隐性):错误计数高的节点发送
(4)过载帧(Overload Frame)
当节点处理速度跟不上时发送,结构与错误帧类似:
[过载标志(6位显性)] [过载界定符(8位隐性)]
(5)帧间空间(Interframe Space)
用于分隔连续帧,包含:
- 间隔(3位隐性)
- 总线空闲(任意长度隐性位)
3. CAN总线仲裁机制
- 基于ID的非破坏性仲裁:
- 所有节点同时发送时,ID越小优先级越高。
- 发送过程中,节点会监听总线,如果发现自己的ID被更高优先级的帧覆盖,则自动退出发送。
- 示例:
- 节点A发送ID
0x101
(二进制00010000001
) - 节点B发送ID
0x102
(二进制00010000010
) - 在传输第8位时,节点B检测到总线为
0
(节点A的ID更低),于是退出发送。
- 节点A发送ID
4. CAN FD(Flexible Data Rate)
CAN FD是对经典CAN的扩展,主要改进:
- 更高的数据速率(仲裁阶段仍用标准速率,数据阶段可提速至5 Mbps)
- 更长的数据长度(最多64字节)
- 改进的CRC校验(21位CRC,提高可靠性)
- 新增控制位:
- FDF(FD Format):表示CAN FD帧
- BRS(Bit Rate Switch):允许数据段切换速率
5. CAN总线应用
- 汽车电子(ECU通信,如发动机控制、ABS、仪表盘)
- 工业控制(PLC、传感器网络)
- 医疗设备
- 航空航天
6. 常见CAN协议变种
协议 | 特点 |
---|---|
CAN 2.0A | 标准帧(11位ID) |
CAN 2.0B | 支持扩展帧(29位ID) |
CAN FD | 高速数据段(最高5 Mbps,64字节数据) |
CAN XL | 下一代CAN,支持更大数据包(2048字节) |
总结
- CAN总线采用多主通信+非破坏性仲裁,适合高可靠性应用。
- 数据帧用于传输数据,远程帧用于请求数据,错误帧用于错误处理。
- CAN FD提供更高速度和更大数据容量。
- 广泛应用于汽车、工业控制等领域。
如果需要更详细的某个部分(如CAN FD、错误处理机制等),可以进一步探讨!