2、CAN总线基础回顾:CAN物理层、数据链路层、CAN报文结构、CAN FD简介
各位同学,咱们今天聊聊CAN总线的基础。说实话,很多工程师干了三五年,报文能看懂,波形能抓出来,但真要问一句「CAN物理层到底怎么工作的?」—— 不少人就含糊了。
我个人习惯是,不管做以太网还是CAN,先把物理层和数据链路层搞透。底层不稳,上层再花哨也是白搭。今天咱们就把CAN的底裤扒一扒。
2.1 CAN物理层:差分信号与总线电平
CAN总线用的是差分信号传输。说白了,就是两根线:CAN_H和CAN_L。它们之间的电压差决定了总线状态。
我在项目中遇到过好几次,有人把CAN_H和CAN_L接反了,结果整个网络都瘫痪。嗯,这其实是个低级错误,但真的一抓一大把。
关键点:CAN总线有两种逻辑状态:
- 显性(Dominant):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,压差约2V。逻辑上代表「0」。
- 隐性(Recessive):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,压差约0V。逻辑上代表「1」。
你想想看,为什么用差分?抗干扰啊!共模噪声来了,两根线一起跳,压差不变。这在汽车这种电磁环境恶劣的地方,简直是救命的设计。
实战小技巧:用示波器看CAN总线时,我建议你直接看CAN_H和CAN_L的差分信号(CH1-CH2)。这样一眼就能看出总线状态是否正常。别只看单端信号,容易误判。
2.2 CAN数据链路层:帧类型与仲裁机制
数据链路层,说白了就是规定「数据怎么打包、怎么发、怎么避免撞车」。CAN的数据链路层非常经典,尤其是它的非破坏性仲裁机制。
为什么会这样?因为CAN总线上所有节点共享一根线。如果两个节点同时发,谁优先级高谁先走。这个优先级,就体现在报文ID上。
我记得刚入行时,有个老工程师跟我说:「CAN的仲裁,就像一群人过独木桥,谁ID小谁先过。」后来我做了几年项目,发现这个比喻其实不完全对。更准确的说法是:谁先发「0」,谁就赢。
CAN帧类型(共4种):
- 数据帧:最常用,传输数据。
- 远程帧:请求数据,没有数据场。
- 错误帧:检测到错误时发送。
- 过载帧:节点忙不过来时发送。
咱们平时分析CAN报文,99%的时间都在和数据帧打交道。远程帧偶尔用,错误帧和过载帧嘛——看到了基本就说明总线出问题了。
2.3 CAN报文结构:逐位拆解
来,咱们把标准CAN数据帧(11位ID)拆开看看。我习惯用表格来记,清晰明了。
| 字段 | 位数 | 说明 |
|---|---|---|
| SOF | 1 | 帧起始,显性位,同步所有节点 |
| ID | 11 | 标识符,决定优先级。值越小优先级越高 |
| RTR | 1 | 远程帧标志。显性=数据帧,隐性=远程帧 |
| IDE | 1 | 扩展帧标志。显性=标准帧 |
| r0 | 1 | 保留位,显性 |
| DLC | 4 | 数据长度,0~8字节 |
| Data | 0~64 | 数据场,最多8字节 |
| CRC | 15 | 循环冗余校验 |
| CRC Delimiter | 1 | CRC分隔符,隐性 |
| ACK | 2 | 应答场。发送方发隐性,接收方拉显性表示收到 |
| EOF | 7 | 帧结束,全部隐性 |
这里有个坑,我曾经踩过:DLC字段。DLC虽然只有4位,理论上能表示0~15,但CAN 2.0标准规定数据场最多8字节。所以DLC > 8时,实际数据长度还是8。很多新手以为DLC=12就能发12字节,结果数据被截断了都不知道。
注意:在CANalyzer中分析报文时,如果看到DLC大于8,别慌。先确认一下是不是CAN FD帧。如果是普通CAN帧,那多半是发送方配置错了。
2.4 CAN FD简介:更快、更大
CAN FD(Flexible Data-Rate)是CAN 2.0的升级版。说白了,就是「老CAN的瓶颈到了,得改改」。
我在做车载以太网之前,项目里用的就是CAN FD。当时整车厂要求刷写时间缩短一半,普通CAN根本扛不住。换了CAN FD之后,数据场能到64字节,速率能飙到8Mbps,刷写时间直接砍半。
CAN FD和普通CAN的主要区别:
- 可变速率:仲裁段用标准速率(如500kbps),数据段用高速率(如2Mbps~8Mbps)。
- 更大数据场:最多64字节,是普通CAN的8倍。
- 改进的CRC:数据多了,CRC算法也升级了,保证可靠性。
- 兼容性:CAN FD节点可以和普通CAN节点共存于同一总线,但普通CAN节点会忽略CAN FD帧。
避坑指南:我曾经在混合网络中吃过亏。普通CAN节点收到CAN FD帧时,会报错。所以如果你在总线上混用两种节点,一定要确保CAN FD节点发送的帧能被普通节点正确识别为「无效帧」并忽略,而不是触发错误帧风暴。
嗯,这里要注意:CAN FD的物理层和CAN 2.0基本一样,还是那两根线,还是差分信号。所以硬件升级成本不高,主要是控制器和软件要换。
2.5 小结:CAN基础,值得反复咀嚼
说实话,CAN总线看起来简单,但真正吃透的人不多。物理层的差分信号、数据链路层的仲裁机制、报文结构的每个字段含义,这些都是后续做CANalyzer分析的基础。
我个人建议,如果你刚开始接触CAN,别急着上CANalyzer。先拿示波器看看波形,拿CAN卡抓几帧报文,手动解析一下。这个过程虽然慢,但能帮你建立直觉。
下一章咱们就正式进入CANalyzer了,到时候这些基础都会用上。准备好了吗?