0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文

832065824 来源:汽车电子嵌入式 2023-05-09 09:36 次阅读

前言

在<>一文中我们分析并实现了通过诊断报文唤醒ECU且唤醒网络的需求,但是经过测试发现网络唤醒后NM报文没有快发过程,而是直接跳过快发过程进入NM报文的周期发送阶段。但是,新的的需求是让诊断报文唤醒网络后有快发过程,又该怎么实现了?本文就先分析CanNM报文的主动唤醒和被动唤醒及其相关的NM报文发送机制,然后给出一个诊断报文唤醒网络后进入快发阶段的解决方案。

Note: 本文使用的AUTOSAR工具为Vector公司的Davinci Configurator,CAN收发器NXP公司的TJA1043。

正文

1.CanNM状体机分析

参考文档:AUTOSAR架构下关于CanNm的几点思考

48cfacae-ee04-11ed-90ce-dac502259ad0.png

CanNM的Repeat Message State(RMS)状态包括两个子状态:NM Normal Transmit State和NM Immediate Transmit State。

从其他状态进入到NM Normal Transmit State子状态,Can NM报文没有快发阶段,直接进入到Normal Cyclic报文发送阶段。

从其他状态进入到NM Immediate Transmit State子状态,Can NM报文有快发阶段(快发周期和次数可配置)。

从Bus Sleep Mode进入到NMNormal Transmit State的条件(NM_02):

当ECU处于Bus-Sleep阶段时,如果接收到有效的NM报文(ComM调用NM_PassiveStartUp),则会进入到Normal Transmit State。当进入到该阶段后,在T_REPEAT_MESSAGE 超时前,ECU将按照T_NM_MessageCycle周期来传输报文,同时T_MESSAGE_TIMEOUT也会启动。

从BusSleep Mode进入到NM Immediate Transmit State的条件(NM_03):

当ECU在Bus-Sleep阶段,存在本地唤醒请求时(ComM调用NM_NetworkRequest),ECU应当主动激活网络,并进入Immediate Transmit State阶段,同时将发送的NM报文中的Active Wake up bit置为1。在该状态下,应当按照N_ImmediateNM_TIMES的次数发送报文周期为T_NM_ImmediateCycleTime的网络管理报文。

从Pre-Bus Sleep Mode进入到NMNormal Transmit State的条件(NM_15):

在Pre-Bus-Sleep模式下,如果存在远程唤醒请求(ComM调用NM_PassiveStartUp),则会进入到RMS阶段中的Normal Transimit State。同时启动T_REPEAT_MESSAGE。

从Pre-BusSleep Mode进入到NM Immediate Transmit State的条件(NM_16):

在Pre-Bus-Sleep模式下,如果存在本地唤醒请求,即ComM调用函数接口CanNm_NetworkRequest来进入到RMS中的Immediate Transmit阶段,应当按照N_ImmediateNM_TIMES的次数发送报文周期为T_NM_ImmediateCycleTime的网络管理报文。

小结:

1)当CanNM处于Bus-Sleep或者Pre-Bus-Sleep模式时,如果有本地唤醒事件发生则ComM调用CanNm_NetworkRequest将CanNM状态机切换到NM Immediate Transmit State,Can NM进入快发状态。

2)当CanNM处于Bus-Sleep或者Pre-Bus-Sleep模式时,如果有网络(远程)唤醒事件发生则ComM调用NM_PassiveStartUp将CanNM状态机切换到Normal Transimit State,Can NM报文不会有快发阶段,Can NM报文周期发送。

问题:本地唤醒事件和网络唤醒事件是怎么触发ComM主动和被动唤醒网络的?

2.ComM状态机分析

48ea9f1e-ee04-11ed-90ce-dac502259ad0.png

ECU上电或唤醒后,如果检测到为本地唤醒或其他条件需要ECU进行主动唤醒时,用户调用ComM接口ComM_RequestComMode请求ComM COMM_FULL_COMMUNICATION使能通信,ComM在接收到请求后,调用 CanSM_RequestComMode()请求CanSM将相应的Can通道状态切换为FULLCOM,CanSM再通过CanIf切换控制器和收发器状态,调用如果该通道的NMVariant为FULL,调用NM接口 Nm_NetworkRequest(),NM再调用CanNm接口 CanNm_NetworkRequest请求进入主动唤醒。

ECU上电或唤醒后,如果检测到为远程唤醒或其他添加需要ECU进行passive唤醒时,调用 ComM_EcuM_WakeUpIndication(如果ECUM中的wakeup source绑定了ComM通道,则在调用EcuM_CheckWakeup时自动调用),如果通道的NMVariant为FULL或PASSIVE,ComM调用 Nm_PassiveStartUp请求NM进行passive唤醒,并调用 CanSM_RequestComMode()请求CanSM将相应的Can通道状态切换为FULLCOM。

问题:本地唤醒事件和网络唤醒事件是怎么触发ComM主动和被动唤醒网络的?

答:本地唤醒事件由User检测后调用ComM_RequestComMode上报给ComM;网络唤醒事件由EcuM轮询到唤醒事件后调用ComM_EcuM_WakeUjpIndication上报给ComM。ComM根据事件类型调用Nm_NetworkRequest主动唤醒网络,调用Nm_PassiveStartUp被动唤醒网络。

3.解决方案

通过上面的分析我们可以得到解决本文提出的问题的答案:让诊断报文唤醒ECU后走主动唤醒网络的路径,就能实现诊断报文唤醒网络后有NM报文快发过程的需求。

具体的做法:就是在<>一文中实现的Callout函数中直接调用ComM_RequestComMode主动请求唤醒网络。

4.总结

