2、车载网络基础(CAN/CANFD):CAN协议原理、CANFD特性、物理层与数据链路层要点

好,咱们开始聊车载网络。说到网关,你绕不开的第一个坎儿就是CAN总线。我做了这么多年网关,可以负责任地告诉你:不懂CAN,就别谈网关设计。今天这一讲,我把CAN和CANFD的核心原理掰开揉碎了讲给你听。

2.1 CAN协议原理:为什么它能在车上活30年?

CAN总线是1986年由德国Bosch公司发明的。你想想看,一个30多年前的协议,到现在还在大量使用,说明它确实有两把刷子。

CAN的核心特点:

  • 多主总线:任何节点都可以主动发消息,不需要主节点调度
  • 基于优先级仲裁:谁优先级高谁先发,低优先级的自动退让
  • 差分信号传输:抗干扰能力强,适合汽车这种电磁环境恶劣的场景
  • 错误检测与重发:5种错误检测机制,保证数据可靠性

我个人习惯把CAN总线比作一个会议室。谁想发言都可以,但只有嗓门最大(优先级最高)的人能先说。其他人听到有人说话,就自动闭嘴等着。这个机制简单、高效、可靠。

重点理解:CAN的仲裁机制

CAN总线用“显性位”和“隐性位”来实现仲裁。显性位(逻辑0)可以覆盖隐性位(逻辑1)。仲裁时,所有节点同时发送ID位,谁先发送显性位,谁就赢得总线控制权。

2.2 CAN帧结构:报文长什么样?

CAN报文分为数据帧、远程帧、错误帧、过载帧四种。我们最常用的是数据帧。数据帧又分标准帧(11位ID)和扩展帧(29位ID)。

标准数据帧结构:

SOF + 11位ID + RTR + IDE + r0 + DLC + 数据(0-8字节) + CRC + ACK + EOF

这里我重点说几个容易踩坑的地方:

  • SOF(帧起始):一个显性位,标志着报文开始
  • ID(标识符):决定优先级,数值越小优先级越高
  • DLC(数据长度码):表示数据字节数,范围0-8
  • CRC(循环冗余校验):15位CRC,检测传输错误

我的经验:设计网关时,ID分配是个大学问。我曾经在一个项目中,因为ID分配不合理,导致高优先级报文频繁抢占总线,低优先级报文几乎发不出去。后来重新规划了ID区间,才解决问题。建议你提前做好ID规划,给关键信号(如制动、转向)分配高优先级。

2.3 CANFD特性:经典CAN的升级版

随着车上电子功能越来越多,经典CAN的1Mbps速率和8字节数据长度明显不够用了。于是CANFD(CAN with Flexible Data-Rate)应运而生。

CANFD相比经典CAN的改进:

特性 经典CAN CANFD
最大数据速率 1 Mbps 最高8 Mbps(数据段)
最大数据长度 8 字节 64 字节
帧格式 标准/扩展帧 兼容经典CAN,新增FDF标志
CRC 15位 17位(数据≤16字节)或21位(数据>16字节)

说白了,CANFD就是在经典CAN的框架上,把数据段跑得更快、装得更多。但要注意:仲裁段仍然使用经典CAN的速率,只有数据段才切换到高速模式。这样做的好处是,CANFD可以和经典CAN混用在同一总线上。

避坑指南:我曾经在一个项目中,把CANFD节点的数据段速率设到了5Mbps,结果发现线束长度超过1米后,信号质量急剧下降。后来查资料才知道,CANFD的高速模式对线束、终端电阻、节点间距都有严格要求。建议你实际设计时,先做信号完整性仿真,再定速率。

2.4 物理层要点:信号怎么在线上跑?

CAN的物理层用的是差分信号,两条线分别叫CAN_H和CAN_L。显性位时,CAN_H电压约3.5V,CAN_L电压约1.5V,差分电压约2V。隐性位时,两条线电压都约2.5V,差分电压接近0V。

物理层设计关键点:

  • 终端电阻:总线两端各接一个120Ω电阻,用于匹配阻抗、抑制信号反射
  • 线束要求:双绞线,绞距一般20-50mm,减少电磁干扰
  • 节点数量:经典CAN最多支持110个节点(实际建议不超过32个)
  • 总线长度:与速率成反比,1Mbps时最长约40米

嗯,这里有个容易忽略的点:终端电阻必须接在总线两端,而不是节点内部。我见过有人把电阻焊在每个节点上,结果总线阻抗严重不匹配,通信时好时坏。

2.5 数据链路层要点:怎么保证数据不出错?

CAN的数据链路层非常健壮,它提供了5种错误检测机制:

  1. 位错误:发送节点监控总线,如果发现发送的位和总线上的位不一致,就报错
  2. 填充错误:连续5个相同位后,必须插入一个相反位,否则报错
  3. CRC错误:接收节点计算CRC,与发送的CRC比较
  4. 格式错误:检测帧格式是否正确
  5. 应答错误:发送节点在ACK槽没有收到显性位,就认为没有节点接收成功

你想想看,这么多层保护,数据想出错都难。这也是为什么汽车行业敢把安全相关的信号(如刹车、油门)放在CAN总线上传输。

关键理解:CAN的错误处理机制是分布式的。任何一个节点检测到错误,都会发送错误帧,强制当前报文终止,然后所有节点自动重发。这个机制保证了即使有节点故障,总线仍然能正常工作。

2.6 网关设计中的CAN/CANFD考量

作为网关设计者,你需要关注以下几点:

  • 速率匹配:网关要在不同速率的CAN/CANFD总线间转发数据,需要做速率适配
  • ID过滤:不是所有报文都需要转发,网关要能根据ID做选择性转发
  • 数据路由:CANFD的64字节数据段,在转发到经典CAN时,需要拆分处理
  • 时序要求:网关转发延迟要控制在微秒级,不能影响实时性

我个人习惯在设计网关时,先画一张总线拓扑图,标清楚每条总线的速率、节点数量、关键报文ID。然后根据这张图,确定网关的硬件资源需求(CAN控制器数量、缓存大小等)。

我的建议:如果你刚开始做网关设计,先从经典CAN入手,把仲裁、错误处理、位时序这些基础搞透。CANFD只是在经典CAN上做了扩展,基础原理是一样的。基础不牢,地动山摇。

好了,这一讲的内容就到这里。CAN/CANFD是车载网络的地基,你花再多时间研究都不过分。下一讲,我们会聊车载以太网,那又是另一个世界了。