AUTOSAR CAN NM核心状态机讲解
2026/7/24 18:04:12 网站建设 项目流程

在深入讲解 AUTOSAR CAN NM 状态机之前,需要明确一个关键事实:没有报文发出,不代表程序没有运行。CAN NM 的状态管理逻辑复杂,即使总线静默,ECU 也可能处于不同的网络管理状态,执行着相应的定时器管理和状态跳转逻辑。

AUTOSAR CAN NM状态机详解

目录

  • 1. 状态介绍
    • 1.1 总线睡眠模式(Bus-Sleep Mode)
    • 1.2 预睡眠模式(Prepare Bus-Sleep Mode)
    • 1.3 网络工作模式(Network Mode)
      • 1.3.1 报文重复状态(Repeat Message State)
      • 1.3.2 常规运行状态(Normal Operation State)
      • 1.3.3 就绪睡眠状态(Ready Sleep State)
  • 2. 状态间跳转条件
    • 2.1 状态跳转表格
    • 2.2 BSM→RMS
    • 2.3 PBSM→BSM
    • 2.4 PBSM→RMS
    • 2.5 RMS→NOS
    • 2.6 NOS→RMS
    • 2.7 RMS→RSS
    • 2.8 RSS→RMS
    • 2.9 RSS→PBSM
  • 3. 常见配置参数
  • 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状态就会开始计时,他有非常多的重置条件

  1. 在RMS和NOS状态下,只要计数器记满,就自动重新计时
  2. 成功发出NM报文,也会重新计时
  3. 接收到了NM报文,也会重新计时

那么什么时候NM-Timeout Timer能够真正的超时并且不重置呢?答案就是在RSS状态下,如果NM-Timeout Timer超时了,就会跳出NM状态,跳到PBSM状态。

报文重复状态(Repeat Message State)

在这个状态里主要是做应用报文和NM报文的发送。在这个状态下有几个比较重要的参数

  1. CANNM_REPEAT_MESSAGE_TIME : 这个参数决定ECU在报文重复状态(RMS)待多久
  2. CanNmImmediateNmTransmissions : 这个参数决定NM快发的帧数
  3. CanNmImmediateNmCycleTime : 这个参数决定NM快发的周期
  4. 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 Timer
RMSRSSNetwork Release/
RSSRMS- Repeat Message Bit Received
- CanNm_RepeatMessageRequest();
Start Repeat Message Timer
RSSPBSMNM-Timeout Timer has expired- Start Wait Bus-Sleep Timer;
- Nm_PrepareBusSleepMode();

BSM->RMS

由图可知,这个路径有两个条件,满足任意条件都可跳转:

  1. CanNm_PassiveStartup(); 可以看做是被动唤醒,是由上层组件决定是否运行进入NM模式
  2. CanNm_NetworkRequest(); 属于主动唤醒,属于是本ECU检测到了某些硬件唤醒源,然后主动将网络唤醒的一种。

在BSM状态下接收到NM报文,不会自动的跳转到NM状态,而是通过调用Nm_NetworkStartIndication通知上层组件去做决策,如果决策允许进入,就会调用CanNm_PassiveStartup去跳转。

在跳转时会伴随着三个动作:

  1. 启动NM-Timeout 定时器
  2. 启动Repeate Message 定时器
  3. 调用NM_NetworkMode函数

PBSM->BSM

进入的条件非常简单,就一个Wait Bus-Sleep Timer超时

PBSM->RMS

由图可知,这个路径有三个条件,满足任意条件都可跳转:

  1. CanNm_RxIndication(); 属于被动唤醒,收到了其他ECU发出来的NM报文。
  2. CanNm_PassiveStartup();
  3. CanNm_NetworkRequest(); 属于主动唤醒,属于是本ECU检测到了某些硬件唤醒源,然后主动将网络唤醒的一种。

在跳转时会伴随着三个动作:

  1. 启动NM-Timeout 定时器
  2. 启动Repeate Message 定时器
  3. 调用NM_NetworkMode函数

RMS->NOS

进入NOS的条件由两点需要同时满足

  1. Repeat Message Timer 过期
  2. Network Requested : 由主动唤醒网络请求

注意:接收到NM报文不会满足Network Requested条件

NOS->RMS

两个条件满足任意一个:

  1. 接收到Repeat Message Bit,这个是由其他节点发出的,处于CBV区域
  2. CanNm_RepeatMessageRequest(); 由其他组件决定调用/一般不会使用

这个会伴随着启动 Repeat Message Timer

RMS->RSS

进入NOS的条件由两点需要同时满足

  1. Repeat Message Timer 过期
  2. Network Released : 收到网络释放信号

RSS->RMS

两个条件满足任意一个:

  1. 接收到Repeat Message Bit,这个是由其他节点发出的,处于CBV区域
  2. CanNm_RepeatMessageRequest(); 由其他组件决定调用/一般不会使用

这个会伴随着启动 Repeat Message Timer

RSS->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》

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询