一、CAN FD技术概览:从CAN 2.0到CAN FD的演进
各位同学好,我是你们的嵌入式硬件讲师。今天咱们正式开始这门课的第一章——CAN FD技术概览。
说实话,我接触CAN总线快十五年了。从最早的CAN 2.0A/B,到后来在项目中被迫升级到CAN FD,再到如今研究TJA1044这颗收发器与STM32的匹配……这一路踩过的坑,够写一本小册子了。
这一章,咱们先把CAN FD的来龙去脉讲清楚。你只有理解了“为什么要有CAN FD”,才能真正用好TJA1044这颗芯片。
1.1 从CAN 2.0到CAN FD:为什么非变不可?
经典CAN 2.0,说白了就是1980年代博世为汽车电子搞的一套串行通信协议。它很可靠,但有个硬伤——数据场最多8个字节,最高速率1 Mbps。
放在当年,这够用了。但现在的车呢?
- 一个ECU刷写固件,动辄几兆字节
- 自动驾驶的激光雷达点云数据,每秒几十兆
- 电池管理系统(BMS)要上报几百个电芯的电压、温度
你想想看,用经典CAN传这些数据,得拆成多少帧?每帧还要浪费大量仲裁段、控制段、CRC段……有效载荷率低得可怜。
核心矛盾:汽车电子对带宽和吞吐量的需求,已经远远超过了CAN 2.0的设计上限。
于是,CAN FD(CAN with Flexible Data-Rate)在2012年被提出来,2015年标准化为ISO 11898-1:2015。它保留了CAN的物理层和总线仲裁机制,但在数据场长度和传输速率上做了根本性改进。
1.2 CAN FD的核心优势:数据场扩展与速率提升
CAN FD相比CAN 2.0,最核心的改进就两点。我习惯用一个表格来对比,这样更直观:
| 对比项 | CAN 2.0(经典CAN) | CAN FD |
|---|---|---|
| 数据场长度 | 固定8字节 | 最大64字节(0~64字节可变) |
| 最大速率 | 1 Mbps(实际常用500 kbps) | 仲裁段≤1 Mbps,数据段最高8 Mbps |
| 帧格式 | 标准帧/扩展帧(11/29位ID) | 兼容CAN 2.0帧格式,新增FDF、BRS标志位 |
| CRC校验 | 15位CRC | 17位(≤16字节数据)/21位(>16字节数据) |
| 向后兼容 | — | 物理层兼容,但CAN FD节点不能与CAN 2.0节点混合组网(除非配置为混合模式) |
从这张表你能看出什么?
第一,数据场从8字节扩展到64字节。这意味着什么?我举个例子:以前传一个256字节的固件包,用CAN 2.0要拆成32帧,每帧还要加帧头帧尾,总线利用率不到40%。现在用CAN FD,4帧就搞定了,有效载荷率直接翻倍。
第二,数据段速率可以跑到8 Mbps。注意,这里说的是“数据段”,不是整个帧。CAN FD的帧结构里,仲裁段仍然跑在低速(比如500 kbps),保证与其他节点的总线仲裁兼容;但一旦进入数据段,收发器会切换到高速模式(比如2 Mbps、5 Mbps甚至8 Mbps)。
我的经验:在实际项目中,我建议数据段速率不要超过5 Mbps。8 Mbps虽然标准支持,但对PCB布局、终端匹配、线缆质量要求极高。我曾经在一个项目中硬上8 Mbps,结果EMI超标,最后降回4 Mbps才过认证。
1.3 TJA1044在CAN FD中的角色定位
好,现在问题来了:STM32的CAN FD控制器(比如FDCAN外设)输出的是逻辑电平信号(通常是3.3V或1.8V的TX/RX),而CAN总线上跑的是差分信号(CANH/CANL)。谁来做这个电平转换和驱动?
答案就是——CAN收发器。
TJA1044是NXP(恩智浦)推出的一款高速CAN收发器,专门为CAN FD设计。它的角色定位,我画了一张图来说明:
从这张图你能看到,TJA1044处于STM32和CAN总线的中间层。它干的事情,说白了就是三件:
- 把STM32发来的TXD逻辑电平,转换成CANH/CANL的差分信号,驱动到总线上
- 把总线上收到的差分信号,还原成RXD逻辑电平,送回STM32
- 在CAN FD的高速数据段,提供足够的压摆率和驱动能力,保证信号完整性
注意:不是所有CAN收发器都支持CAN FD!比如老款的TJA1050、SN65HVD230,它们只能跑CAN 2.0,数据段速率上限就是1 Mbps。如果你用它们搭配CAN FD控制器,数据段一切高速就会丢帧、报错。我曾经在项目中吃过这个亏——样机调通了,量产时换了批老库存的TJA1050,结果现场全挂。从那以后,我选型时第一件事就是确认收发器的CAN FD兼容性。
1.4 TJA1044的关键参数速览
既然TJA1044是咱们这门课的主角,它的关键参数你得心里有数。我整理了一份速查表:
| 参数 | 典型值 | 说明 |
|---|---|---|
| 供电电压 VCC | 3.3V 或 5V | TJA1044支持双电源,VIO可接1.8V~5V |
| VIO电压 | 1.8V / 3.3V / 5V | 与MCU逻辑电平匹配的关键引脚 |
| 数据段最高速率 | 8 Mbps | 实际建议≤5 Mbps |
| 总线引脚耐压 | ±42V(瞬态) | 符合ISO 7637汽车瞬态抗扰度 |
| 待机电流 | <5 μA | 支持低功耗唤醒 |
| 工作温度 | -40℃ ~ +125℃ | 车规级 |
| 封装 | SO8 / HVSON8 | 小封装,适合紧凑设计 |
这里我要特别强调一下VIO引脚。TJA1044的VIO引脚是用来匹配MCU逻辑电平的。如果你的STM32的FDCAN引脚是3.3V逻辑,那VIO就接3.3V;如果是1.8V逻辑,VIO就接1.8V。这个引脚如果接错,轻则通信不稳定,重则烧毁MCU的IO口。
我的习惯:在设计原理图时,我会在VIO引脚旁边加一个0Ω电阻的跳线位,方便调试时切换电平。量产时再根据实际MCU型号焊死。这个小技巧帮我省了不少改板子的时间。
1.5 本章小结
这一章咱们把CAN FD的来龙去脉和TJA1044的角色定位讲清楚了。你只需要记住三句话:
- CAN FD解决了CAN 2.0数据场小、速率低的问题,数据场最大64字节,数据段最高8 Mbps
- TJA1044是STM32和CAN总线之间的桥梁,负责电平转换和差分驱动
- 选型时务必确认收发器支持CAN FD,VIO引脚必须与MCU逻辑电平匹配