ComM NM CanNM NM报文状态
User调用ComM_RequestComMode 主动唤醒网络:调用NM_NetworkRequest 调用CanNM_NetworkRequest 从Sleep状态切换到NM Immediate Transmit State子状态 快发NM报文结束后周期发送NM报文
EcuM调用ComM_EcuM_WakeUjpIndication 被动唤醒网络:调用
NM_PassiveStartUp
调用
CanNM_PassiveStartUp
从Sleep状态切换到NM Normal Transmit State 无快发NM报文过程,直接周期发送NM报文

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 收发器
    +关注

    关注

    10

    文章

    2971

    浏览量

    104779
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2470

    浏览量

    459260
  • 网络
    +关注

    关注

    14

    文章

    7251

    浏览量

    87444
  • ecu
    ecu
    +关注

    关注

    14

    文章

    822

    浏览量

    53888
  • 报文
    +关注

    关注

    0

    文章

    31

    浏览量

    3968

原文标题:ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CAN总线指定帧唤醒的硬件实现方式

    CAN的指定帧唤醒是一种网络管理的场景,对于我这个偏硬件的工程师来说,网络管理也就是通过CAN来唤醒不同的
    发表于 03-07 09:17 7424次阅读

    电动汽车的ECU进入休眠,目前有3种唤醒模式,CAN总线和AC电压的唤醒设计原理是什么?

    电动汽车的ECU进入休眠,目前有3种唤醒模式,我想知道CAN总线和AC电压的唤醒设计原理是什么?
    发表于 02-02 06:19

    CANoe:网络ECU开发、测试和分析的专业工具

    规范/集成/回归测试 仿真ECU诊断功能 针对好的/坏的测试用例,访问所有级别诊断通信(CAN报文,传输协议和诊断服务)的能力仿真和残余总
    发表于 10-09 17:42

    汽车ECU的低功耗高性能实现

    在需要时能及时唤醒。比如当车速超过30Km/H时则完全可以关闭倒车雷达。其实CAN收发器可以工作在深度睡眠模式(参见ISO11898-6),只有当接收到一个特定的CAN报文收发器才会唤醒
    发表于 05-10 04:23

    CH582M freeRTOS如何实现休眠休眠如何唤醒

    有以下以后望解答:如何实现休眠休眠如何唤醒?目前尝试用裸机例程中的休眠函数,仅LowPower_Shutdown(0); 可以正常睡眠
    发表于 08-01 06:19

    TJA1145ATK配置完成唤醒ID,发现任意CAN FD报文将足够其唤醒是怎么回事?

    TJA1145ATK/FD,配置好唤醒ID,发现去除了配置的唤醒ID可以将设备唤醒,任意的CAN FD报文也能足够将其
    发表于 03-21 06:47

    EcuM是如何知道有唤醒事件呢?

     EcuM主函数会轮询检测底层上报的唤醒事件,如果想进一步的分析唤醒事件是不是有效的总线唤醒源(网络管理报文),需要
    的头像 发表于 08-23 11:39 4343次阅读
    EcuM是如何知道有<b class='flag-5'>唤醒</b>事件呢?

    侃侃主动/被动唤醒源与网络主动/被动唤醒这几个名词

    如果想唤醒Can2 Bus的节点C网络,需要节点D(与节点C同一个网段)发送网络管理报文唤醒节点C。
    的头像 发表于 08-26 17:23 3347次阅读
    侃侃主动/被动<b class='flag-5'>唤醒</b>源与<b class='flag-5'>网络</b>主动/被动<b class='flag-5'>唤醒</b>这几个名词

    ECU休眠网络唤醒时间怎么测?

    t0时刻,使用仿真设备(CANoe/PCan/ZLG等)发送一帧或者连续多帧有效的网络管理报文
    的头像 发表于 08-29 17:28 3798次阅读
    <b class='flag-5'>ECU</b>从<b class='flag-5'>休眠</b>到<b class='flag-5'>网络</b><b class='flag-5'>唤醒</b>时间怎么测?

    AUTOSAR CAN网络管理报文的数据场格式

    表1中,字节0为ECU Address,作为源节点标识符,用 以告知其他节点该报文是由哪个节点发送的;处于CAN网 络中的每个节点都会分配一个唯一的标识符,本文中网络 管理报文
    的头像 发表于 11-17 11:05 2879次阅读

    网络关闭但ECU没有休眠前如何进行网络唤醒呢?

    最近在做CAN网络管理的工作,发现网络休眠(关闭)后在ECU系统没有休眠/下电前如果又收到了
    的头像 发表于 03-29 09:06 1963次阅读

    ECU系统休眠通过诊断报文唤醒ECU唤醒网络

    ECU系统休眠后TJA1043的INH脚处于floating高阻态,系统休眠通过硬件外部电路下
    的头像 发表于 04-04 09:40 6025次阅读

    理一理AUTOSAR架构下的唤醒源事件

    最近的项目负责网络管理部分,网路唤醒ECU系统休眠关系紧密,对系统
    的头像 发表于 07-14 09:11 1615次阅读
    理一理AUTOSAR架构下的<b class='flag-5'>唤醒</b>源事件

    影响报文超时上报的机制有哪些

    前言 最近遇到一个CAN报文超时Notification不上报导致ECU休眠的偶发问题,本文分享解决问题的思路及影响报文超时上报的机制,希望能给各位读者一点启发。 参考文档: 1.
    的头像 发表于 08-07 09:16 893次阅读
    影响<b class='flag-5'>报文</b>超时上报的机制有哪些

    基于以太网的网络管理报文

    DoIP的流程: 1)诊断仪或者作为诊断Client端的ECU发送的基于以太的诊断报文通过Swi
    的头像 发表于 10-04 17:26 559次阅读
    基于以太网的<b class='flag-5'>网络</b>管理<b class='flag-5'>报文</b>