Autosar网络管理:CanNM网络状态变化都要告知ComM吗?

汽车安全 1年前 (2022) admin
558 0 0

本文聚焦一个问题:”CanNM网络状态变化是否都需要告知ComM?”之所以讨论这个问题,源于一个小伙伴的提问,Ta的问题:”Autosar网络管理中,进入RSS(Ready Sleep State)状态,网络管理报文停发,应用报文可以发送。但是调用CanNm_NetworkRelease()接口,会请求ComMComM对应的Channel会进入COMM_SILENT_COMMUNICATION模式,也就是只收不发的模式那RSS状态下还怎么发送应用报文呢?

看完这个问题,你觉得应该是怎样的呢?首先,我个人认为这是一个好问题,是一个有思考的问题。和一些搞Autosar_嵌入式的小伙伴交流,很多问题的思考都很有深度,只奈我时间有限,不能把很多小伙伴的问题都整理出来。但是,我看到的问题,有时间,我会整理出来,我记的”你”的问题。本文,分享一下个人对这个问题的理解。

1、CanNM和ComM状态机

首先,先搞清楚CanNM和ComM的状态机有哪些?

(一)CanNM的网络状态机

Autosar网络管理:CanNM网络状态变化都要告知ComM吗?

如上图,CanNM的状态机包含了三个Mode:BSM(Bus-Sleep Mode)、PBSM(Prepare Bus-Sleep Mode)、NM(Network Mode)。其中NM模式又包含三个State:RMS(Repeat Message State)、NOS(Normal Operation State)、RSS(Ready Sleep State)。

(二)ComM的网络状态机

Autosar网络管理:CanNM网络状态变化都要告知ComM吗?

如上图,ComM包含三个Mode:COMM_NO_COMMUNICATION、COMM_FULL_COMMUNICATION、COMM_SILENT_COMMUNICATION。其中,COMM_NO_COMMUNICATION包含两个子状态:COMM_NO_COM_NO_PENDING_REQUEST、COMM_NO_COM_REQUEST_PENDING;COMM_FULL_COMMUNICATION也包含两个子状态:COMM_FULL_COM_NETWORK_REQUESTED、COMM_FULL_COM_READY_SLEEP。

提示:User请求通信时,只能请求COMM_NO_COMMUNICATION、COMM_FULL_COMMUNICATION两种模式,COMM_SILENT_COMMUNICATION模式,User不能请求,ComM内部处理此状态。

2、CanNM的状态切换对ComM的影响

CanNM和ComM的状态机里有什么玄机呢?这里,想解释这样一个问题:

调用CanNm_NetworkRelease()接口,会触发ComM对应的Channel会进入COMM_SILENT_COMMUNICATION模式吗?

首先,要清楚:调用CanNm_NetworkRelease()接口,会将CanNM对应Channel的子状态切换到RSS状态但是并未有切换Channel的Mode,即:CanNM的Channel仍然在NM模式下。

而Autosar的规范中,对于CanNM状态切换到RSS子状态,并不要求其通知到ComM。所以,如果是单纯的调用CanNm_NetworkRelease()接口,并不会影响ComM的状态切换,也就是ComM此时不会切换到COMM_SILENT_COMMUNICATION模式,ComM应该继续保持在之前的模式中,eg:COMM_FULL_COMMUNICATION。因此,应用报文的通信不受影响。这就是我个人对本文焦点问题的答案。

提示CanNM的Channel在RSS状态下,不发网络管理报文,应用报文的通信不受影响

3、CanNM的状态切换,何时通知ComM?

Autosar的模块间交互,会标准化对应的接口,当CanNM有状态变化时,会通过标准接口(Callback)通知ComM。有哪些网络Callback接口呢?
  • ComM_Nm_NetworkStartIndication():网络在BSM模式下,收到网络管理报文,网络模式由BSM进入NM,通知ComM;
  • ComM_Nm_RestartIndication():程序在Shutdown阶段,收到唤醒请求,模式由PBSM/BSM进入NM,通知ComM;
  • ComM_Nm_NetworkMode():网络模式进入NM模式;

  • ComM_Nm_PrepareBusSleepMode():网络模式进入PBSM模式;

  • ComM_Nm_BusSleepMode():网络模式进入BSM模式。

如上接口,可以看出一个规律:只有CanNM的Mode切换时,会通知到ComM,而State的切换属于模块的内部状态跳转,一般不会通知到其他模块。所以,如果单纯调用CanNm_NetworkRelease()接口,只是切换CanNM的State,没有改变CanNM的Mode,不会通知到ComM,ComM也不会切换到COMM_SILENT_COMMUNICATION模式。

一般不建议User直接调用CanNm_NetworkRelease()接口,User可以请求ComM的ComM_RequestComMode()接口,进行通信请求。由ComM协调NM调用CanNm_NetworkRelease()接口,进一步的协调网络状态和通信栈的通信行为。

往期精彩回顾




Autosar往期精彩文章汇总:1~70
Autosar往期精彩文章汇总:71~100
Autosar往期精彩文章汇总:101~150
Bootloader开发:uC如何烧录第一个程序?
CAN通信基础:采样原理
以太网学习笔记:如何理解PHY的Link Up
NVM存储:Flash操作注意事项
Boot开发:App诊断请求($10 02/82)信息”传递”给Boot方式(四)
嵌入式开发:读懂C语言封装的汇编很重要
嵌入式开发:避免Xcp报文被阻塞的一种开发技巧
嵌入式开发:.bss段数据为什么会被清零?
信息安全(下):软件认证(Authentication)
CAN通信基础概念:Mailbox与Hardware Object
诊断基础:如何理解Operation Cycle?
诊断基础:Event内存管理
Autosar通信模块COM:Update-Bits详解
基于Aurix TC3xx SWAP机制(A/B分区)的SOTA实现
诊断QA:CAN和CAN FD的诊断报文能否混用?

 

点击下方关注,一起聊聊Autosar/嵌入式,如果需要,联系作者进群,给你更专业的解答

原文始发于微信公众号(开心果 Need Car):Autosar网络管理:CanNM网络状态变化都要告知ComM吗?

版权声明:admin 发表于 2022年12月2日 上午10:01。
转载请注明:Autosar网络管理:CanNM网络状态变化都要告知ComM吗? | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...