车载ECU休眠唤醒-TJA1145
前言
首先,请教大家几个小小问题,你清楚:
- 什么是TJA1145吗?
- 你知道休眠唤醒控制基本逻辑是怎么样的吗?
- TJA1145又是如何控制ECU进行休眠唤醒的呢?
- 使用TJA1145时有哪些注意事项呢?
今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:
正文
TJA1145简介
TJA1145是NXP公司为汽车电子领域量身定做的高速CAN收发器,提供了CAN控制器与物理CAN双绞线之间的接口,相比其他CAN收发器,它具备如下几个特点:
- 在Standby与Sleep状态下能保持极低功耗,其中Sleep状态下功耗比Standy状态下更低;
- 可通过选择性唤醒功能支持符合ISO11898-2:2016标准的CAN部分网络;
- 针对TJA1145T/FD与TJA1145TK/FD这两种TJA1145/FD变种而言,支持CANFD-Passive功能,能够实现在CANFD与CAN网络共存的前提下保证节点正常休眠不会被总线CANFD总选错误唤醒;
- TJA1145提供接口与3.3V或者5V微控制器相连,通过SPI可用来控制CAN收发器控制以及状态获取;
- TJA1145物理层实现满足了ISO11898-2:2016与SAE J2284标准,且能够实现CANFD 2M通讯速率的稳定通信;
TJA1145上述这些特性使得其能够作为控制ECU整个供电系统的关键利器,通过休眠特性最大可能地降低ECU整体电流消耗,仅在应用层存在需求时才会被唤醒。
如下图1所示为TJA1145的基本功能框图,各个引脚的基本功能解释如下:
图1 TJA1145 基本功能框图
图2 TJA1145功能引脚定义
如下图3所示为TJA1145内部三大供电细节详解:
- BAT: 该电源用于给TJA1145系统状态维护进行供电,只要BAT一直有点,那么TJA1145相关状态寄存器值就不会丢失,且CAN接收器由BAT供电;
- VCC: 该电源一方面作为5V电源输入给到TJA1145系统模块进行监控是否过压或欠压,另一方面则给到CAN总线供电,且CAN发送器由VCC供电;
- VIO: 该电源一方面作为电源输入到TJA1145系统模块进行监控是否过压或欠压,另一方面则作为SPI通信的电平转换;
图3 TJA1145内部供电详解图
ECU休眠唤醒概念
为了让大家更好的了解休眠唤醒控制原理,小T将按照AUTOSAR文档中针对休眠唤醒的定义给大家做个总结,可分为如下三种场景:
冷启动式休眠唤醒
冷启动式休眠唤醒具备如下几个特点:
- MCU处于掉电状态;
- ECU的部分外围电路如CAN发器处于供电状态(如KL30供电);
- 唤醒事件能够被CAN收发器识别;
- CAN收发器能够根据唤醒源决定是否唤醒MCU,给到MCU供电;
CAN通道式休眠唤醒
CAN通道式休眠唤醒具备如下几个特点:
- MCU始终处于正常供电状态;
- 至少ECU的部分外围电路如CAN收发器处于供电状态;
- CAN收发器处于Standby状态;
- 唤醒事件能够被CAN收发器识别;
- CAN收发器识别到有效唤醒源后能够产生一个软中断唤醒MCU或者MCU周期性的去检查是否存在有效唤醒源;
CAN通道与MCU式休眠唤醒
CAN通道与MCU式休眠唤醒具备如下几个特点:
- MCU处于低功耗状态;
- 至少ECU的部分外围电路如CAN收发器处于供电状态;
- CAN收发器处于Standby状态;
- 唤醒事件能够被CAN收发器识别;
- CAN收发器识别到有效唤醒源后能够产生一个软中断唤醒MCU;
休眠唤醒控制原理
通过上述对休眠唤醒类型的总结,想必大家都可以集合自己工作中碰到的休眠场景一一对应起来,小T就结合最为常见的冷启动式休眠唤醒从硬件与软件两个层面跟大家一起交流休眠唤醒控制基本原理。
硬件层面:
如下图4所示,小T将从MCU芯片供电以及TJA1145状态获取控制两方面来讲解硬件层面的休眠唤
醒控制原理:
- S1:MCU满足休眠条件时,通过发送SPI相应指令让TJA1145进入Sleep状态;
- S2:TJA1145进入到Sleep状态后,INH引脚就会拉低,控制5V或者3V关闭电源输出,间接导致MCU整个系统处理掉电状态,此时TJA1145始终处于供电状态(由于BAT始终有电),整个ECU成功进入到休眠状态;
- S3:TJA1145虽然处于Sleep状态,属于极低功耗状态,同步也检测着网络是否存在有效唤醒源;
- S4:当TJA1145发现有效唤醒源之后,就会自动从Sleep状态切换成Standby状态,在Standby状态下INH引脚拉高,此时5V与3V便会正常输出,从而MCU被正常供电,程序开启正常运行;
-
图4 TJA1145休眠唤醒机制硬件实现
软件层面:
基于AUTOSAR软件架构,休眠唤醒的检测处理机制统一有EcuM模块来实现,有关EcuM的详细介绍可参考文章(EcuM)。关于通讯模块的开启则是由ComM模块来负责,BswM在此阶段可实现一些自定义的控制行为来满足各个项目的特别要求。
本文不会过多阐述细节,仅在说明整个休眠唤醒过程在软件逻辑层面具体如何来实现,参考如下图5所示:
图5 休眠唤醒软件控制逻辑
- S1:当MCU Power ON之后由EcuM模块便会检查唤醒源是否有效,若有效,则通知ComM模块开启通信,进而通过SPI通信控制TJA1145进入Normal状态,同时通知BswM模块开启其他BSW模块的控制以及让EcuM进入到RUN模式;
- S2:当MCU PowerON之后由EcuM模块识别唤醒源无效,便会直接走下电流程,最终控制TJA1145进入到Sleep状态;
- S3:在系统正常工作后如果满足休眠条件(如外界没有NM报文),MCU便会控制TJA1145进入到Sleep状态;
- S4:当TJA1145处于Sleep状态下会检测休眠前设定的唤醒源,如果唤醒源满足条件,TJA1145切换至Standby状态,从而Power ON MCU,最终走向EcuM唤醒源检测验证流程;
TJA1145控制
如上述过程MCU通过SPI总线接口实现了针对TJA1145状态的控制与获取。针对TJA1145的控制过程可分为TJA1145 Operating Mode的控制以及内部CAN Operating Mode两种类型。
TJA1145 Operating Mode
在TJA1145内部存在一系统控制器包含如下五种运行状态机:Normal,Standby,Sleep,Overtemp,Off状态。接下来将针对这五种状态进行一一讲解每个状态的基本特征以及相应的SPI控制指令。
Normal: 该模式下TJA1145处于全功能模式下,所有功能均可用,可通过MC=111从Standby或者Sleep状态切换至Normal状态;
Standby: 该模式下TJA1145处于低功耗状态,不过不能够正常收发数据,但是INH引脚可以始终保持拉高状态;
如果此时寄存器CWE=1,那么此时receiver会持续监控总线电平状态,如果寄存器CPNC = PNCOK =1,那么就开启了特定帧唤醒,否则就是标准CAN唤醒(010101切换就可唤醒,即所说的任意帧唤醒);
当电压满足特定下限时便会自动从Off状态切换至Standby状态;
当监测到温度没有再次发生过温便会自动从Overtemp状态切换至Standby状态;
在Sleep状态下检测下唤醒源便会自动切换至Standby状态;
通过SPI指令MC=100将状态从Normal或者Sleep状态切换至Standby状态;
在Normal状态下发送指令MC=001准备切换至Sleep状态,但此时存在唤醒源或者所有的唤醒源检测全部关闭,该特性从一定程度上避免了死锁;
Sleep: 该模式下TJA1145处于最低功耗状态下,且不能正常收发数据,同时INH引脚处于高阻状态,电源供电一般会通过该引脚进行拉低关闭输出。同时其状态变化存在如下几种可能:
- 一个有效唤醒源或者中断事件(除去SPIF事件)或者**SPI指令(SPI通讯速率不能过高)**则可以唤醒TJA1145从Sleep状态切换至Standby状态;
- 在Normal或者Standby状态下通过发送MC=001便可以进入到Sleep状态,同步须确保至少存在一个唤醒源使能(如CAN唤醒或者Wake pin唤醒)且没有pending状态下的唤醒源;
- 如果VCC或者VIO持续一段事件低于某个阈值,那么该低电压事件将会强制让TJA1145进入到Sleep状态,与此同时所有的Peding的唤醒源将会被清除,CWE=1以及WPFE=WPRE=1使能同时特定帧唤醒功能将会被Disable(CPNC=0);
该强制进入到Sleep状态可通过TJA1145主状态寄存器(03h)中的FSMS状态位来获取,如果FSMS为1表示最近一次进入到Sleep状态是由于低电压进入到Sleep状态,否则是通过SPI指令完成的状态切换。
Overtemp:该状态是由于TJA1145放置温度过高导致被损坏的一个功能,一旦在Normal状态下温度超出一定阈值就会自动切换至OverTemp保护状态;
为了放置数据的丢失,TJA1145在温度超过预警阈值时会主动触发一个Warning,该Warning发生时就会触发OTWS置位,中断产生(即OTW=1)如果OTWE使能的前提下;
在该模式下,CAN收发器将不能正常工作,CAN pin脚始终处于高阻状态,唤醒源将不会被检测,但是如果存在Pending的唤醒源,那么RXD引脚就会被拉低;
当温度低于特定阈值时,那么该状态便会自动切换至Standby状态;
如果Bat电压引脚低于某个特定阈值,则会自动从该状态切换至OFF状态;
Off: 在该状态下电压由于低于特定阈值导致供电不足,当Bat首次连接时这是TJA1145的初始状态,只要Bat电压低于某特定阈值,那么TJA1145将会从任意状态直接切换至Off状态。在Off状态下,CAN pin脚以及INH引脚始终处于高阻状态;
当电压高于某个特定阈值时,TJA1145便会重新启动触发初始化过程,从而经历特定时候后进入到Standby状态;
图6 TJA1145 Operating Mode状态迁移图
如下图7所示,展示了TJA1145 Operation Mode与SPI通信,INH引脚,内部CAN模块状态以及RXD引脚的之间的关系。从中特别值得关注的有以下几点:
Standby状态下INH引脚可以拉高控制MCU各级电源输入,CAN无法正常收发通信;
Normal状态下SPI可正常通信,INH引脚拉高,CAN模块的状态取决于CMC值,仅在Active状态下才能够开启正常通信,且仅在CMC=01/10/11下才能够正常收发;
Sleep状态下INH引脚处于高阻状态,此时MCU各级电源可关闭,CAN始终处于Offline状态,无法正常收发通信;
在Off状态与Overtemp状态下SPI都无法正常通信,在Sleep状态仅在VIO供电正常的情况下才可以,且通信速率不能太高;
仅在Standby与Sleep状态下才检测唤醒事件,即仅在CAN处于Offline模式下才能够开启唤醒事件的检测;
图7 TJA1145各模式状态关系
Can Operating Mode
TJA1145内部集成的CAN收发器存在四种状态:Active,Listen-Only,Offline,Offile Bias状态。存在如下两种基本组合:
当TJA1145处于Normal状态时,CAN收发器状态取决于CMC值,如进入Offline或者Active或者Listen-only等;
当TJA1145处于Standby或者Sleep状态,则CAN收发器始终处于Offline状态;
图8 TJA1145内部CAN收发器状态迁移图
CAN Active Mode
CAN收发器在此模式下能够正常发送或接收数据;
当CMC=0x01时,CAN收发器处于Active状态,VCC低压检测使能,如果出现VCC电压,就会直接切换到CAN Offline或者Offline Bias状态;
当CMC=0x10时,CAN收发器处于Active状态,且VCC电压检测被抑制,如果出现VCC电压异常,不会影响到CAN Active正常切换;(实际应用过程中优先统一配置成CMC=0x10,以降低状态不断反复切换)
CAN Listen-only Mode
该模式下CAN发送器被关闭,当TJA1145处于Normal状态且CMC=0x11时,CAN收发器状态就会处于Listen-only状态;
在该模式下如果TJA1145处于Normal状态且CMC=0x1,同时VCC电压低于90%,那么就会始终在这个Listen-Only状态;
CAN Offline与Offline Bias Mode
在CAN Offline模式下CAN收发器便会检测CAN总线以查看是否存在唤醒事件,同时CWE=1,CAN H与CAN L始终偏置接地;
在CAN Offline Bias Mode下也会检测CAN总线是否存在唤醒事件,只不过CAN H与CAN L会偏置2.5V,当超过一段事件总线没有活动,便会回归至CAN Offline模式下;
当TJA1145切换至Standby或者Sleep状态则会直接切换成此状态;
当TJA1145状态为Normal且CMC=0x0,则会将状态切换成CAN Offline模式;
当TJA1145状态为Normal且CMC=01同时VCC<90%,则也会将状态切换成CAN Offline模式;
CAN Off Mode
当TJA1145状态为Off状态或者Overtemp状态时;
当Bat电压低于CAN接收器某个特定阈值电压时,当BAT电压回升至某个特定阈值时,便会进入到CAN Offline模式下;
常见寄存器配置说明
在对TJA1145进行正常使用时,无论是初始化过程还是正常对其进行控制,我们都需要针对常见的TJA1145寄存器进行控制,因此小T结合项目实战需要给大家列举了常用寄存器以及相关功能,如下图9所示:
图9 常见寄存器配置说明
TJA1145使用注意事项
- 使用TJA1145时,如果需要使用其CAN FD Passive功能(0x2F寄存器设置 CFDC=1),那么需要选用型号TJA1145/FD才具备;
- TJA1145默认仅支持CAN帧格式的特定帧唤醒;
- 如果使能了VCC/VIO电压欠压监控,如出现在缓升缓降的过程中,就会导致TJA1145状态直接切换成sleep状态,因此一般优先选择CMC=0x10,则抑制了电压欠压检测。
相关文章:

