
在深入讲解 AUTOSAR CAN NM 状态机之前需要明确一个关键事实没有报文发出不代表程序没有运行。CAN NM 的状态管理逻辑复杂即使总线静默ECU 也可能处于不同的网络管理状态执行着相应的定时器管理和状态跳转逻辑。AUTOSAR CAN NM状态机详解目录1. 状态介绍1.1 总线睡眠模式Bus-Sleep Mode1.2 预睡眠模式Prepare Bus-Sleep Mode1.3 网络工作模式Network Mode1.3.1 报文重复状态Repeat Message State1.3.2 常规运行状态Normal Operation State1.3.3 就绪睡眠状态Ready Sleep State2. 状态间跳转条件2.1 状态跳转表格2.2 BSM→RMS2.3 PBSM→BSM2.4 PBSM→RMS2.5 RMS→NOS2.6 NOS→RMS2.7 RMS→RSS2.8 RSS→RMS2.9 RSS→PBSM3. 常见配置参数4. 参考文献状态介绍本小节主要介绍每个状态主要职责ECU在这个状态里面需要做哪些动作。最重要的是就是 网络工作模式Network Mode它涉及到的配置项是最多的也是最复杂的。CANNM的状态机可以分成3个大状态总线睡眠模式Bus-Sleep Mode预睡眠模式Prepare Bus-Sleep Mode网络工作模式Network Mode其中网络工作模式Network Mode又分三个子状态报文重复状态Repeat Message State常规运行状态Normal Operation State就绪睡眠状态Ready Sleep State总线睡眠模式Bus-Sleep Mode这个模式是ECU上电之后CAN NM的默认状态。ECU关闭CAN发送功能、停止NM报文收发CAN收发器进入休眠模式仅保留基础唤醒检测能力应用层无CAN数据交互。预睡眠模式Prepare Bus-Sleep Mode该状态是工作态到休眠态的过渡缓冲状态核心作用是避免瞬时总线空闲导致的频繁休眠唤醒提升网络稳定性。其实这个状态和 总线睡眠模式BSM没什么太大区别只是用于过渡一下避免芯片反复掉电重启。其中比较关键的配置项是CANNM_WAIT_BUS_SLEEP_TIME这个参数是决定ECU待在预睡眠模式PBSM的最长时间时间一到就会跳到总线睡眠模式BSM网络工作模式Network Mode网络工作模式为ECU正常通信状态包含三种子状态报文重复状态RMS、常规运行状态NOS、就绪睡眠状态RSS。这里有一个贯穿整个网络工作模式NM的参数NM-Timeout Timer说来也是非常神奇这个定时器只要一进NM状态就会开始计时他有非常多的重置条件在RMS和NOS状态下只要计数器记满就自动重新计时成功发出NM报文也会重新计时接收到了NM报文也会重新计时那么什么时候NM-Timeout Timer能够真正的超时并且不重置呢答案就是在RSS状态下如果NM-Timeout Timer超时了就会跳出NM状态跳到PBSM状态。报文重复状态Repeat Message State在这个状态里主要是做应用报文和NM报文的发送。在这个状态下有几个比较重要的参数CANNM_REPEAT_MESSAGE_TIME 这个参数决定ECU在报文重复状态RMS待多久CanNmImmediateNmTransmissions 这个参数决定NM快发的帧数CanNmImmediateNmCycleTime 这个参数决定NM快发的周期CANNM_MSG_REDUCED_TIME 这个参数决定NM报文的正常发送周期常规运行状态Normal Operation State在这个状态里主要是做应用报文和NM报文的发送别的特殊操作没有属于是一个老实人了。CanNmMsgCycleTime 这个参数决定NM报文的正常发送周期CANNM_MSG_REDUCED_TIME 这个参数一般是大于1/2的CANNM_TIMEOUT_TIME如果开启了就绪睡眠状态Ready Sleep State在这个状态ECU是被禁止发送NM报文只能发送应用报文。状态间跳转条件这部分我们要结合一个UML的状态机图来做一个详细讲解比较更容易理解。我们首先稍微讲一下这个图该怎么看他的跳转线上有许多条件“/”前面的代表跳转条件“/”后面的代表跳转时执行的动作。状态跳转表格如下当前状态目标状态跳转条件伴随动作BSMRMS- CanNm_PassiveStartup();- CanNm_NetworkRequest();- Start NM-Timeout Timer;- Start Repeat Message Timer;- Nm_NetworkMode();PBSMBSMWait Bus-Sleep Timer超时Nm_BusSleepMode()PBSMRMS- CanNm_RxIndication();- CanNm_PassiveStartUp();- CanNm_NetworkRequest();- Start NM-Timeout Timer;- Start Repeat Message Timer;- Nm_NetworkMode();RMSNOSNetwork Requested/NOSRMS- Repeat Message Bit Received- CanNm_RepeatMessageRequest();Start Repeat Message TimerRMSRSSNetwork Release/RSSRMS- Repeat Message Bit Received- CanNm_RepeatMessageRequest();Start Repeat Message TimerRSSPBSMNM-Timeout Timer has expired- Start Wait Bus-Sleep Timer;- Nm_PrepareBusSleepMode();BSM-RMS由图可知这个路径有两个条件满足任意条件都可跳转CanNm_PassiveStartup(); 可以看做是被动唤醒是由上层组件决定是否运行进入NM模式CanNm_NetworkRequest(); 属于主动唤醒属于是本ECU检测到了某些硬件唤醒源然后主动将网络唤醒的一种。在BSM状态下接收到NM报文不会自动的跳转到NM状态而是通过调用Nm_NetworkStartIndication通知上层组件去做决策如果决策允许进入就会调用CanNm_PassiveStartup去跳转。在跳转时会伴随着三个动作启动NM-Timeout 定时器启动Repeate Message 定时器调用NM_NetworkMode函数PBSM-BSM进入的条件非常简单就一个Wait Bus-Sleep Timer超时PBSM-RMS由图可知这个路径有三个条件满足任意条件都可跳转CanNm_RxIndication(); 属于被动唤醒收到了其他ECU发出来的NM报文。CanNm_PassiveStartup();CanNm_NetworkRequest(); 属于主动唤醒属于是本ECU检测到了某些硬件唤醒源然后主动将网络唤醒的一种。在跳转时会伴随着三个动作启动NM-Timeout 定时器启动Repeate Message 定时器调用NM_NetworkMode函数RMS-NOS进入NOS的条件由两点需要同时满足Repeat Message Timer 过期Network Requested 由主动唤醒网络请求注意接收到NM报文不会满足Network Requested条件NOS-RMS两个条件满足任意一个接收到Repeat Message Bit这个是由其他节点发出的处于CBV区域CanNm_RepeatMessageRequest(); 由其他组件决定调用/一般不会使用这个会伴随着启动 Repeat Message TimerRMS-RSS进入NOS的条件由两点需要同时满足Repeat Message Timer 过期Network Released 收到网络释放信号RSS-RMS两个条件满足任意一个接收到Repeat Message Bit这个是由其他节点发出的处于CBV区域CanNm_RepeatMessageRequest(); 由其他组件决定调用/一般不会使用这个会伴随着启动 Repeat Message TimerRSS-PBSM这个条件很简单就只有一个NM-Timeout Timer 超时退出。并且伴随着启动Wait Bus-Sleep Timer; 以及调用Nm_PrepareBusSleepMode();进入PBSM状态。常见配置参数配置参数解释CANNM_TIMEOUT_TIME处于NM的超时时间和NM-Timeout Timer相关CANNM_REPEAT_MESSAGE_TIME待在RMS的时间CanNmMsgCycleTimeNM报文正常发送周期CanNmImmediateNmCycleTimeNM报文快发的周期CanNmImmediateNmTransmissionsNM报文快发的次数CANNM_WAIT_BUS_SLEEP_TIMEPBSM跳转到BSM的等待时间CANNM_MSG_REDUCED_TIMENM报文降低时间需要开启CANNM_BUS_LOAD_REDUCTION_ENABLED参考文献《AUTOSAR_SWS_CANNetworkManagement.pdf》