can bus 中spn是什么_CP AUTOSAR功能栈简介NM网络管理(Can)

CanNM模块架构图
1,概述
CP AUTOSAR提供一种直接分布式网络管理方式,有单独的网络管理报文用于网络管理,且总线上各个节点都是平等的,相比于OSEK基于令牌的直接网络管理方式更简单易部署。实际应用中,ASW一般不直接同NM交互,而是通过系统服务ComM通信管理对NM进行管理。ComM模块介绍见:CP AUTOSAR功能栈简介-COMM通信管理。
2,模块介绍
ComM:通信管理系统服务模块,通过与各通信总线的状态管理模块(如CanSM、LinSM等)和网络管理模块(NM)交互,为用户提供统一、抽象、简洁的通信模式管理方式。
NM:AUTOSAR网络管理独立于具体通信总线形式的统一接口模块,内部对接各个具体总线的网络管理模块(如CanNM、LinNM等),同时提供协调各总线同步休眠功能(NM Coordinator functionality)。
xxxNM:xxx通信总线的AUTOSAR网络管理实现模块,比如CanNM,AUTOSAR提供一种直接分布式的网络管理方式,每个节点都有特定的网络管理报文用于网络管理且每个节点在总线上都是平等的。
xxxIF:提供xxx通信总线的控制器和收发器驱动模块的抽象接口,比如CanIF。
Can/Lin/FlexRay/Eth:各通信总线的控制器驱动,提供具体总线的收发驱动等。
3,CanNM状态机简介

CanNM状态机
概述:
上电后,用户如果需要主动保持网络总线唤醒,需要调用CanNm_NetworkRequest()主动请求网络进行主动唤醒,NM状态经Repeat Message后进入Normal Operation,在此状态下持续发送网络管理报文以保持网络唤醒,当不再需要保持网络总线唤醒时,调用CanNm_NetworkRelease()释放网络请求,NM状态进入Ready Sleep。而如果是被动唤醒,用户不需要主动保持网络唤醒,则调用CanNm_PassiveStartUp()进入被动唤醒,NM状态经Repeat Message后进入Ready Sleep。
进入Ready Sleep后NM将停止发送网络管理报文,应用报文正常发送,并等待总线同步休眠(未接收到其他节点发送的网络管理报文),同步休眠NM-Timeout+Bus-Sleep Timer时间后,NM进入Bus-Sleep,总线关闭,此时系统可以启动下电流程。
如果节点配置为passive模式(NMVariant为PASSIVE),那么整个过程都不发送任何网络管理报文。
状态跳转描述:
(PowerOn)->Bus-Sleep
上电后,调用CanNm_Init()完成CanNM模块初始化后进入。
Bus-Sleep->Repeat Message
从Bus-Sleep进入Repeat Message有两种方式:主动唤醒进入和被动唤醒进入。
主动唤醒进入:调用 CanNm_NetworkRequest()主动请求网络后进入,进入后一般需要以CanNmImmediateNmCycleTime周期快速发送CanNmImmediateNmTransmissions帧网络管理报文,而后转为以CanNmMsgCycleTime周期正常发送网络管理报文。
被动唤醒进入:调用CanNm_PassiveStartUp()进入,进入后以CanNmMsgCycleTime周期发送网络管理报文。
Repeat Message->Normal Operation
在Repeat Message状态下一定时间(CANNM_REPEAT_MESSAGE_TIME)后,如果用户有过主动网络请求(调用过CanNm_NetworkRequest())且未释放(未调用过CanNm_NetworkRelease()),那么进入Normal Operation状态,否则进入Ready Sleep状态。
Normal Operation->Ready Sleep
在Normal Operation下,如果用户调用CanNm_NetworkRelease()释放了主动网络请求,那么进入Ready Sleep,停止发送网络管理报文。
Repeat Message->Ready Sleep
在Repeat Message状态下一定时间(CANNM_REPEAT_MESSAGE_TIME)后,用户如果没有主动网络请求(被动唤醒),那么进入Ready Sleep状态,停止发送网络管理报文。
Ready Sleep->NormalMessage
期间如果有了CanNm_NetworkRequest()网络请求,进入NormalMessage。
Normal Operation/Ready Sleep->Repeat Message
期间如果接收到的了repeat message请求(Repeat Message Bit received 或CanNm_RepeatMessageRequest()),则再次进入repeat message状态,但在Repeat message中不再进行快速报文的发送,其他处理同Bus-Sleep->Repeat Message
Ready Sleep->Prepare Bus-Sleep
在Ready Sleep状态下,如果长时间(NM-Timeout)未接收到其他节点的网络管理报文(意味着其他节点也都准备休眠了),进入Prepare Bus-Sleep状态,停止所有报文的发送。
Prepare Bus-Sleep->Bus-Sleep
在Prepare Bus-Sleep下,Bus-Sleep timer超时后,进入Bus-Sleep状态,关闭通信总线,此时系统如果休眠条件也满足了,可以开始进入休眠流程。
Prepare Bus-Sleep->Repeat Message
期间如果用户再次主动请求了网络或进行被动唤醒,或者又收到了其他节点发送的网络管理报文(CanNm_RxIndication()),则再次进入repeat message状态,处理同Bus-Sleep->Repeat Message。
4,Partial Network (Can)
PN局部网络管理,在大型CAN网络中,通过PN可以实现同一CAN网络中仅特定group的ECUs被唤醒或进入休眠。
实现原理简介:具体做法为在网络管理报文的数据中增加PNI Partial Network Info信息(PNI bit为1),然后ECU对接收到的网络管理报文进行PNI滤波(见下文),仅包含了特定PNI值的网络管理报文会被ECU的NM接收并处理。另外为了实现PN,ECU的网络唤醒源(比如transceiver)也需要支持PN功能(能支持仅包含特定报文内容的特定报文ID唤醒)。
NM-PDU filter algorithm:每个PN ECU都会事先设计好一个PN MASK值,通过将MASK值与接收到的网络管理报文中的PNI值进行位与操作,结果不全为0的接收处理,否则丢弃(不认为有接收到网络管理报文)。例如某ECU的PN mask值为0x000F,那么PNI为0x0101的会被接收,PNI为0x0100的不会被接收处理。

