AUTOSAR架构中CanNm模块的问题解答

前言
cannm模块配置完成后,基本不需要和其他非标准autosar模块进行交互(除了user data数据的使用),但是在深入理解cannm模块是发现一下几个问题还是比较疑惑:
(1)dcm通过bswm控制cannm报文的enable和disable后会影响cannm状态机吗?
(2)谁来触发cannm状态机跳转,什么条件下怎么触发?
(3)cannm怎么知道是主动(本地)唤醒还是被动(nm网络)唤醒?
本文就来回答这些问题。
autosar模式管理-bswm模块详细介绍
autosar模式管理-ecum sleep and up详解
autosar 通信服务 - nm概念详解
正文
1.网络管理基本概念
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上班的唤醒事件。


智慧路灯杆如何促进城市数字化转型?智慧杆有什么优点?
ESD失效和EOS失效的区别
iphone8什么时候上市?其实iphone8是这样的!
低价之王?小米6:初心无法坚持了,可能2299元起售
无线网IP静态好还是DHCP好
AUTOSAR架构中CanNm模块的问题解答
激光二极管的芯片结构
2025年全球建筑机器人市场将达到2.26亿美元
推动产业创新发展 菲菱科思打造智造新名片
iphone8将具有无线快充功能 你们期待吗
如何通过人工智能改变音乐和人与世界之间的联系
如何做RAM和ROM完整性检查
茂捷M6362A替换昂宝OB2362A,茂捷M5579A/B替换昂宝OB2269
台湾旺玖BL8810完全替代GL823K|USB 2.0单LUN读卡器控制器
巨头争霸,量子计算性能甩最快超算一大截!
基于用Arduino开发板电池电压监测方案
后疫情时代,江波龙技术研发成就品质
魅族18系列首销1分钟销售额破亿
阿里云与易绘公司合作“管网数字孪生”技术,实时监测液位运行
手持式土壤重金属检测仪介绍