尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

CAN收发器从TJA1043迁移到TJA1145:选择性唤醒与低功耗设计实战

发布时间:2026/9/27 1:43:36

资讯中心
01
ARTICLE

CAN收发器从TJA1043迁移到TJA1145:选择性唤醒与低功耗设计实战

CAN收发器从TJA1043迁移到TJA1145:选择性唤醒与低功耗设计实战
CAN网络管理在整车的低功耗设计里是一个绕不开的硬骨头。很多工程师最初用TJA1043用得顺手等整车静态电流超标、或总线被无关报文频繁唤醒时才意识到这颗芯片的能力边界于是换成TJA1145却发现并不是简单地pin-to-pin替换引脚变了、控制方式变了、连AUTOSAR协议栈里的状态切换逻辑也跟着全乱。这篇文章就把我从TJA1043迁移到TJA1145过程中的选型逻辑、硬件差异、寄存器配置和整车实测经验完整梳理一遍希望给正在做CAN网络管理唤醒方案的你一些可落地的参考。1. 为什么TJA1043在部分网络场景下扛不住1.1 TJA1043的定位与突出优势TJA1043是NXP在CAN收发器里的经典通用型号也是TJA1040的升级替代品最大变化是支持CAN FD和增加了一个INH控制引脚。它在Normal模式、Silent模式和Standby模式之间切换通过EN和STB_N两个引脚组合控制。很多动力域控制器、网关、BMS节点选它是因为它具备了完整的“总线唤醒本地唤醒电源控制系统”能力可以配合MCU实现基础的网络管理睡眠唤醒。它的INH引脚很有价值。INH是在发器内部由一个上拉结构驱动的输出引脚用来控制外部电源比如LDO或DCDC的使能端。只要收发器还处于需要供电的状态INH就保持高电平当收发器进入真正的Sleep模式INH就会释放为高阻从而把外部电源关掉实现系统级静态功耗的切断。这种设计对很多ECU来说非常实用——MCU本身根本不需要一直挂在电瓶上一个TJA1043就能把整个节点的后级电源管理起来。1.2 全总线唤醒是TJA1043的软肋TJA1043在Standby模式和Sleep模式下都支持总线唤醒但它的唤醒逻辑非常简单粗暴只要CAN总线上有活动无论是不是发给这个节点的报文RXD引脚上的电平翻转都会触发唤醒信号。这在整车只有几个ECU的小规模网络里问题不大但在现代分布式电子电气架构里总线上通常挂着几十上百个节点而且有很多周期报文。我接手的一个车身项目就是这么出问题的KL15下电之后TJA1043所在的门模块仍然在Standby模式监听总线而BCM和网关每隔100ms仍在发周期报文。结果门模块每隔100ms就被唤醒一次MCU被反复唤醒去处理中断还没来得及进入深度休眠下一次唤醒又来了。实测整车静态电流从这个节点上就吃掉了3mA以上远远超出整车厂要求的整车漏电指标。TJA1043的“任意活动即唤醒”在这种场景下成了功耗灾难的来源。1.3 TJA1145要解决的问题本质TJA1145不是一颗普通的“低功耗版TJA1043”它的核心能力是选择性唤醒也就是只允许指定CAN ID的报文唤醒节点。NXP给它的定位是局部网络和部分网络支持常用于车门控制器、车窗控制器、防盗模块等长时间处于休眠、又需要响应特定命令的节点。TJA1145的典型工作场景有两个一是ECU在KL15掉电后仍然需要监听特定总线报文比如车门解锁指令或者网络管理报文收到后才唤醒MCU二是ECU不再需要参与通信但在总线上悄悄“潜听”等其他节点发出匹配的PN部分网络指示位或NM报文时再上线。这样整个休眠电流可以降到很低的水平同时不会被不相关的总线流量骚扰。选择从TJA1043切到TJA1145本质上就是把唤醒模式从“总线级”升级为“报文级”这也带来了从硬件到软件的整个链路调整。2. TJA1145选择性唤醒原理与SPI配置要点2.1 它不需要MCU参与也能识别CAN ID很多人第一次拿到TJA1145会困惑一颗收发器怎么能识别CAN ID其实TJA1145内部集成了一个状态机和一套报文侦测逻辑在低功耗模式下它会持续监测总线波形对CAN报文进行位同步和帧解析然后在内部寄存器中比对预设的ID过滤条件。只有在报文ID和过滤器条件匹配时它才通过RXD引脚输出唤醒信号或者通过SPI中断通知MCU。这个机制和TJA1043完全不同。TJA1043在Standby模式下RXD会直接把总线电平搬出来MCU需要自己判断是不是有效唤醒而TJA1145在待机时RXD不会跟着总线随意翻转它把总线信号消化在了内部的过滤逻辑中只输出一个干净的唤醒标志。这在AUTOSAR协议栈里非常关键因为CanIf模块不需要跑起来就能靠底层中断触发上层唤醒流程。2.2 SPI寄存器组唤醒过滤器的核心区域TJA1145通过SPI接口访问内部寄存器这和TJA1043用引脚控制模式完全不同。需要重点关注的寄存器区域包括模式控制寄存器决定收发器进入Normal、Standby、Sleep还是Receive-only模式唤醒过滤器配置寄存器设置允许唤醒的CAN ID、ID掩码、数据字节及比较使能状态标志寄存器读取唤醒源、总线错误状态和通信状态。做一个最简单的CAN ID过滤配置假设节点只允许ID0x123的扩展帧唤醒它需要把ID字段填进对应的寄存器同时设置掩码为全匹配并开启报文唤醒使能。SPI的写入时序一般是CSN拉低先发命令字节再发数据字节CSN拉高完成锁存。这里的地址映射在不同后缀的型号里略有差异比如TJA1145T/FD和TJA1145A之间寄存器地址可能不一样务必以官方数据手册的寄存器表为准。2.3 我踩过的过滤器配置坑我最早配置TJA1145的时候参考的是某个第三方例程直接照抄了过滤ID低字节和高字节的填写顺序结果无论如何都唤不醒。后来用CANoe持续发送报文一边发一边读回状态寄存器才发现ID的低字节被填反了。CAN报文在总线上是大端传输但TJA1145的ID过滤器寄存器按“MSB在前”的方式拆分为多个字节字段所以填ID时要先把标准ID左移若干位或者按手册要求分成ID[28:18]这样的段不能直接把数值按字节顺序写死。另外要警惕过滤器的匹配逻辑不只是比对ID某些型号还支持对报文的第一个数据字节做匹配。如果你在整车网络里做了数据路由比如利用第一个字节做源地址那么要同时匹配ID和数据字节否则会有其他节点发同样ID但不同数据时误唤醒的问题。配置时至少把数据匹配使能位关掉只比较ID减少后续网络重用的干扰。注意TJA1145的唤醒过滤器在CAN FD帧和经典CAN帧下的行为不完全一致。经典CAN帧解析直接看ID字段CAN FD帧里BRS位和ESI位可能会影响字节边界。如果总线上同时混跑经典CAN和CAN FD建议把唤醒过滤器只匹配ID字段不做数据字节匹配否则很容易因为帧格式差异导致过滤器不命中。3. AUTOSAR网络管理下电流程与TJA1145的配合3.1 网络管理睡眠唤醒的整体时序在AUTOSAR架构里ECU进入低功耗并不是应用层直接调一个“睡吧”的命令而是由一堆模块协同完成的。简单画一条关键链路应用层停止通信请求后ComM把通信模式从FULL_COMMUNICATION切到NO_COMMUNICATIONCanSM根据ComM的请求把Can控制器从FULL_COM切到STOPPED或SLEEP模式同时CanIf停止发送和接收PDU基础软件继续往下调用Can驱动把控制器停掉最后通过BswM把外部收发器切到Sleep或Standby。对于TJA1145来说这最后一步通常是通过SPI写入模式寄存器实现的而不是拉某个引脚。很多从TJA1043迁过来的工程师容易在这里翻车TJA1043只需要MCU拉低STB_N就能进Standby但TJA1145在SPI没有初始化的前提下引脚默认状态可能仍处于Normal模式功耗根本降不下去。如果ECU的MCU供电是常电而且SPI引脚在休眠时保留了上拉/下拉配置也要小心这些IO口的漏电流叠加。3.2 在Vector AUTOSAR里配置BSWM的实测建议在Vector的DaVinci工具链中配置TJA1145这类带SPI控制功能的外部收发器关键要看三个地方CanTrcvCAN Transceiver驱动中的Transceiver类型选择和唤醒源配置BswM中定义的模式切换规则包括CanSM的COM模式、ECU的睡眠请求、唤醒源标志的组合逻辑CanIf中的Wakeup验证配置明确哪些唤醒源需要PN部分网络过滤。一个规范的项目通常会让BswM监听CanSM进入NO_COMMUNICATION状态的信号然后触发以太网或者SPI通道把TJA1145切换到Sleep模式同时把TJA1145的唤醒引脚映射到MCU的外部中断MCU在深度休眠中被这个中断唤醒后再通过SPI重新初始化收发器并通知CanSM恢复通信。3.3 NM报文与TJA1145过滤ID的映射技巧AUTOSAR网络管理中NM报文ID通常是基础ID加节点ID的组合比如基础ID是0x400节点ID是0x01~0x20那么NM报文ID就是0x401~0x420。TJA1145的过滤器如果只配置某一个NM ID那么其他节点发的NM报文就不能唤醒它。这时候可以根据节点在整车睡眠时是否还需要接收NM报文来决定如果只是作为被动节点KL15下电后只需要响应唤醒帧可以只过滤自己需要响应的那个ID如果整车的NM协调算法要求所有节点继续保持总线监听以便快速参与总线睡眠协商那就要配置多个过滤条件。TJA1145内部过滤器资源是有限的一般支持一到多组过滤条件具体资源数要看具体型号。设计网络管理策略时至少预留一个过滤器给NM报文一个过滤器给应用唤醒报文不要把所有过滤器都用掉。3.4 非AUTOSAR项目的简化配合方式不是所有项目都上了完整AUTOSAR栈很多中小型控制器还是OSEK直接网络管理或者自研NM。换用TJA1145之后最简单的配合方式是MCU在进入低功耗前通过SPI把TJA1145切到Standby并预置好唤醒ID然后MCU自己进入Stop/Standby模式外部中断引脚等待TJA1145的唤醒输出。TJA1145识别到匹配报文后触发中断MCU从低功耗唤醒首先通过SPI把TJA1145恢复到Normal模式再继续后续通信流程。这种方式没有协议栈那么多状态机转换但要注意一个问题TJA1145在Standby模式下的RXD输出低电平是复位状态还是唤醒状态需要和MCU的外部中断触发方式匹配好否则会出现在唤醒瞬间MCU还没起来、RXD又翻回去导致漏掉唤醒事件。4. 硬件设计里最容易遗漏的雷区4.1 引脚兼容性不是单纯换封装TJA1043是SO8封装TJA1145通常是SO14或者HVSON14封装引脚数量完全不同。这不只是PCB改版的问题更重要的是控制信号的逻辑完全变了。TJA1043用EN/STB_N两个引脚去控制模式TJA1145虽然也保留了部分引脚控制能力但最核心的过滤配置一定要走SPI所以硬件上至少要给MCU多留出四根SPI的信号线CSN、SCLK、SDI、SDO如果SPI总线还挂了其他外设要考虑片选信号的隔离和总线竞争问题。4.2 不要忽略VIO引脚TJA1043有VIO引脚用来设置IO电平与MCU接口电压匹配TJA1145同样有VIO设计。很多工程师在画图时直接把VIO接到3.3V但如果MCU的IO供电域是5V就需要仔细看数据手册的VIO电压范围。VIO接法和收发器逻辑电平的含义决定了唤醒信号和SPI信号能不能被MCU正确识别。如果VIO悬空或者接错电平最典型的现象是SPI读写寄存器全部成功但唤醒输出始终无效。4.3 INH引脚的负载能力与外置电源配合TJA1145的INH引脚和TJA1043类似也是控制外部电源使能的输出引脚。但要注意不同型号的INH输出驱动能力不一样如果你的后级需要带载多个LDO或者一个DCDC的EN引脚建议先用万用表实测INH的输出电平范围和驱动电流是否满足要求必要的话加一级三极管或PMOS做隔离驱动避免把收发器内部的驱动器拉垮。4.4 对地偏移与容错测试不能只看波形热搜词里有“CAN地偏移测试最简单三个步骤”这个确实在整车网络验证里很重要。最简测试流程是把ECU地只接一根线到模拟接地排CAN总线地通过独立线缆连接用可调电源在ECU地和CAN地之间注入0~5V直流偏移在总线两端同时监测CANH/CANL差分电压并观察CAN报文的收发是否出现CRC错误。对于TJA1145这类带选择性唤醒功能的收发器地偏移不仅影响通信波形还会影响它在低功耗模式下的报文解析。CAN唤醒帧的差分幅值裕量如果因为地偏移而变小内部唤醒比较器可能把有效报文误判为无效导致节点该醒不醒。实测下来TJA1043对地偏移的容忍度通常略好于TJA1145的低功耗侦测模式所以做唤醒测试时一定要在Standby模式下测一遍唤醒灵敏度而不是只在Normal模式下测通信波形。4.5 终端电阻位置对唤醒信号形态的影响如果你在总线上拥有两个终端电阻一个放在最远端节点另一个放在网关端那么对于中段节点来说收到的报文波形是比较正常的。但TJA1145低功耗侦测时功耗极低内部偏置电路对总线共模电压的依赖性会比较明显。总线上的终端电阻如果分压不对会让隐性电平偏离标称2.5V导致唤醒比较器的门限判断余量不足。仿真和实测都发现TJA1145节点距离终端电阻过远且线缆较长时唤醒可靠性明显下降。建议在PCB阶段就预留靠近连接器的TVS管和滤波电容焊盘并在原型阶段实际验证唤醒距离。5. 实测中遇到的疑难问题与排查链路5.1 现象配置了过滤ID但节点依然被总线流量唤醒排查链路先用CANoe只发一条和目标唤醒ID不同的报文观察节点是否唤醒。如果仍然唤醒首先怀疑过滤器配置没生效回读SPI寄存器看唤醒使能位是否被复位其次是检查模式状态有些项目里MCU在休眠前没有等SPI写完成就切断了SPI时钟源寄存器内部写入了一半实际配置已经乱掉。建议设计一个“配置完成标志”写完所有唤醒寄存器后把配置寄存器的内容回读校验一遍校验成功后再进入低功耗否则重新写入。5.2 现象唤醒后第一次CAN通信经常失败这是选择性唤醒方案里非常典型的问题。TJA1145从Standby恢复到Normal模式需要一定时间MCU被唤醒后立即尝试初始化CAN控制器并发报文可能芯片内部还在恢复总线偏置导致第一帧报文没有Ack或者总线错误。解决办法是在唤醒中断服务程序里增加一个延时比如给TJA1145留出数百微秒到毫秒级的稳定时间再操作CAN控制器。NXP的数据手册里对模式转换时间有明确spec按手册来留余量。5.3 现象整车静态电流测试始终比目标值高100μA一百微安量级的差异往往是外围电路而不是收发器本体的问题。按以下顺序排查确认TJA1145确实在Sleep或Standby模式而不是Receive-only模式用电流钳分别夹VCC和VIO供电链确认电流是流进收发器还是流进MCU检查INH引脚控制的外部电源是否真正关断很多LDO的EN引脚有内部下拉EN悬空时并不会彻底关断检查SPI信号线上的上拉电阻如果SPI在休眠时没有把引脚状态固定住漏电流就会走外部电阻到地。5.4 现象总线上其他节点唤醒之后TJA1145节点掉线失联如果整车网络里有多个TJA1145节点另一个节点唤醒后开始周期发报文而这个死角节点一直收不到需要排查是否产生了总线Bus-Off。Bus-Off在Autosar链路中通常由CanIf报告但在分立系统里往往表现为节点静默。实测中TJA1145在唤醒后如果CAN控制器没有及时恢复总线同步大概率会进入Bus-Off此时要通过SPI读取收发器状态寄存器里的Bus-Off相关标志位来确认。这里有一个项目现场的真实处理办法在唤醒中断里不只是把TJA1145切到Normal还同时把MCU内部CAN控制器的恢复请求带上让控制器重新主动同步总线而不是等下一次报文到来。这个处理能显著减少多节点同时上电时的通信丢失概率。6. 工程迁移建议从TJA1043逐步切到TJA11456.1 不要同时切换硬件和协议栈如果项目里既有AUTOSAR网络管理的需求又有静态功耗的约束不要在同一个迭代里同时升级收发器和协议栈版本。先保持现有协议栈版本不变把TJA1043替换为TJA1145用最简单的SPI驱动把收发器控制起来实现“等效替代”功能也就是让它能进Normal和Standby模式跑通之后再逐步加入选择性唤醒过滤器和AUTOSAR的PN配置。这样出现问题容易定位。6.2 软硬件联调时做好唤醒日志TJA1145的SPI接口天然适合记录唤醒源。在调试版本里每次MCU被唤醒后第一件事就是从状态寄存器读唤醒原因区分是本地唤醒还是CAN唤醒如果是CAN唤醒再判断唤醒ID是否在预期范围内。这个日志对排查误唤醒和无效唤醒非常有用实测现场问题往往只有靠日志才能定位纯看逻辑分析仪波形真的会看花眼。6.3 测试覆盖要特别关注常温到低温的唤醒灵敏度CAN收发器的灵敏度和温度有关。TJA1145在-40℃低温下的唤醒比较器偏置可能与常温有差异尤其是过滤低幅值报文时更明显。环境仓实测时将温度从-40℃到85℃扫一遍每个温度点都发目标唤醒帧确认节点100%能唤醒。如果低温下偶发不唤醒需要考虑在硬件上减小总线终端电阻的偏差或增加共模电容。注意CAN地偏移和共模干扰是唤醒方案的隐形杀手。常规的通信测试通过只是第一步建议在DV阶段增加共模注入测试在总线CANH/CANL上叠加共模噪声信号验证TJA1145的唤醒过滤器不会因为噪声导致误触发或者漏触发。6.4 备选器件策略TJA1145不是唯一的选择NXP还有TJA115x系列等其他带选择性唤醒功能的器件。选型时建议先确定几个约束是否需要CAN FD、需要SPI还是引脚控制、过滤器资源数量、是否兼容未来PN部分网络需求、工作电压范围以及工作温度范围。如果项目对空间和BOM成本极敏感也可以考虑TJA1042加上外部CAN唤醒MCU的组合但在网络管理方案统一的前提下列出来的问题会更多。我个人在这个项目里的体会是TJA1145的选择性唤醒带来的收益确实很明显但它的坑也集中在工程师不熟悉的两块一是SPI寄存器的配置和校验二是从TJA1043的“一睡了之”变成“配置式睡眠”后的软件状态机设计。只要把这两块提前做扎实整车低功耗和网络管理唤醒方案才能说真正跑通。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。