AUTOSAR架构下关于CanNm的几点思考

前言

CanNm模块配置完成后,基本不需要和其他非标准AUTOSAR模块进行交互(除了user data数据的使用),但是在深入理解CanNm模块是发现一下几个问题还是比较疑惑:

(1)Dcm通过BswM控制CanNm报文的Enable和Disable后会影响CanNm状态机吗?

(2)谁来触发CanNm状态机跳转,什么条件下怎么触发?

(3)CanNm怎么知道是主动(本地)唤醒还是被动(NM网络)唤醒?

本文就来回答这些问题。

正文

1.网络管理基本概念

参考:https://mp.weixin.qq.com/s/GyGCdNZu3_0E2ZN6KnD-EQ

2.CanNm和BswM模块交互**

2.1 BswNMControl配置容器

在这里插入图片描述
BswM模块的BswMAction配置容器下的BswNMControl配置容器可以配置enable或者disable一路Can网络管理报文的发送,通常这个功能需求在DCM模块的0x28服务开关应用/网络管理通信中会使用到。
在这里插入图片描述
BswMComMNetworkHandleRef参数属于BswNMControl配置容器下的配置项,应用此路网络管理在Com下的通道号。
在这里插入图片描述
在这里插入图片描述
CanNm模块提供CanNm_DisableCommunication和CanNm_EnableCommunication两个函数接口用来开关CanNm报文的发送,如果在BswM模块中配置了BswNMControl配置容器,且有对应的LE逻辑表达式能够触发这个Action,那么就会完成BswM和CanN的交互。

2.2 BswMNmIfCarWakeUpIndication

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
BswM的BswMModeRequestPort配置容器中提供了BswMNmIfCarWakeUpIndication模式请求端口来通过NMif --> CanNm来获取网络管理唤醒状态。这个MRP在实际应用中很少用到。

3.ComM模块通过NMIf模块和CanNm模块交互

3.1 本地唤醒源主动唤醒

在这里插入图片描述
在这里插入图片描述
主动唤醒:来自模块内部对网络的请求,比如KL15唤醒。主动唤醒节点的网络管理报文必须先于应用报文发送。

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()请求进入主动唤醒。ComM进入COMM_FULL_COMMUNICATION后,可通过BSWM或手动方式,启动相应通道的Com IPdu Groups,通信开始。

3.2 网络唤醒源被动唤醒

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
被动唤醒:来自总线上其他模块对该模块的网络请求。被动唤醒的节点,发送网络管理报文和应用报文的先后顺序无特别要求。

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。

3.3 网络休眠

在这里插入图片描述
在这里插入图片描述
当某个网络通道需要休眠时,调用ComM接口ComM_RequestComMode()请求COMM_NO_COMMUNICATION以释放通信请求,COMM在接收到请求后,调用 CanSM_RequestComMode()请求CanSM将相应的Can通道状态切换为NOCOM,如果该通道的NMVariant为FULL,调用NM接口Nm_NetworkRelease()请求NM进入sleep,NM在等待总线同步休眠后(其他节点都停发了网络管理报文准备休眠),进入Bus-Sleep状态,反馈给ComM,ComM进入NOCOM状态,如果BswM中配置了ComM模块状态为NO COMMUNICATION就执行ECUM下电动作时,此时ECUM就可以启动下电流程。

4.问题回答

问题1:Dcm通过BswM控制CanNm报文的Enable和Disable后会影响CanNm状态机吗?
答:AUTOSAR网络管理规范中没有明确说明这个问题。不过在阅读源码后,发现 CanNm_DisableCommunication和 CanNm_EnableCommunication不会影响CanNm状态机,只是设置一个标志用来控制NM报文的发送。

问题2:谁来触发CanNm状态机跳转,什么条件下怎么触发?
答:ComM模块获取到EcuM上报的被动唤醒事件后通过Nm_PassiveStartUp来被动唤醒NM。ComM收到用户的网络通信请求后通过Nm_NetworkRequest来主动唤醒NM。ComM收到用户的网络通信请求后通过Nm_NetworkRelease释放NM。

问题3:CanNm怎么知道是主动(本地)唤醒还是被动(NM网络)唤醒?
答:主动唤醒一般都是本地Local唤醒,来自ComM的用户(User)调用ComM_ModeRequest请求网络唤醒。被动唤醒一般都是NM网络唤醒,来自EcuM调用ComM_EcuM_WakeUpIndication上班的唤醒事件。

参考文献:

[1]Specification of CAN Network ManagementAUTOSAR CP Release 4.3.1

[2]Specification of NetworkManagement Interface AUTOSAR CP Release 4.3.1

[3] Specification of Communication Manager AUTOSAR Release 4.2.2

[4] Specification of Basic Software Mode Manager AUTOSAR Release 4.2.2

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我没有提供相关的架构图。但是根据引用中提到的信息,CAN Network Management(CanNm)是一个独立于硬件的软件模块,用于协调CAN网络的正常运行和总线睡眠模式之间的转换。CanNm提供了网络管理接口(NmIf)和CAN接口(CanIf)之间的适配。引用中提到,在使用CanNm之前,必须进行应用初始化,该初始化应在CAN接口初始化之后、NM接口初始化之前进行。而引用中提到了被动唤醒和主动唤醒时的状态切换过程。被动唤醒是指处于休眠状态的主板收到NM报文唤醒后进入Repeat state,并按照一定周期发送NM报文和应用报文,当满足休眠条件时进入Ready state。主动唤醒是指处于休眠状态的主板由主动唤醒唤醒后进入Repeat state,先进行快速发送报文,然后按照一定周期发送NM报文和应用报文,当满足休眠条件时进入Ready state。总的来说,CanNm在CAN网络中起到管理和控制的作用,确保网络的正常运行和总线的睡眠模式之间的转换。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [AutoSar CanNm笔记](https://blog.csdn.net/m0_56208280/article/details/130533136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Autosar深入理解之CanNm(1)](https://blog.csdn.net/wdconan001/article/details/129529422)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值