车载ECU休眠唤醒-TJA1145
前言 首先,请教大家几个小小问题,你清楚: 什么是TJA1145吗?你知道休眠唤醒控制基本逻辑是怎么样的吗?TJA1145又是如何控制ECU进行休眠唤醒的呢?使用TJA1145时有哪些注意事项呢? 今天ÿ…...

平衡二叉树的插入,删除以及平衡调整。
一,平衡二叉树插入失衡情况及解决方案 由于各种的插入导致的不平衡,每次调整都是最小不平衡子树。 LL:由于在结点A的 左孩子的左子树 插入结点导致失衡。 右单旋:①将A的 左孩子B 向右上旋转 代替A成为根节点 ②将A结…...

评价指标计算
混淆矩阵: 准确率(Precision):记为P_i,表示被正确预测为类别i的样本数占所有被预测为类别i的样本数的比例。 召回率(Recall):记为R_i,表示被正确预测为类别i的样本数占…...

Spring Boot如何实现OAuth2授权?
Spring Boot如何实现OAuth2授权? OAuth2是一种授权框架,用于授权第三方应用程序访问受保护的资源。在Web应用程序中,OAuth2通常用于授权用户访问受保护的API。 在本文中,我们将介绍如何使用Spring Boot实现OAuth2授权。我们将使…...

