【Autosar Can网络远程唤醒】

关于Tja1043

Pining
网络上关于Tja1043芯片资源和工作特性的文章有很多,可以参考下面的博客
链接:https://blog.youkuaiyun.com/qq_42357877/article/details/128567660

关于网络管理

网络管理有一套状态机,搞清楚每个状态的意义,进入和跳出的条件,网络管理就清楚了。
网络管理状态机

网络上关于Autosar网络管理机制的文章也很多,个人觉得官方英文文档,每个人都会有自己的理解,之后通过汉语表达出来,很多时候都不能精准的表达出英文原文的意思,所以在这里就不把网络管理那一套机制再搬到这里,建议大家还是要去看去看Autosar的官方文档,不理解的地方再参考网络上大家的解读文章,没时间没精力的也可以参考下面的博客:
链接:https://blog.youkuaiyun.com/weixin_42967006/article/details/121715270

关于CAN总线状态管理

Can总线的控制流由CanSM和ComM完成,CanSM的状态跳转如下:
CanSM状态机

基于Tja1043实现唤醒

唤醒

硬件唤醒序列

唤醒的第一步是唤醒芯片,那么我们的芯片是如何被唤醒的呢?
这首先需要硬件的配合,根据1043的特性,当1043进入sleep模式之后,检测到总线上有符合唤醒条件的唤醒序列,就会进入standby模式同时INH脚被拉高,硬件需要再设计电路时,保证[1]1043常供电,能够随时检测总线电平变化;[2]将1043的INH脚与SBC(电源芯片)的唤醒脚连在一起,这样1043在检测到总线上的唤醒之后进入Standby模式拉高INH就会唤醒SBC,SBC给主芯片供电,主芯片上电。当然,唤醒也可以有别的实现方式,我目前还没接触过。
主芯片上电之后由软件接管,软件开始初始化,执行软件唤醒序列。

软件唤醒序列

软件唤醒不仅仅设计到网络管理,还有BswM,EcuM等模式管理。
唤醒检测序列
芯片上电之后,从main开始运行,初始化EcuM,BswM等底层模块,打开OS,开始运行周期Task等等。周期任务开始运行之后,CanTrcv的MainFunction开始被周期调度,在这个周期函数中,需要周期检测Trcv是否有唤醒标志,检测到唤醒Flag之后,调度EcuM_CheckWakeup函数通知到EcuM。
在这里插入图片描述
随后,EcuM_CheckWakeup再调度CanIf_CheckWakeup,CanIf_Checkup再调度CanTrcv_CheckWakeup,在CanTrcv_CheckWakeup调度EcuM_SetWakeupEvents通知到EcuM。
随后EcuM开始Wakeup Validation(找不到比较好的翻译,就直接用英文吧),CAN Wakeup Validation如下:
CAN Wakeup Validation
EcuM_Mainfunction需要周期处理唤醒事件,在被CanTrcv唤醒并走前前面提到的流程后,会满足调度EcuM_StartWakeupSources的条件,EcuM_StartWakeupSources需要用户自己实现,如果传入的wakeupSource是配置的Can唤醒相关的唤醒,则调度CanSM如下图:示例的项目中有两路CAN能唤醒
在这里插入图片描述
在CanSM的官方文档中,调度CanSM_StartWakeupSources会触发CanSm发生CANSM_BSWM_S_NOCOM到CANSM_BSWM_WUVALIDTION的转变,如下图:
在这里插入图片描述
在这里插入图片描述

这个状态改变将会打开CanController和CanTrcv进入normal,此时trcv和controller具备了收发CAN报文的能力,但是CAN报文只能传递到CanIf,因为再往上需要打开相应的PDU组。此时,若收到报文,CanIf层的RxIndication函数会设置一个NewMessageRx的标志,此标志在EcuM_CheckValid会用到。
EcuM_CheckValidation与EcuM_StartWakeupSources一样,满足条件时会被周期调度,同样也需要用户自己实现:
在这里插入图片描述
EcuM_CheckValidation会调度CanIf_CheckValidation,在CanIf_CheckValidation函数中如果NewMessageRx标志如果被置位则调度EcuM_ValidateWakeupEvent。在EcuM_ValidateWakeupEvent函数中,通过一些检查,满足条件后会调度ComM_EcuM_WakeUpIndication函数里面做一些判断,满足条件之后调度Nm_PassiveStartUp。Nm_PassiveStartUp调度之后由网络管理接管。

网络管理

