1. 这块收发器到底解决什么问题
做嵌入式这些年,但凡跟车载、工控打交道的,几乎没有不碰 CAN 的。CAN 总线从上世纪八十年代诞生到现在,从经典 CAN 到 CAN FD,从 1Mbps 到 5Mbps 甚至 8Mbps,硬件层面其实一直围绕两个器件在转:控制器和收发器。控制器负责协议栈和报文组帧,收发器负责把控制器的逻辑电平转成总线上的差分信号。而这次要聊的 3.3V/5V 4Mbps CAN Transceiver,就是一颗很典型的 CAN FD 收发器,最大的特点是在一颗芯片里同时兼容 3.3V 和 5V 供电,并且支持最高 4Mbps 的数据传输速率。
这颗芯片解决的实际问题,用一句话概括就是:在低压控制器和高速 CAN FD 总线之间,搭一座稳定可靠的桥。很多 MCU 现在已经跑到 3.3V 甚至更低,但经典 CAN 收发器基本都要求 VCC 在 4.5V 到 5.5V 之间,这让低压系统很尴尬——要么加电平转换电路,要么换 5V 容忍型引脚,要么干脆选一片带内部 LDO 的特殊型号。3.3V 供电的收发器直接把这个问题解决了。同时,4Mbps 的速率意味着它不是普通经典 CAN 芯片,而是为 CAN FD 设计的,适合那些需要更高带宽、更大数据吞吐量的场景。
适合谁来参考?一个是正在做车载 ECU、BMS、域控制器、工业现场总线设备的硬件工程师;另一个是手里有 3.3V 主控但预算和板上空间都不允许额外加电平转换电路的开发者。这篇文章不打算照抄 datasheet,而是从实际选型和调试的角度,把这颗芯片的供电设计、速率能力、外围电路、采样点配置、终端电阻、错误帧排查这些东西全部掰开揉碎讲一遍。
2. 芯片选型与核心参数解读
2.1 供电电压:一颗芯片通吃 3.3V 和 5V 系统
先说供电。经典 CAN 收发器如 TJA1050、MCP2551,几乎都是 5V 供电,VCC 范围通常在 4.5V 到 5.5V。这在早年不是问题,因为当年主控普遍是 5V 单片机。但现在的 MCU 制程越来越先进,内核电压已经降到了 1.8V 甚至更低,IO 电平常见 3.3V。系统里如果只有 3.3V 电源,却要挂一颗 5V 的 CAN 收发器,就得额外生成一路 5V,这就多了一颗 LDO 或者 DC-DC,既占面积又增加成本和故障点。
这颗 3.3V/5V 收发器最直观的价值就在这里:一片芯片覆盖两种电源轨。如果系统设计时正好有一个 3.3V 的稳定电源域,直接用就行,不需要再折腾 5V 升压或者隔离电源。而且 3.3V 供电还有个附带好处——静态功耗和动态功耗都低于 5V 方案,对低功耗电池设备来说很友好。
实际选型时要注意一点:虽然是双电压支持,但引脚电平参数会随 VCC 变化。VCC 为 5V 时,TXD 引脚的输入高电平阈值大概是 2V 左右;VCC 为 3.3V 时,阈值会更低一些,但通常都兼容 3.3V 逻辑。反过来,如果 MCU 是 5V 电平,而收发器用 3.3V 供电,就要检查 TXD/RXD 引脚是否有 5V 容忍能力。数据手册里会标 VIH/VIL 和绝对最大额定值,这一步不能跳过去。
2.2 速率、环路延迟与传播时间
再看速率。经典 CAN 的最高速率是 1Mbps,这是由协议本身决定的。CAN FD(Flexible Data-rate)则在仲裁段保持经典 CAN 速率,数据段可以切到更高的比特率。这颗芯片写的 4Mbps,就是指在 CAN FD 数据段能够稳定跑到的最大速率。
很多人对 4Mbps 没概念。做个简单对比:经典 CAN 一帧标准帧最多 8 字节数据,按 500kbps 算,有效数据吞吐率撑死也就几百 kbps。CAN FD 数据段跑到 4Mbps 时,一帧可以带 64 字节数据,带宽直接上了一个数量级。对固件升级、大数据量诊断、实时状态上传这类应用,这几乎是从“够用”到“舒适”的质变。
但高速是有代价的,代价主要在环路延迟。环路延迟 = 发送端收发器传播延迟 + 接收端收发器传播延迟 + 总线电缆传播延迟 + 控制器内部处理延迟。数据段速率越高,一个位时间越短。4Mbps 时每 bit 只有 250ns,这是相当苛刻的预算。如果收发器自身的传播延迟过大,或者 PCB 走线过长,就会导致采样点偏移甚至通信失败。选型时除了看“支持 4Mbps”这个标题参数,还要翻数据手册里的 tPLH/tPHL(传播延迟时间),以及不对称延迟 tSKEW。一般来说,高速 CAN FD 收发器的环路延迟应该控制在 150ns 以内,这这颗芯片在 4Mbps 场景下是够用的。
2.3 总线引脚与失效保护
CAN 收发器的总线侧就两个引脚:CANH 和 CANL。看似简单,里面的讲究不少。首先是隐性电平:经典 CAN 在隐性状态下,CANH 和 CANL 都向 VCC/2 靠拢,差分电压接近 0V;显性状态 CANH 拉高、CANL 拉低,差分电压约 2V。CAN FD 收发器在数据段也是一样的电气机制,只是切换速度更快。
失效保护(Fault Protection)也是选型重点。这颗芯片通常会包含热关断、总线短路保护、欠压保护等。热关断很好理解,总线长时间短路会导致芯片内部功耗激增,温度上来后芯片自动拉高 TXD 路径、把驱动器关掉,防止烧毁。总线短路保护则是应对 CANH 对电源短路、CANL 对地短路这类极端情况。如果是车载环境,还要关注 ESD 能力和 ±58V 或更高的总线耐压,这直接决定芯片能不能扛住 12V/24V 电源系统的误接。
3. 硬件电路设计与实操过程
3.1 典型外围电路:从 datasheet 到可量产设计
先给出一份最典型的外围电路,然后逐点解释:
网络除了常见的 MCU_TXD、MCU_RXD 接到控制器去,还有几个关键部分:
- VCC 引脚接 3.3V 或 5V,旁边放一个 100nF 去耦电容。有条件的话再并一个 10μF 的钽电容或陶瓷电容,应对总线瞬态电流。
- RXD 输出引脚是推挽输出,一般不需要上拉,但有些控制器在复位期间 RXD 是悬空的,建议加一个 10kΩ 上拉到 MCU 电源域,避免复位期间读到中间电平。
- TXD 输入引脚内部通常有弱上拉,如果控制器 IO 是开漏输出,必须配上拉电阻到对应电平域。
- S 引脚(静默模式/待机模式控制)不用时不要悬空,按数据手册要求接固定电平,通常接地表示正常工作模式。
- CANH、CANL 经过终端电阻和共模电感后出去,这个后面细说。
这是最基础的连接。量产电路我还会加两样东西:一是 TVS 管,从 CANH 对地、CANL 对地各接一颗,或者用一颗差分 TVS 跨接在两根总线之间;二是共模电感或磁珠,选 100Ω@100MHz 左右规格的,可以有效抑制共模干扰,这对 EMC 测试非常关键。注意共模电感是串联在收发器和连接器之间的,不是并连。
3.2 终端电阻:120 欧到底该怎么接
CAN 总线规范要求在总线两端各接一个 120Ω 终端电阻。这个电阻干什么用?匹配传输线阻抗,防止信号反射。CAN 总线的特征阻抗约 120Ω,如果线路末端不匹配,高速边沿会在末端反射,产生过冲和下冲,轻则眼图变差,重则误码。
很多工程师在样机阶段图省事,只在收发器边上放一个 120Ω,或者干脆不放,结果就是低速率下莫名其妙还能跑,一上 CAN FD 高速就疯狂报错。原因就在这里:高速信号对阻抗匹配更敏感,反射造成的振铃可能直接把差分电压打回隐性电平附近,导致位错误。
正确做法:在总线物理最远的两端各放一个 120Ω,而不是在每个节点都放。比如一条总线上有三个节点,中间节点不放终端电阻,只有最左和最右的节点放。有些收发器数据手册会画成“一个节点上放一个 120Ω”,那通常是对点对点通信的简化,多节点组网必须按两端原则来。
那 120Ω 电阻放哪里?可以放在板上,也可以放在线束端。放在板上的好处是固定可靠,坏处是如果多个节点都放了,等效终端电阻会变小。两条 120Ω 并联就是 60Ω,三条并联就是 40Ω,总线负载加重,显性电平会降低,可能导致接收端识别不了。我之前调试时碰到过一个典型的例子:一条总线上三个节点都用带终端电阻的参考板,结果谁都不通信,把终端电阻去掉两处后立刻恢复正常。这个坑一定要记住。
当然,现在有些收发器也集成了 split termination(分裂终端)方案,即两个 60Ω 串联,中点通过电容接地,这样可以把共模噪声滤掉一部分。如果你的设计对 EMC 要求高,可以考虑这个方案:两个 60Ω 串联在 CANH 和 CANL 之间,中点接 4.7nF 电容到地。这样对差分信号来说仍然是 120Ω 匹配,但对共模干扰提供了一个低阻路径到地,效果更干净。
3.3 PCB 布线的几个关键点
收发器布局布线是 CAN FD 高速稳定性的另一个关键。4Mbps 的上升沿速率非常快,虽然物理层协议没有规定具体的边沿时间,但实际收发器的摆率通常控制在几十纳秒以内。这时候 PCB 走线的寄生电感和电容就不能忽视了。
我的布线习惯是这样的:
- 收发器尽量靠近连接器,让高速差分信号在板上的走线尽量短。走线长度控制在 5cm 以内是比较理想的,超过 10cm 就要仔细做阻抗控制。
- 差分对走线要平行等长,间距保持在 5mil 到 10mil,按 90Ω 或 120Ω 差分阻抗来设计。能用两层板的就用两层板,如果要穿过过孔,必须在过孔附近加回流地过孔,保证信号回流路径连续。
- 电源和地去耦要就近,VCC 引脚到去耦电容的走线越短越好,电容再接一个过孔到内层地平面。这样能降低电源噪声对收发器内部比较器的影响。
- TXD 和 RXD 虽然是数字信号,但它们是高速数字信号,不要和 CANH/CANL 差分线平行走长距离,避免串扰。
对于模块化设计,比如你要把收发器放在一个小板子上,通过排针连到主板,那排针上一定要有地引脚,而且要在差分线两侧各布置一个地引脚,尽量保证回流路径紧贴差分线。我见过不少模块在高速下通信失败,就是排针没留够地引脚,回流路径绕了一个大圈,导致共模噪声和辐射双双超标。
4. 高速模式下的采样点与位时间配置
4.1 采样点为什么重要
硬件链路通完之后,紧接着就是控制器侧的 CAN FD 时序配置。采样点这个概念,很多刚接触 CAN FD 的人容易忽略,但它对高速通信的影响极大。
采样点是指控制器在每个 bit 时间里,在哪个时刻去采样总线电平。这个时刻用百分比表示,比如 80%,就是在一个位时间的 80% 处采样。CAN 协议的位时间分为同步段(SS)、传播段(PTS)、相位缓冲段 1(PS1)、相位缓冲段 2(PS2),采样点位于 PS1 和 PS2 的边界。
经典 CAN 时代,采样点选在 70% 到 80% 之间是常用的经验值。到了 CAN FD 高速数据段,这个选择更关键,因为位时间更短了。4Mbps 时一位 250ns,采样点偏移哪怕 20ns,都可能靠近 bit 边界,一旦总线有干扰或边沿抖动,就容易采到错误的电平。
在控制器里配采样点,本质上是配位时间寄存器,也就是分频系数、同步跳转宽度、各段时间长度。以常见的 S32K、TC2xx、STM32H7 这类带 CAN FD 外设的 MCU 为例,流程一般是:先确定外设时钟频率,再算出波特率分频,然后按目标采样点分配时间段。
4.2 4Mbps 下的位时间参数计算示例
举个例子,假设外设时钟 80MHz,目标数据段速率 4Mbps,目标采样点 80%。那么每 bit 对应的时钟周期数是 80MHz / 4Mbps = 20 个时钟周期。
- 同步段固定占 1 个 TQ。
- 剩余 19 个 TQ 分配给传播段、PS1、PS2。
- 采样点 = (SS + PTS + PS1) / 总 TQ = (1 + PTS + PS1) / 20 = 0.8,所以 PTS + PS1 = 15。
- 常见的分配是 PTS = 5,PS1 = 10,PS2 = 4(总 1+5+10+4=20,采样点 80%)。
如果总线长度比较长,比如超过 1 米,那 PTS 要稍微加大一点,给传播延迟留余量;如果总线很短,可以适当缩小 PTS,把采样点往后压一点到 85% 左右。但 CAN FD 的数据段不建议采样点超过 85% 太多,太靠近 bit 尾部,一旦发生振铃或边沿抖动,很容易采到下一 bit 的电平。
这里的解释可能对新手来说有点绕,打个比方:每个 bit 就像一个时间段,你在这个时间段内挑一个“瞬间”去看总线状态。这个“瞬间”最好落在电平稳定、远离跳变的区域,就像拍照要在人站稳的时候拍,不要在跑步的时候拍。采样点在 80% 左右,就是选在 bit 中后段,那里电平已经稳定,也不太靠下一 bit 的边沿。
4.3 环路延迟补偿
CAN FD 还有一个经典 CAN 没有的概念,叫环路延迟补偿。原因是 CAN FD 数据段速率很高,收发器和总线产生的延迟可能接近甚至超过一个 TQ,接收节点的采样点如果还按理想时序来,就会偏晚。
从协议层面看,CAN FD 有一个机制叫 transmitter delay compensation(TDC,发送延迟补偿),即发送节点通过测量“自己发出显性位”到“自己从总线上读到这个位”的延迟,来调整后续位的数据采样时刻。这个机制主要针对发送节点,因为发送节点要同时监控总线冲突,需要精确知道自己的传输延迟。
大部分带 CAN FD 的 MCU 都支持 TDC 配置,但需要读取收发器 RXD 的回环信号来测量延迟。如果控制器外设不支持 TDC 或者你没有正确使能,那只能靠降低速率或者缩短总线长度来保证时序裕量。在实际跑 4Mbps 时,建议先把 TDC 配上,再把目标采样点调到 80% 左右,然后跑误码率测试。没有示波器看眼图的时候,误码率测试就是最可靠的验证手段。
5. 常见问题与排查技巧实录
5.1 典型故障速查表
整理一个我实际遇到过的故障速查表,按出现频率排序:
| 现象 | 可能原因 | 排查手段 | 解决方案 |
|---|---|---|---|
| 完全不通信,总线无差分电平变化 | 收发器没进入正常模式、TXD 被拉死、供电异常 | 示波器量 CANH-CANL 差分波形、检查 TXD 引脚电平 | 确认模式控制引脚电平,确保 TXD 能正常翻转 |
| 低速正常,高速狂报错 | 采样点不匹配、终端电阻缺失、线束过长 | 用 CAN 调试助手跑误码率测试,示波器看数据段眼图 | 调整采样点到 80% 左右,检查并补齐两端 120Ω 终端电阻 |
| 偶发错误帧,Bus Off | 共模干扰、地电位差、总线线缆屏蔽不良 | 检查共模电感、TVS、接地情况 | 加共模电感,检查接地网络,缩短总线或降低数据速率 |
| 单个节点发不出去,其他节点正常 | 该节点 TXD 被置为显性、收发器故障、TXD 上拉过强 | 量该节点 TXD 波形,看是否一直低电平 | 检查 MCU 初始化代码,确认 GPIO 复用配置正确 |
| 收发器发烫 | 总线短路、终端电阻短路、芯片损坏 | 断电测 CANH/CANL 对地阻值 | 排除短路,必要时更换芯片 |
这个表里的第一项特别常见,尤其是新板子第一次上电。很多 MCU 复位期间 GPIO 默认是模拟输入,TXD 引脚如果没被配置成 CAN 外设复用功能,驱动不了收发器;而收发器如果检测到 TXD 一直为高电平,它会认为没有显性请求,总线一直保持在隐性状态,自然测不到波形。
5.2 CAN 调试助手与示波器配合实测
排查 CAN FD 问题,工具上我习惯两样配合:一个 USB-CAN 调试助手(支持 CAN FD),一台至少 200MHz 带宽的示波器。示波器看物理层,调试助手看协议层。
实测时先把示波器探头接到 CANH 和 CANL 之间,用差分方式测量(没有差分探头的话,可以用两个探头相减,但要注意共模电压范围)。正常通信时,你会看到:
- 仲裁段:显性电平约 2V(5V 供电时),隐性电平接近 0V。
- 数据段切到高速后,bit 宽度变窄,可以明显看到信号边沿更陡。
- 如果终端电阻匹配好,边沿不会有过冲;如果看到明显的振铃,先检查终端电阻和走线。
协议层验证用调试助手发一帧标准 CAN FD 报文,比如 ID 0x123,数据长度 64 字节,数据段速率 4Mbps。看对端能不能正常接收,错误计数器有没有变化。如果错误计数器持续增加,基本可以断定物理层或时序有问题。
实测体会:在 4Mbps 下,我最常看到的失败原因是采样点设置不对。很多默认配置把数据段采样点默认设在 60%,对经典 CAN 可能没问题,但 CAN FD 数据段太快,60% 采样时信号前沿震荡还没完全稳定,就容易误判。直接把数据段采样点调到 80%,错误帧立即消失,这是最典型的“改一个寄存器比换一块板子更管用”的场景。
5.3 总线错误帧与 Bus Off 处理
最后专门聊聊错误帧和 Bus Off,这是 CAN 通信最让人头疼的问题,也是热搜词里反复出现的点。
CAN 协议有自己的错误检测机制,包括位错误、填充错误、CRC 错误、格式错误、ACK 错误。任何节点检测到错误,都会发送一个 6 个显性位的错误帧,把这个错误通知全网。问题是,如果总线上有节点因为物理层问题不断发错误帧,整个网络的通信都会被拖垮,表现为报文大量丢失、周期任务超时。
错误帧的处理思路:先区分是“谁在发错误帧”,然后看“错误帧是什么类型”。用 CAN 调试助手可以统计每个节点的错误计数,甚至捕获错误帧的帧类型。如果报 CRC 错误,通常是接收端速率参数不匹配或信号完整性差;如果报位错误,多半是收发器驱动能力不足、终端匹配不对或总线过载;如果报 ACK 错误,就是总线上没有其他节点应答,可能是只有单节点在发。
Bus Off 就更严重了。CAN 控制器在发送错误计数超过 255 时,会进入 Bus Off 状态,把自己从总线上隔离,停止收发任何报文。恢复方法是协议规定的:检测到 128 次连续的隐性位(11 个隐性位的总线空闲序列之后)后,错误计数器清零,节点重新上线。硬件上不需要复位芯片,但软件里往往要监控这个状态,及时重新初始化。
排查 Bus Off 的几点经验:
- 先看是不是只有一个节点反复 Bus Off。如果是,问题大概率在该节点自身,比如收发器供电不稳、TXD 信号线受干扰、或者该节点的 CAN 时钟精度不够。
- CAN FD 对时钟精度要求比经典 CAN 高。经典 CAN 允许 ±0.5% 左右的振荡器误差,CAN FD 数据段高速时可能要求 ±0.1% 甚至更高。如果板上用的是内部 RC 振荡器,4Mbps 下跑一段时间就出问题,根源往往就是频率漂移。这时候必须换外部晶振或温补晶振,没有别的办法。
- 接地问题也容易引发 Bus Off。当总线上两个节点的地电位差较大时,共模电压超标,收发器内部的比较器会误判电平,导致位错误累积。这个在工业现场特别常见,尤其两个设备用不同的开关电源供电时。解决思路是保证整个总线的地电位一致,必要时使用总线隔离。
6. 写在最后:几个踩坑后的心得
这颗 3.3V/5V 4Mbps CAN 收发器本身不复杂,但要把 CAN FD 高速链路做稳,功夫全在细节里。总结几条我自己的经验:
第一,不要迷信“支持 4Mbps”这个参数。收发器支持 4Mbps,不代表你的系统随便连根线就能跑 4Mbps。终端电阻、采样点、时钟精度、PCB 走线,任何一处短板都会把实际可用速率拉下来。芯片只是水管的直径,整个管路系统的通畅程度取决于每一段。
第二,调试 CAN FD 高速时,先把物理层验证了再看协议层。我见过很多工程师花几天时间调软件,结果最后发现问题出在板子漏贴了一个 120Ω 电阻。示波器看波形只需要五分钟。先保证 CANH/CANL 差分波形干净、边沿不过冲、幅值正确,再去改软件配置。
第三,3.3V 供电虽然省事,但要注意电源纹波。总线唤醒和高速翻转时电流需求变化很快,电源去耦一定要做好。100nF 加 10μF 的组合是最低要求,如果板上空间允许,再预留一个磁珠隔离是更稳妥的。
第四,量产前务必做 EMC 摸底。实验室桌面上跑通和整机环境跑通是两码事。CAN 总线经常和电机驱动、开关电源共存,共模干扰很可能把高速模式打得不能自理。共模电感、TVS、屏蔽线缆这些成本不高,但能在后续认证和现场维护上省下大量时间。
4Mbps 的 CAN FD 收发器只是整个链路里的一环,但我始终认为,把这一环吃透,比盲目堆砌新硬件更有价值。希望这篇文章能帮你少走一些弯路。