【最小生成树模型】
最小生成树(Minimum Spanning Tree)模型原理与应用 引言 最小生成树(Minimum Spanning Tree,简称MST)是图论中的经典问题之一,它在实际应用中有着广泛的应用。本文将介绍最小生成树模型的原理和应用&…...

【JavaSE】Java基础语法(三十):HashMap与TreeMap
文章目录 1. HashMap1.1 HashMap集合概述和特点1.2 HashMap集合应用案例 2. TreeMap2.1 TreeMap集合概述和特点2.2 TreeMap集合应用案例一2.3 TreeMap集合应用案例二 3. 总结 1. HashMap 1.1 HashMap集合概述和特点 HashMap底层是哈希表结构的依赖hashCode方法和equals方法保…...

Sangria:类似Nova folding scheme的relaxed PLONK for PLONK
1. 引言 前序博客有: Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记SuperNova:为多指令虚拟机执行提供递归证明基于Nova/SuperNova的zkVMSangria:PLONK Folding2023年 ZK Hack以及ZK Summit 亮点记 主要见2023…...

【蓝桥杯省赛真题22】python剩余空间问题 青少年组蓝桥杯比赛python编程省赛真题解析
目录 python剩余空间问题 一、题目要求 1、编程实现 二、解题思路...

基于深度学习的高精度牙齿健康检测识别系统(PyTorch+Pyside6+YOLOv5模型)
摘要:基于深度学习的高精度牙齿健康检测识别系统可用于日常生活中检测牙齿健康状况,利用深度学习算法可实现图片、视频、摄像头等方式的牙齿目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数…...

