一、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在CAN FD系统中的角色定位 STM32 FDCAN控制器 逻辑电平:3.3V/1.8V TJA1044 CAN FD收发器 电平转换 + 差分驱动 CAN总线 CANH / CANL 差分信号:2.5V ± 1V TXD / RXD CANH / CANL TJA1044的核心职责 ① 电平转换:将STM32的3.3V逻辑电平转换为CAN总线的差分电平 ② 驱动能力:提供至少60mA的差分驱动电流,驱动双绞线 ③ 速率支持:仲裁段≤1 Mbps,数据段最高8 Mbps(CAN FD模式) ④ 保护功能:总线短路保护、过热关断、地偏移保护 ⑤ 低功耗模式:待机电流<5 μA,支持远程唤醒

从这张图你能看到,TJA1044处于STM32和CAN总线的中间层。它干的事情,说白了就是三件:

  1. 把STM32发来的TXD逻辑电平,转换成CANH/CANL的差分信号,驱动到总线上
  2. 把总线上收到的差分信号,还原成RXD逻辑电平,送回STM32
  3. 在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逻辑电平匹配