AutoSar CanNm笔记
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
网络管理目的
网络管理的目的是使车辆网络中的 ECU 节点有序的睡眠和唤醒。 在没有通信需求的时候睡眠在需要通信的时候唤醒 可以节约汽车电池的电量。
CAN Network Management(CanNm)是一种独立于硬件的协议实现的软件模块 只能在 CAN 网络上使用 主要功能是协调网络正常运行和总线睡眠模式之间的转换。 CanNm 提供了网络管理接口NmIf 和CAN 接口CanIf 模块间的适配。
CanNM与其他模块之间关系
主动唤醒和被动唤醒
网络管理唤醒分为主动唤醒和被动唤醒。BMS的休眠唤醒包括CAN唤醒CAN唤醒又叫网络管理唤醒
主动唤醒和被动唤醒的区分 简单来说除了收到其他节点发送的网络唤醒报文是被动唤醒外其他都是主动唤醒如KL15、菊花链、RTC定时唤醒等。
主动唤醒请求 来自模块内部对网络的请求并通过发送NM PDU尝试唤醒其他ECU。主动唤醒又叫做本地唤醒和硬线相关的唤醒方式一般称为本地唤醒源。如KL15硬线硬线传感器信号如脚踢门、后备箱打开主动唤醒节点BMS即是一个节点的网络管理报文必须先于应用报文发送。
被动唤醒请求 来自总线上其他节点对该节点例BMS的网络请求。被动唤醒的节点发送的网络管理 PDU 和应用报文没有顺序要求。被动唤醒又叫做远程唤醒简单来时就是和总线信号相关的唤醒方式。比如收到网络管理报文或者指定诊断报文或者包含KL15信号的应用报文有些节点没有KL15硬线而是网关转发包含KL15信号的应用报文唤醒。
状态管理
AUTOSAR CanNm 包含三种模式其中 Network Mode包括三种子状态
- 网络模式Network Mode
- 重复报文状态Repeat Message State
- 常规运行状态Normal Operation State
- 准备睡眠状态Ready Sleep State
- 准备总线睡眠模式Prepare Bus-Sleep Mode
- 总线睡眠模式Bus-Sleep Mode
1. 总线睡眠模式Bus-Sleep Mode
总线睡眠模式(BusSleepMode)的作用是当网络上没有通信需求的时候减少节点对蓄电池电量的消耗。 节点进入总线睡眠模式(BusSleepMode)后对蓄电池电量的消耗下降到适当的程度。节点保留唤醒机制等待被唤醒。
原则上处于总线睡眠模式(BusSleepMode)的节点不接收应用报文并且不应给出ACK应答。如果此时节点数据链路层被唤醒且给出了ACK应答需要在最短时间内重新进入低功耗模式。
2. 准备总线睡眠模式Prepare Bus-Sleep Mode
准备总线睡眠模式(PrepareBusSleepMode)的作用是保证在进入总线睡眠前节点有足够的时间停止其网络活动。在准备总线睡眠模式PrepareBusSleepMode下总线活动减少如存在于发送缓存中的报文被发送以清空发送缓存最终总线将不再有活动即没有任何报文被发送。
节点进入准备总线睡眠模式(PrepareBusSleepMode)后将立即开启T_WAIT_BUS_SLEEP定时器。在该定时器溢出后该节点将离开准备总线睡眠模式(PrepareBusSleepMode)进入总线睡眠模式(BusSleepMode)。
当处于准备总线睡眠模式(BusSleepMode) 的节点接收到网络管理报文时 将向网络模式(NetworkMode)转换默认情况下节点进入网络模式(NetworkMode)中的重复报文状态RepeatMessageState。
3. 网络模式Network Mode
当节点从总线睡眠模式(BusSleepMode)或准备总线睡眠模式(PrepareBusSleepMode)进入网络模式(NetworkMode)时在默认情况下需进入重复报文状态(RepeatMessageState)。
节点进入网络模式(NetworkMode)后需开启T_NM_TIMEOUT定时器
节点处于网络模式 (NetworkMode)成功接收或成功发送一帧网络管理报文NM PDU后需重启T_NM_TIMEOUT定时器
3.1 重复报文状态(RepeatMessageState)
无论其睡眠条件是否满足重复报文状态(RepeatMessageState)都可以使节点保持一段时间的活跃状态。该状态可以被用来监测在线节点并且告诉其它节点我上线了可以正常通信了。
当节点进入重复报文状态(RepeatMessageState)后需要开始或重新开始发送网络管理报文。
节点处于重复报文状态(RepeatMessageState)T_NM_TIMEOUT定时器超时溢出时需要重启T_NM_TIMEOUT定时器。
节点接收到本地唤醒源后进入快发重复报文状态InnmediateTransmitState
节点接收到被动唤醒源后进入正常重复报文状态NormalTransmitState。
节点在进入重复报文状态 (RepeatMessageState)后需要保持一段时间 这段时间由参数T_REPEAT_MESSAGE 决定T_REPEAT_MESSAGE 超时后节点状态需进入常规运行状态(NormalOperationState)或准备睡眠状态(ReadySleepState)。 T_REPEAT_MESSAGE需保证网络上其它的节点都可以被网络管理报文唤醒。
节点离开重复报文状态(RepeatMessageState)后若对网络通信有需求应进入常规运行状态(NormalOperationState)。
节点离开重复报文状态(RepeatMessageState)后若对网络通信无需求应进入准备睡眠状态(ReadySleepState)。
节点离开重复报文状态(RepeatMessageState)后需将重复报文请求标志位RepeatMessageRequestBit清零。
3.2 常规运行状态(NormalOperationState)
常规运行状态(NormalOperationState)用于保证只要对网络通信有需求任何一个网络管理节点都可以保持网络处于唤醒状态。
当节点由重复报文状态(RepeatMessageState)或准备睡眠状态(ReadySleepState)进入常规运行状态(NormalOperationState)时需按照T_NM_MessageCycle的周期发送网络管理报文。
当节点处于常规运行状态(NormalOperationState)而定时器T_NM_TIMEOUT溢出时需要重启定时器。
当节点处于常规运行状态(NormalOperationState)而本地睡眠条件满足时需进入准备睡眠状态(ReadySleepState)。
当节点处于常规运行状态(NormalOperationState)而接收到重复报文请求标志位RepeatMessageRequestBit置位的网络管理报文时需进入重复报文状态(RepeatMessageState)。
当节点处于常规运行状态(NormalOperationState)而RepeatMessageRequest()函数被调用时需进入重复报文状态(RepeatMessageState)并将报文中重复报文请求标志位RepeatMessageRequestBit置位同时启用快速发送机制。
3.3 准备睡眠状态(ReadySleepState)
当节点从重复报文状态(RepeatMessageState)或常规运行状态(NormalOperationState)进入准备睡眠状态(ReadySleepState)后需停止发送网络管理报文。
当节点处于准备睡眠状态(ReadySleepState)定时器T_NM_TIMEOUT溢出后需进入准备总线睡眠模式(PrepareBusSleepMode)。
当节点处于准备睡眠状态(ReadySleepState)但因发生本地唤醒事件睡眠条件不再满足时需进入常规运行状态(NormalOperationState)。
当节点处于准备睡眠状态(ReadySleepState)接收到重复报文请求标志位RepeatMessageRequestBit置位的网络管理报文后需进入重复报文状态(RepeatMessageState)。
当节点处于准备睡眠状态(ReadySleepState)RepeatMessageRequest()函数被调用时需进入重复报文状态(RepeatMessageState)并将网络管理报文中的重复报文请求标志位RepeatMessageRequest置位同时启用快速发送机制。
网络管理定时参数
参数 | 描述 |
---|---|
T_REPEAT_MESSAGE | 节点在重复报文状态(RepeatMessageState)中持续的时间 |
T_NM_TIMEOUT | 节点进入网络模式(NetworkMode)后即开启该定时器 在准备睡眠状态(ReadySleepState)中该定时器溢出后节点进入准备总线睡眠模式(PrepareBusSleepMode) |
T_WAIT_BUS_SLEEP | 该定时器的作用是确保所有的节点都有时间停止其网络活动 |
T_START_NM_TX | 该参数定义了节点从准备总线睡眠模式(PrepareBusSleepMode)、常规运行状态(NormalOperationState)或准备睡眠状态(ReadySleepState)进入重复报文状态(RepeatMessageState)到发出第一帧网络管理报文的最大允许时间间隔。 |
T_START_App_TX | 在成功发送出第一帧网络管理报文后节点应发送出应用报文的最大时间间隔 |
T_NM_ImmediateCycleTime | 节点启动快速发送机制时需以此参数作为网络管理报文的发送周期 |
T_NM_MessageCycle | 在网络模式(NetworkMode) 除去准备睡眠状态中节点应以此参数作为网络管理报文的发送周期 |
T_WakeUp | 节点从唤醒事件发生到发出第一帧网络管理报文的最大允许时间间隔 |
N_ImmediateNM_TIMES | 当节点处于重复报文状态并启用快速发送机制时节点使用 T_NM_ImmediateCycleTime为周期发送网络管理报文的数量 |
状态切换整体框图
下图显示了与API规范相关的UML状态图。模式更改相关转换用绿色表示错误处理相关转换用红色表示可选节点检测相关转换用蓝色表示。此外还假定启用了总线负载减少功能。
状态切换详述
网络管理切换状态 | 描述 |
---|---|
NM_1 | CAN 网络管理模块的初始化 |
NM_2 | 节点在睡眠模式下检测到主动唤醒请求发送网络管理报文来主动唤醒网络必须首先进入 NM PDU 快速发送状态。 |
NM_3 | 处于睡眠模式时收到有效的网络管理报文后进入重复报文状态中的 NM PDU 正常发送状态。 |
NM_4 | 处于 NM PDU 快速发送状态的节点在计数器 N_ImmediateNM_TIMES 为零时节点将进入 NM PDU 正常发送状态以正常周期发送网络管理报文。 |
NM_5 | 处于重复报文状态下的主动请求网络节点如果 T_REPEAT_MESSAGE 发生超时但节点的主动网络请求仍持续存在节点必须进入常规操作状态。节点继续保持以正常周期T_NM_MessageCycle 发送网络管理报文和应用报文 PDU。 |
NM_6 | 如果节点的主动网络请求取消 并收到有效的网络管理报文后 节点应进入重复报文状态中。 |
NM_7 | 处于常规操作状态的节点如果释放所有的网络请求不再需要主动请求网络那么它必须立即将网络管理状态切换到准备睡眠状态同时该节点必须立即停止发送网络管理报文。 |
NM_8 | 处于准备睡眠状态的节点 如果检测到主动网络请求节点必须立刻进入常规操作状态同时必须开始以正常周期 T_NM_MessageCycle 发送网络管理报文和应用报文 PDU。 |
NM_9 | 处于重复报文状态的 NM PDU 正常发送状态的节点如果没有检测到主动网络请求即被动唤醒一旦T_REPEAT_MESSAGE 超时节点将进入准备睡眠状态在此状态下只发送应用报文不发NM报文。 |
NM_10 | 如果节点的主动网络请求取消 并收到有效的网络管理报文后 节点应进入重复报文状态中。同NM_6。 |
NM_11 | 处于准备睡眠状态的节点如果没有检测到主动网络请求一旦T_NM_TIMEOUT 超时 节点将进入预睡眠模式。 |
NM_12 | 处于预睡眠模式的节点如果检测到主动唤醒请求节点将进入重复报文状态的 NM PDU 快速发送状态。 |
NM_13 | 处于预睡眠模式的节点如果收到被动唤醒请求节点将进入重复报文状态的 NM PDU 正常发送状态。 |
NM_14 | 处于预睡眠模式的节点如果不再收到主动或被动唤醒请求一旦 T_WAIT_BUS_SLEEP 超时 节点将进入睡眠模式。 |
NM_15 | 在任何状态下发生 Battery Power Off节点都将进入关闭模式不再拥有任何通信和网络管理的功能。 |
当ECU处于不同的运行模式时可以发送和接收的CAN报文的类型。
网络模式 | 网络管理报文 | 应用报文[1] | |||
---|---|---|---|---|---|
Tx | Rx | Tx | Rx | ||
总线睡眠模式 | N | Y | N | N[2] | |
准备总线睡眠模式 | N | Y | N[3] | N | |
网络模式 | 重复报文状态 | Y | Y | Y | Y |
常规运行状态 | Y | Y | Y | Y | |
准备睡眠状态 | N | Y | Y | Y | |
除特殊说明外 Tx/Rx 是对应用层而不是对数据链路层的需求 “N”表示不允许报文的发送或接收 “Y”表示允许报文的发送或接收 [1]应用报文包括常规应用报文、诊断报文、标定用报文 [2]是对数据链路层的需求不应给出 ACK 应答 [3]已经存在于发送缓存中的报文允许被发送出来。 |
网络管理报文NM PDU
每一个AUTOASAR网络管理节点都会被分配一个唯一的网络管理报文ID。
NM PDU数据结构如下
源节点地址SourceNodeIdentifier
每一个参与网络管理的节点都会被分配一个唯一的标识符NODE_ID存放于网络管理报文的Byte0SourceNodeIdentifier中。
控制比特向量ControlBitVector
- Bit0重复报文请求标志位(RepeatMessageRequestBit)信号值描述为
- 0x0该报文发送节点未请求其他节点进入重复报文状态
- 0x1该报文发送节点请求其他节点进入重复报文状态
- Bit3NM协调器休眠位
- 主协调器未请求启动同步关机
- 主协调器请求启动同步关机
- Bit4主动唤醒网络标志位(ActiveWakeupBit)信号值描述为
- 0x0该报文发送节点未主动唤醒网络被其它节点唤醒
- 0x1该报文发送节点主动唤醒网络
- Bit6PN功能位
- 0x0网络管理不使用PN功能。
- 0x1网络管理报文中包含PNC信息。如果项目中网络管理要求使用PN功能发送的网络管理报文中有PNC请求时需要先置位PNI。接收节点会根据PNI情况决定网络管理的处理流程。
用户数据Userdata
在网络管理报文中有6个字节的用户数据Userdata0~5可以被应用层读取和写入用于传输用户定义信息。
被动唤醒和主动唤醒时的状态切换
- 被动唤醒
处于休眠状态的主板在收到NM报文唤醒时会从 Bus-Sleep 模式切换到Network 模式的Repeat state进行慢发NM报文以 CanNmMsgCycleTime例200ms 为周期在Repeat Message Timer例1000ms定时器到时时跳转到 Ready state 此时主板不会再发送NM报文只会发送APP应用报文。 - 主动唤醒
处于休眠状态的主板在由主动唤醒源唤醒后会从 Bus-Sleep 模式切换到Network 模式的Repeat state进行快发报文以 CanNmImmediateNmCycleTime例20ms 为周期发送 CanNmImmediateNmTransmissions例10 次之后进入慢发报文以 CanNmMsgCycleTime例200ms 为周期在Repeat Message Timer例1000ms定时器到时时跳转到 Normal State在此状态会一直发NM报文和应用报文当满足休眠条件则切换到 Ready state此时主板不会再发送NM报文只会发送APP应用报文。
其中被动唤醒时只发送几帧NM报文意在告诉其他节点本节点已经被唤醒。
常用缩写
缩写 | 英文名称 | 中文名称 |
---|---|---|
Autosar | Automotive Open System Architecture | 汽车开发系统架构 |
ECU | Electric Control Unit | 电控单元 |
NM | Netword Management | 网络管理 |
PM | Power Mode | 电源模式 |
PDU | Protocol Data Unit | 协议数据单元 |
KL15 | Terminal 15 of the vehicle | 网络唤醒硬线电压 |
KL30 | Terminal 30 of the vehicle | 12V电源电压 |
Power On | KL30 is connected | 12V电源上电 |
Power Off | KL30 is disconnected | 12V电源下电 |
CAN | Controller Area Network | 控制器局域网络 |
CANFD | CAN with Flexible Data Rate | 灵活速率CAN网络 |
RMR | Repeat Message Request | 重复报文状态请求 |
BSM | Bus Sleep Mode | 总线休眠状态 |
PBSM | Prepare Bus Sleep Mode | 总线预休眠状态 |
RMS | Repeat Message State | 重复报文状态 |
NOS | Normal Operation State | 正常运行状态 |
RSS | Ready Sleep State | 就绪睡眠状态 |
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |