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

前言
在一文中我们分析并实现了通过诊断报文唤醒ecu且唤醒网络的需求,但是经过测试发现网络唤醒后nm报文没有快发过程,而是直接跳过快发过程进入nm报文的周期发送阶段。但是,新的的需求是让诊断报文唤醒网络后有快发过程,又该怎么实现了?本文就先分析cannm报文的主动唤醒和被动唤醒及其相关的nm报文发送机制,然后给出一个诊断报文唤醒网络后进入快发阶段的解决方案。
note: 本文使用的autosar工具为vector公司的davinci configurator,can收发器为nxp公司的tja1043。
正文
1.cannm状体机分析
参考文档:autosar架构下关于cannm的几点思考
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进入到nm normal transmit state的条件(nm_02):
当ecu处于bus-sleep阶段时,如果接收到有效的nm报文(comm调用nm_passivestartup),则会进入到normal transmit state。当进入到该阶段后,在t_repeat_message 超时前,ecu将按照t_nm_messagecycle周期来传输报文,同时t_message_timeout也会启动。
从bus sleep 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进入到nm normal transmit state的条件(nm_15):
在pre-bus-sleep模式下,如果存在远程唤醒请求(comm调用nm_passivestartup),则会进入到rms阶段中的normal transimit state。同时启动t_repeat_message。
从pre-bus sleep 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状态机分析
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报文


运营商携差异化资源优势涉足互联网公益
一种应用于测量和优化开关系统控制环路的方法
等离子电视的屏幕亮度
RFID固定资产管理助力企业增值降本
特斯拉:预计到2020年底在中国建成近650个超级充电站
ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文
USB3.0链路如何实现最优系统级静电防护性能
「工业树莓派」APT - 高级打包工具
金立M6SPlus亮相工信部,一款“666”的机器
中国或将成为集成电路人才汇聚新高地,芯华又助力一批专业人才!
关于设备仪器校准或仪器校正试验测试方案
科锐推出新型S波段GaN晶体管器件
中国首款64层三维闪存芯片发布 中国迈出打破美日韩垄断的关键一步
华为云CDN加速服务,让企业用户上网“走高速”
小米推U盘 挂绳设计64GB售价79元
自动驾驶汽车的关键元件是什么
0-15V/5A的可调电源电路图
智慧城市的发展有多需要5G技术
直流电源和交流电源有什么区别
如何避过测量电源波纹的误区?