Example NM PDU containing PNI

Control Bit Vector
5,主要功能调用管理(CanNM)

Active startup(本地唤醒)
ECU上电或唤醒后,如果检测到为本地唤醒或其他条件需要ECU进行主动唤醒时,(ComM)调用NM接口 Nm_NetworkRequest(),NM再调用CanNM接口 CanNm_NetworkRequest()请求进入主动唤醒。
Passive startup(远程唤醒)
ECU上电或唤醒后,如果检测到为远程唤醒或其他添加需要ECU进行passive唤醒时,(ComM)调用 Nm_PassiveStartUp()请求NM进行passive唤醒,NM调用CanNm_PassiveStartUp()进入被动唤醒。
Sleep
主动唤醒后,如果ECU需要进入休眠,(ComM)调用NM接口Nm_NetworkRelease()释放主动网络请求。
CanNM报文发送
在每次Tx Timeout之后,通过CanIf调用CanIf_Transmit()完成报文发送,如果对应Can通道硬件空闲,CanIf调用Can_Write()完成发送,否则在CanIf缓存,在硬件空闲时完成发送。
CanNM报文接收
接收到网络管理报文后,在接收中断(中断方式接收)或Can_MainFunction_Read()(Polling方式接收)中判断接收,回调CanIf_RxIndication()通知CanIf,CanIf回调CanNm_RxIndication()通知CanNM,如果通道不支持PN,则认为接收到了网络管理报文,如果支持PN,还需检查报文中的PNI位 bit是否为1,为1再对PNI进行滤波(见上文NM-PDU filter algorithm),通过后认为接收到了网络管理报文。
6,参考文献
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf R19-11
AUTOSAR_SWS_NetworkManagementInterface.pdf 4.2.2
AUTOSAR_SWS_CANNetworkManagement.pdf 4.2.2
AUTOSAR_SWS_CANInterface.pdf 4.2.2
AUTOSAR_SWS_CANDriver.pdf 4.2.2
------END------
个人整理,有理解不对或不到位的地方,欢迎留言纠正!
欢迎留言或联系微信estacks参与技术讨论或投稿!
如果您觉得文章还不错~
点击右下方☞ 在看 或进入左上方☝转发分享是给我们最大的支持,谢谢!
关注公众号“e栈社区”以获取更多文章~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
