非NM报文唤醒网络时,CAN收发器状态分析

9 篇文章 4 订阅
5 篇文章 0 订阅

场景一:下电时不操作transciver,transciver状态完全由autosar静态代码控制

Reset调试器

在这里插入图片描述
图例:黄色:EN;蓝色:STB,下同。

从第一次EN拉高到第一次拉低时间为1.09s,拉低时间持续20ms;之后每次EN从拉高到拉低,时间均为1s(1s是因为EcuMValidationTimeout设置时间为1s,下同),拉低持续时间为20ms。

猜测:20ms是因为ComM的mainfunction调度周期为20ms。

①当主动唤醒时,用户手动调用ComM_RequestComMode(如果生成了RTE接口,则为Rte_Call_***_RequestComMode)上报给ComM模块。ComM收到上报后,调用CanSM_RequestComMode()请求CanSM将相应的Can通道切为FULLCOM,CanSM再通过CanIf切换controller和transciver的状态。
在这里插入图片描述
如上图所示,如果该通道的NMVariant属性为FULL(即使用的是AUTOSAR NM),则调用NM接口Nm_NetworkRequest请求进入主动唤醒。
不同的Nm Variant属性含义如下图所示

在这里插入图片描述

②当被动唤醒时,EcuM会周期轮询唤醒事件。当轮询到唤醒事件时,调用ComM_EcuM_WakeUpIndication(如果ECUM中的唤醒源绑定了ComM通道(如下图中绑定),则在调用EcuM_CheckWakeup时会自动调用)上报给ComM模块。
在这里插入图片描述

ComM收到上报后调用CanSM_RequestComMode()请求CanSM将相应的Can通道切为FULLCOM,CanSM再通过CanIf切换controller和transciver的状态。如果该通道的NMVariant属性为FULL或PASSIVE,则调用NM接口Nm_PassiveStartUp请求NM进行被动唤醒。

场景二:下电时手动控制收发器状态,以满足完全掉电的需求

在这里插入图片描述

前提条件:设置没有NM报文后等待5s下电

Reset调试器

在这里插入图片描述

从第一次EN拉高到第一次拉低时间为1.09s,拉低时间持续20ms;在5s时间内,每次EN从拉高到拉低,时间均为1s,拉低持续时间为20ms。5s后,由于没有NM报文,控制器会进入下电,手动控制收发器的代码就会介入,因此后续波形发生变化,如下图所示。

在这里插入图片描述

上图中的20ms即对应场景一中EN下拉的20ms。
由于下电逻辑中当监测到收发器模式为standby时(即EN和STB均为低),会将模式切换为sleep(即EN高STB低),直到进入下一个唤醒校验循环,即EN和STB再次被拉高,收发器进入normal模式(EN和STB均为高)。同样由于下电逻辑中对收发器状态的监测和切换,导致收发器进入normal后又被切换为standby,再被切换为sleep(从standby到sleep时间间隔为10ms),直到1s超时,ECUM判断没有NM唤醒源,将收发器切为standby状态。如此循环。
通过下面两种图可以看出,每个循环的时间也为1s,符合设置的validation timeout值,与场景一中一致。
在这里插入图片描述
上图为循环校验的起点,下图为循环校验的结束。
在这里插入图片描述

附:AUTOSAR规范中收发器状态基流转图
在这里插入图片描述

注意:normal模式切换为sleep模式,必须经过standby模式;sleep模式不能直接跳转为standby模式。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值