Nm_PassiveStartUp会调度CanNm_PassiveStartup,CanNm_PassiveStartup的调度将会使网络管理的状态由BusSleep模式跳转到RepeatMessage状态,这个状态的转换会调度CanSM_RequestComMode请求COMM_FULL_COMMUNICATION,这个请求会触发CanSM的状态由CANSM_BSWM_WUVALIDTION到CANSM_BSWM_S_PREFULLCOM的转变,之后进入到CANSM_BSWM_S_FULLCOM,同时ComM的状态进入到COMM_FULL_COMMUNICATION.
在这里插入图片描述
RepeatMessage的时间结束之后进入到ReadySleep状态(期间一直没有主动请求),如果总线上一直有NM报文的接收会一直停留在该状态,同时也使ComM的通信状态维持在COMM_FULL_COMMUNICATION。

应用报文的发送/接收的打开与关闭

Com层报文的发送和接收的开启需要同时满足的条件有2个[1].Com Stack的状态处在COMM_FULL_COMMUNICATION,[2].对应的PDU Group打开。以上我们完成了ComM的状态从COMM_NO_COMMUNICATION到COMM_FULL_COMMUNICATION的转变,Com Stack具备了通信能力,Com层接收报文和发送报文还需要打开对应的Group。在不具备PN功能的网络中,通常将一个Channel的Rx分为一组,Tx分为一组(分组在Com层的配置中完成),Rx Group的打开一般在ComM不处于COMM_NO_COMMUNICATION,否则关闭;Tx Group的打开一般在对应Channel进入COMM_FULL_COMMUNICATION时打开,否则保持关闭,一般这项工作是通过BswM中配置Rule完成的。
BswM如何实现PDU Group的控制下次有机会在详细写。

### Autosar唤醒源配置及工作原理 #### 配置方法 在Autosar架构下,唤醒源的配置通常通过ECU管理模块(ECUM)来实现。对于特定硬件如TJA1043,在定义唤醒事件时需指定哪些信号可以作为有效的唤醒触发条件[^1]。 具体来说: - **Wakeup Source Definition**: 定义可能引起休眠状态结束并启动系统的外部输入。这些可能是来自CAN总线的消息接收指示、LIN中断或其他专用I/O引脚上的电平变化。 - **Check-Wakeup Validation**: 当检测到潜在唤醒请求后执行验证过程以确认其有效性。这一步骤防止误判非预期活动为合法唤醒原因,并确保只有经过认证的状态转换才会激活整个系统电源域或部分组件供电恢复操作。 为了使上述机制生效,开发者应在ARXML文件中声明相应的参数设置,包括但不限于唤醒延迟时间、灵敏度阈值以及关联至各物理端口的具体行为模式等细节描述。 ```xml <ECUC-MODULE-CONFIGURATION-VALUES> <!-- Other configurations --> <CONTAINERS> <SHORT-NAME>Ecum</SHORT-NAME> ... <PARAMETER-VALUES> <DEFINITION-REF>/AUTOSAR/EcucParamDefs/EcumWakeupSourceConfigSet</DEFINITION-REF> <VALUE> <COLLECTION-VALUES> <ELEMENT-VALUES> <DEFINITION-REF>/AUTOSAR/EcucParamDefs/WakeupSourceType</DEFINITION-REF> <VALUE> <ENUMERATION-LITERAL-REF>/AUTOSAR/EcucEnumLiterals/CanIfTxConfirmationEvent</ENUMERATION-LITERAL-REF> </VALUE> </ELEMENT-VALUES> <!-- More elements as needed --> </COLLECTION-VALUES> </VALUE> </PARAMETER-VALUES> </CONTAINERS> </ECUC-MODULE-CONFIGURATION-VALUES> ``` 这段代码展示了如何在一个典型的ARXML配置文档里指明某个网络接口(这里是`CanIfTxConfirmationEvent`)可充当唤醒源之一的例子。 #### 工作原理 当车辆处于低功耗模式期间,某些外围设备仍保持监听状态以便响应外界刺激。一旦选定类型的事件发生——比如接收到带有预设ID的数据帧——便立即向MCU发出通知。随后经历如下几个阶段处理该信号直至最终完成从睡眠态切换回正常运行状况的过程: 1. *初步筛选*: 利用硬件滤波器排除不符合设定标准的信息流; 2. *中间过滤*: MCU内部逻辑进一步甄别剩余候选者的真实性及其优先级排序; 3. *终审决策*: 经过前两步筛查后的合格项由操作系统层面做出最后裁定是否真正发起全面苏醒动作; 在此过程中涉及到多个层次间的紧密协作,从而保障了高效而可靠的电力管理模式运作。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值