CANFD硬件接口:从MCU到收发器的完整链路

做CANFD硬件设计,说白了就是搭一条可靠的数据通道。MCU内部的CANFD控制器负责协议处理,外部的收发器负责电平转换。这两者配合不好,再好的软件也白搭。我这些年踩过的坑,大多都出在硬件接口上。

MCU内部CANFD控制器:选型要看什么

现在的MCU,比如STM32H7、NXP S32K1系列、瑞萨RH850,基本都集成了CANFD控制器。但集成度不同,坑也不一样。

核心差异在于缓冲区深度。老一些的控制器只有2个接收FIFO,新一点的比如S32K1有32个。我有个项目,CANFD跑2Mbps,总线负载60%,结果老控制器频繁丢帧。查了半天,就是FIFO太小,中断响应不及时。

另一个关键点是TDC(收发延迟补偿)。CANFD在高速模式下,收发器的环路延迟会吃掉采样点。没有TDC的控制器,数据段速率超过2Mbps基本没法用。我建议选型时直接看数据手册里有没有「Transmitter Delay Compensation」这个功能。

我的经验:如果项目预算允许,优先选带硬件TDC和至少8个专用接收缓冲区的控制器。别为了省几块钱,后期花几周调时序。

外部CANFD收发器:TJA1044 vs TCAN4550

收发器是MCU和物理总线的桥梁。市面上主流的两款,TJA1044和TCAN4550,定位完全不同。

参数 TJA1044 TCAN4550
接口类型 标准CAN/CANFD SPI转CANFD
最大速率 5Mbps 8Mbps
工作电压 3.3V/5V 3.3V/5V
待机功耗 极低(<5μA) 中等(<50μA)
内部集成 纯收发器 含CANFD控制器
典型应用 MCU自带CANFD控制器 MCU无CANFD控制器

TJA1044是NXP的经典款。它就是个纯粹的物理层芯片,MCU那边必须自带CANFD控制器。优点是功耗低、稳定、便宜。我有个车载网关项目,用了4片TJA1044,跑了3年没出过问题。

TCAN4550是TI的SPI转CANFD方案。它内部集成了CANFD控制器和收发器,MCU通过SPI接口操作。这玩意儿适合MCU没有CANFD外设的场景,比如用普通STM32F4做CANFD节点。但要注意,SPI通信本身有延迟,数据段速率超过5Mbps时容易丢帧。

注意:TCAN4550的SPI时钟频率建议配到20MHz以上,否则CANFD的数据段速率上不去。我曾经用10MHz SPI配4Mbps CANFD,结果每10帧就丢1帧,查了3天才发现是SPI瓶颈。

硬件设计要点:从原理图到PCB

硬件设计说难不难,说简单也不简单。我总结几个关键点,都是真金白银换来的教训。

1. 电源去耦

收发器工作时电流变化很快,尤其是CANFD高速模式。每个收发器的VCC引脚旁边,必须放一个100nF陶瓷电容,位置尽量靠近引脚。我见过有人偷懒只放一个电容给两片收发器共用,结果EMC测试直接挂掉。

2. 终端电阻

CAN总线两端各需要120Ω终端电阻。这个电阻必须放在总线的最远端,不能放在节点内部。我有个项目,工程师把电阻焊在PCB上,结果总线拓扑变了,电阻位置不对,信号反射严重。

3. 共模扼流圈

CANFD速率高了,共模干扰是个大问题。建议在CANH和CANL线上串一个共模扼流圈,感值选51μH左右。这玩意儿能有效抑制高频噪声,但别选太大,否则会衰减信号边沿。

4. 保护电路

车载环境,静电和浪涌是家常便饭。CANH和CANL对地各加一个TVS管,选双向的,击穿电压36V左右。另外,在收发器的STB(待机)引脚上拉一个10kΩ电阻到VCC,防止上电瞬间误进入待机模式。

小技巧:PCB布局时,收发器尽量靠近MCU的CANFD控制器引脚。走线长度控制在5cm以内,别超过10cm。高速信号走长了,时序就乱了。

知识体系:CANFD硬件接口全景图

下面这张图,把MCU内部控制器、外部收发器、总线物理层的关系画清楚了。你照着这个框架去设计,基本不会漏东西。

MCU CANFD控制器 (协议处理 + TDC) 接收FIFO(≥8个) TXD/RXD CANFD收发器 TJA1044 纯物理层 TCAN4550 SPI转CANFD TVS保护 + 共模扼流圈 CANH/CANL CAN 总线 120Ω 硬件设计关键要素 MCU内部CANFD控制器:选带TDC和深FIFO的型号 收发器选型:有控制器用TJA1044,无控制器用TCAN4550 保护电路:TVS管 + 共模扼流圈,缺一不可 终端电阻:120Ω,必须放在总线最远端 PCB布局:收发器靠近MCU,走线长度<5cm

这张图把整个链路串起来了。从MCU内部的CANFD控制器,到外部的收发器,再到总线上的保护电路和终端电阻。每个环节都有讲究,少一个都不行。

避坑指南:我踩过的几个坑

坑一:收发器电源纹波太大。 有一次,CANFD在2Mbps下偶尔丢帧,示波器一看,收发器VCC上有200mV的纹波。加了个10μF电解电容,问题解决。

坑二:TCAN4550的SPI片选信号没处理好。 多个SPI设备共用总线时,片选信号必须严格互斥。我遇到过片选信号毛刺导致TCAN4550误触发,总线直接锁死。

坑三:终端电阻位置不对。 这个前面提过,但值得再说一遍。终端电阻必须放在总线物理拓扑的最远端,不是PCB上的最远端。如果总线是菊花链,电阻放在链的两端。

总结一下:CANFD硬件接口,核心就三件事——选对控制器、配好收发器、布好保护电路。这三件事做好了,剩下的就是调参数了。


公众号:蓝海资料掘金营,微信deep3321