C++的类
类的性质 上文的例子中用到了类,也知道了类的定义方法,其实类还有更多的性质,这些更多的性质完整支持了面向对象编程。 封装 以前说过,程序就是数据和代码的组合。而C又正好提供了对数据的封装功能,这就可以很好的完…...

【网络】- TCP/IP四层(五层)协议 - 网际层(网络层) - 划分子网、构造超网
目录 一、概述二、分类IP地址不合理的地方三、划分子网四、无分类编址方法 一、概述 前面的文章介绍了网络层的网际协议IP,介绍了IP地址的定义,知道了IP地址分为网络标识(网络地址)、主机标识(主机地址)两部分,也清楚了最初IP地址是按照分类被…...

1-网络初识——网络发展史
目录 1.独立模式 2.网络互联 2.1.局域网(Local Area Network,简称LAN) ①基于网线直连 ②基于集线器组建 ③基于交换机组建 ④基于交换机(网口很多)和路由器组建 2.2.广域网(Wide Area Network&…...

《Spring Guides系列学习》guide35 - guide40
要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…...

《算法导论》拓展之 一维二维最近点对问题
一维点对问题 描述:一维最近点对问题是指在给定的一维点集中找到距离最近的两个点。具体来说,给定一维坐标轴上的 n 个点,要找出其中的两个点,使它们的距离最小。 解决办法:解决这个问题的一种常见方法是使用排序和线…...

【C++】动态存储分配
动态存储分配是指在程序运行时根据需要动态地分配和释放内存空间。 C中提供了两个关键的运算符用于动态存储分配:new和delete。 使用new运算符可以在堆(heap)上动态地分配内存空间,并返回所分配内存的首地址。语法如下࿱…...

小狗避障-第14届蓝桥杯省赛Scratch中级组真题第4题
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第139讲。 小狗避障,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组编程第4题…...

GPT学习笔记-Embedding的降维与2D,3D可视化
嵌入(Embedding)在机器学习和自然语言处理中是一种表示离散变量(如单词、句子或整个文档)的方式,通常是作为高维向量或者矩阵。嵌入的目标是捕捉到输入数据中的语义信息,使得语义相近的元素在嵌入空间中的距…...

Nautilus Chain上线主网,为DeFi和流支付的未来构建基础
近日,加密行业权威平台 Coinmarketcap 发表了一篇名为“Zebec 模块化 Layer3 链 Nautilus Chain上线主网,为 DeFi 和流支付的未来构建基础”的文章,文中对 Zebec 生态公链 Nautilus Chain 的生态进展进行了简要的报道,并对其进行了…...

java设计模式之命令设计模式的前世今生
命令设计模式是什么? 命令设计模式是一种行为型设计模式,它允许将请求封装为对象,并将其传递给调用者,从而使调用者可以在不知道请求具体细节的情况下进行操作。命令模式的主要目的是解耦请求的发送者和接收者,以及通…...

离散系统函数零积点分析
离散系统函数零积点分析 在 Matlab中,系统函数的零极点就可以通过函数 roots 得到。 函数的零极点也可以通过函数 tf2zp 获得,其调用格式为:[Z, P, K] tf2zp(B, A),函数 tf2zp 可以将H(z)的有理分式转换为零极点增益形式&#…...

Karl Guttag:苹果VST MR头显也无法突破AR的物理局限
据近期的爆料、传闻显示,苹果将6月份的WWDC2023上首次公布AR/VR头显。对此,AR/VR光学专家Karl Guttag持怀疑态度,他此前在DisplayDaily的文章中写道,苹果研发AR/VR头显更像是担心错过新技术趋势。回顾过去的一些关键的AR产品&…...

mysql倒库操作遇到的问题
背景:本地windows 10安装了mysql数据库后,需要把远程库的表结构和数据全部导入进来。 操作:导出数据库,导入数据库。 第一步:导出数据库 使用dump命令即可。 登陆mysql数据库 mysql -hhost --default-character-s…...

ELK企业级日志分析系统
ELK概述 为什么要使用 ELK 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。 …...

华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路
一、题目描述 小王是一名基站维护工程师,负责某区域的基站维护。 某地方有n个基站(1<n<10),已知各基站之间的距离s(0<s<500),并且基站x到基站y的距离,与基站y到基站x的距离并不一定会相同。 小王从基站1出发,途径每个基站1次,然后返回基站1,需要请你…...

SSM 如何使用 TCC 机制实现分布式事务?
SSM 如何使用 TCC 机制实现分布式事务? 分布式事务是现代分布式系统中必不可少的一部分,而 TCC 机制(Try-Confirm-Cancel)是一种常用的分布式事务处理方式。在 SSM 框架中,我们可以使用 TCC 机制来管理分布式事务。本…...

如何在上架App之前设置证书并上传应用
App上架教程 在上架App之前想要进行真机测试的同学,请查看《iOS- 最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。 P12文件的使用详解 注意: 同样可以在Build Setting 的sign中设置证书,但是有点麻烦&…...

华清远见 day04
break 打破循环,再也不执行 continue 跳出本次循环,继续执行下一次循环; 常量 字面常量 宏常量 #define A 100 //定义一个宏常量, 名为:A 值为:100 位置 在 头文件 下面 ,文件开头 输入时间秒 得到 小时 分钟 秒的时间输出 用到 三运算符; 宏常量 Mi 是60 t1 /Mi>6…...

如何处理Vue应用程序中的错误和异常情况?
处理Vue应用程序中的错误和异常情况是开发中非常重要的一环,但是对于新手来说,这往往是一个比较棘手的问题。不过别担心,下面我将为大家详细解答。 首先,我们需要知道的是,在Vue中,错误和异常情况是两个不…...

javascript基础十六:Ajax 原理是什么?如何实现?
一、是什么 AJAX全称(Async Javascript and XML) 即异步的JavaScript 和XML,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页 Ajax的原理简单来说通过XmlHttpRequ…...

大话手游原始服务端搭建教程Centos
大话手游原始服务端搭建教程Centos 大家好,我是艾西,今天给大家分享一款回合制的ARPG大话手游搭建教程。游戏场景、精美的画面以及多元的人物做的非常棒。在游戏中可以穿越神话世界,同时也可以结交好友,加入团队,共同…...