目录
一、是什么网络管理
网络管理分为AUTOSAR和OSEK网络管理,这里只对AUTOSAR网络管理作简单介绍。
2003年汽车行业内的几大巨头(BMW, Bosch, Continental, DaimlerChrysler, Volkswagen, Siemens VDO)联合建立了AUTOSAR联盟,一起开发并建立一套真正的开放的汽车电子电器架构,也就是我们现在所说的AUTOSAR标准或者AUTOSAR架构,我们经常提到的AUTOSAR一般就是指AUTOSAR构架/标准,AUTOSAR的全称是AUTomotive Open System ARchitecture,随着多年的发展,越来越多的行业内的公司加入到了AUTOSAR联盟中,这其中有OEM(汽车整车厂),Tier1(汽车零部件供应商),芯片制造商以及工具制造商,AUTOSAR构架/标准也成为了汽车E/E设计的发展方向。
AUTOSAR CAN 网络管理是一个独立于硬件的协议,只能在 CAN 上使用。它的主要目的是协调网络的正常运行和总线休眠模式之间的转换,实现所在CAN网络的所有控制器的协同睡眠与唤醒。
二、网络管理的制约
1. CanNm 的一个通道只与一个网络中的一个网络管理集群相关联。 一个网络管理群集在一个节点中只能有一个 CanNm 通道。
2. CanNm 的一个通道仅与同一 ECU 内的一个网络相关联。
3. CanNm 仅适用于 CAN 系统。
4. CANNm模块可以应用于任何汽车领域。
三、网络管理协议
3.1 唤醒请求
唤醒请求可分为如下两种:
本地唤醒请求, 即来自该节点内部的对网络的唤醒请求。
远程唤醒请求, 即来自网络上其他节点的网络管理报文请求。
3.2 网络管理模式
网络管理包含如下三种模式:
睡眠模式
预睡眠模式
网络模式
表1 不同模式下的报文发送、接收情况
3.2.1 睡眠模式
当节点没有本地网络唤醒及远程唤醒请求时, ECU 通讯控制器切换至睡眠模式, ECU 功耗降低至适当水平。
在睡眠模式下,节点的网络管理报文和应用报文禁止发送,并且不能对总线上的报文进行 ACK 应答;但可以被总线上的报文唤醒,在被唤醒后才可以对总线报文进行ACK 应答。同时节点在该模式下,如果检测到有效的唤醒源,节点必须被唤醒。
3.2.2 预睡眠模式
当节点进入预睡眠模式时,将启动T_WAIT_BUS_SLEEP(关于这些参数详细见3.6节)定时器。
在预睡眠模式下,总线活动需静止下来,最终达到总线上没有活动,但ECU通讯控制器状态应处于工作模式。
在该模式下,节点的网络管理报文和应用报文禁止发送(为了清空发送缓存,允许将发送队列中已有的报文发完),但需对总线上的报文进行ACK应答。
3.2.3 网络模式
当节点进入网络模式时,将启动 T_NM_TIMEROUT 定时器。在网络模式下成功接收或者发送网络管理报文时,节点将重新启动 T_NM_TIMEROUT 定时器。
网络模式分为三种内部状态:
重复报文状态
常规操作状态
准备睡眠状态
3.2.3.1 重复报文状态
重复报文状态确保节点从睡眠模式或预睡眠模式到网络模式的转换对网络上的其他节点可见。进入重复报文状态时,节点将(重新)开始网络管理报文的发送,并启动 T_REPEAT_MESSAGE 定时器。应用报文必须在第一帧网络管理报文发送开始后且小于 T__STARTx_AppFrame 内发送。
节点的网络管理状态将保持在重复报文状态直到 T_REPEAT_MESSAGE 时间截止,一旦该时间超时,网络管理状态应该离开重复报文状态。
在 重 复 报 文 状 态 下 , 节 点 一 旦 接 收 或 发 送 一 条 网 络 管 理 报 文 , 或 者T_NM_TIMEROUT 超时,则 T_NM_TIMEROUT 立即重置。
重复报文状态包含两个子状态:
NM 快速发送子状态
NM 正常发送子状态
3.2.3.1.1 NM 快速发送子状态
节点在进入 NM 快速发送子状态时,为了快速唤醒网络,节点必须以快速周期T_NM_ImmediateCycleTime 发送网络管理报文。发送的快速网络管理报文数量由参数 N_ImmediateNM_TIMES 决定,节点每次成功发送一条快速周期网络管理报文时,该数值应递减 1。
3.2.3.1.2 NM正常发送子状态
进入NM正常发送子状态后,节点必须以正常周期T_NM_MessageCycle发送网络管理报文。
3.3 常规操作状态
当节点因发生本地唤醒事件需要与网络上的其他节点进行通讯时,必须保持在常规操作状态,并且以正常周期 T_NM_MessageCycle 发送网络管理报文。在常规操作状态下,节点一旦接收或发送一条网络管理报文,或者 T_NM_TIMEROUT 超时,则 T_NM_TIMEROUT 应该立即重置。
在常规操作状态下,节点的网络管理报文和应用报文必须正常发送。
3.4 准备睡眠状态
节点进入准备睡眠后,必须停止发送网络管理报文。
在准备睡眠状态下,节点一旦接收到一条网络管理报文, T_NM_TIMEROUT应该立刻重置。 T_NM_TIMEROUT超时,节点的网络管理状态应进入预睡眠模式。
3.5 网络管理报文
AUTOSAR 网络管理报文结构如下表所示:
CAN ID | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 |
网络管理报文ID | ECU Address | Control Bit Vector | User Data 0 | User Data 1 | User Data 2 | User Data 3 | User Data 4 | User Data 5 |
CAN 网络管理报文 ID 范围从 0x500~0x53F(随便写的,根据实际情况可自定义,优先级适中即可),字节0为 ECU 源地址SA(source address);
网络管理报文数据场的字节 1 用于发送控制比特向量(Control Bit Vector),字节 2~7 用户自定义:
Byte1 | Control Bit Vector | 描述 |
Bit0 | 重复报文请求 | 0:未请求重复报文状态1:请求重复报文状态 |
Bit1 Bit2 Bit3 | 预留 | 预留位填充 0 |
Bit4 | 主动唤醒位 | 0:节点没有唤醒网络(被动唤醒) 1:节点已唤醒网络(主动唤醒) |
Bit5 Bit6 Bit7 | 预留 | 预留位填充 0 |
当控制器有重复报文请求,主动回到重复报文状态,并将重复报文请求位置 1;当该控制器离开重复报文状态,将重复报文请求位清零; 控制器由于其他条件(本地唤醒或接收到其他控制器重复报文状态位置 1 的 NM 报文)而回到重复报文状态,重复报文请求位保持 0。
当控制器由于本地唤醒进入重复报文状态时,主动唤醒位置 1,直到重新进入预睡眠模式时清零;当控制器由于远程 NM 报文唤醒,主动唤醒位保持 0。
3.6 网络管理常用参数
参数名称 | 标准值 | 允许误差 | 描述 |
T_REPEAT_MESSAGE | 根据实际要求各有不同 | 如果是ms级一般±10% | 节点对于网络上的其他节点的可视时间 |
T_NM_TIMEOUT | 只要节点进入网络模式就启动此定时器。当此定时器到期时,节点将进入预睡眠模式。 | ||
T_WAIT_BUS_SLEEP | 确保所有节点有时间停止其网络活动。 | ||
T_STARTx_AppFrame | 成功发送第一帧网络管理报文后开始发送应用报文最大间隔时间。 | ||
T_NM_ImmediateCycleTime | 快速发送子状态下,网络管理报文发送周期。 | ||
T_NM_MessageCycle | 正常发送子状态或者常规操作状态下,网络管理报文发送周期 | ||
N_ImmediateNM_TIMES | 快速发送子状态下,以周期时间 T_NM_ImmediateCycleTime 发送的网络管理报文数量。 | ||
T_START_NM_TX | 从预睡眠模式、准备睡眠模式和正常操作模式到重复报文模式开始发送第一帧网络管理报文的最大时间 | ||
T_WakeUp | 从睡眠模式进入网络模式,开始重复发送网络管理报文的最大时间 | ||
CANNM_WBS_TIMER | 从准备睡眠模式到预睡眠模式的时间。 |
四、状态迁移
4.1状态迁移图
图1 状态迁移图
4.1.1 状态迁移条件
NM_01
网络管理节点的上电后(Battery Power on),节点进行网络管理模块初始化,初始化完成后进入睡眠模式,具备被本地唤醒事件或者远程唤醒请求的能力。
NM_02
当网络管理节点处于睡眠模式时,如果收到有效的远程唤醒请求,那么节点必须离开睡眠模式并进入重复报文状态的 NM 正常发送子状态。
进入 NM 正常发送子状态后,在定时器 T_REPEAT_MESSAGE 超时前,节点必须以以 T_NM_MessageCycle 为周期发送网络管理报文。
NM_03
如果节点在睡眠模式下检测到本地唤醒请求,那么节点必须主动唤醒网络, 进入NM 快速发送子状态, 并将主动唤醒位设置为 1。
节点进入 NM 快速发送子状态后,需以 T_NM_ImmediateCycleTime 为周期,发送数量为 N_ImmediateNM_TIMES 的网络管理报文。
NM_04
处于 NM 快速发送子状态的节点,在计数器 N_ImmediateNM_TIMES 为零时,将进入 NM 正常发送子状态。
NM_05
处于重复发送状态下的节点,如果 T_NM_TIMEROUT 超时,节点的网络管理状态不应改变,但 T_NM_TIMEROUT 必须重置。
NM_06
处于 NM 正常发送子状态节点,当 T_REPEAT_MESSAGE 超时, 主动唤醒模式下,则进入常规操作状态。节点继续保持以正常周期 T_NM_MessageCycle发送网络管理报文和相关的应用报文。NM_07
处于常规操作状态的节点,如果节点自身有重复报文请求,节点将网络管理状态切换到重复报文状态的 NM 快速发送子状态; 如果节点收到其他节点重复报文请求位置 1 的 NM 报文,节点将网络管理状态切换到重复报文状态的 NM 正常发送子状态。
NM_08
处于常规操作状态下的节点,如果 T_NM_TIMEROUT 超时,节点的网络管理状态不应改变,但 T_NM_TIMEROUT 必须重置。
NM_09
处于常规操作状态下的节点,如果本身不需要网络,节点马上将网络管理状态切换到准备睡眠状态,同时停止发送网络管理报文,保持应用报文的发送和接受,每次接受到网络管理报文,重置T_NM_TIMEROUT定时器。
NM_10
处于准备睡眠状态的节点,如果检测到本地唤醒请求,则将网络管理状态切换到常规操作状态。
NM_11
处于准备睡眠状态的节点,如果节点自身有重复报文请求,节点将网络管理状态切换到重复报文状态的 NM 快速发送子状态;如果节点收到其他节点重复报文请求位置 1 的 NM 报文,节点将网络管理状态切换到重复报文状态的 NM 正常发送子状态。
NM_12
处于 NM 正常发送子状态下的节点,当 T_REPEAT_MESSAGE 超时,且自身无网络请求,节点将立即进入准备睡眠状态,并开启CANNM_WBS_TIMER定时器。
NM_13
处 于 准 备 睡 眠 状 态 的 节 点, 如 果 不 再 收 到 本 地 或 远 程 唤 醒 请 求 , 在CANNM_WBS_TIMER超时后,节点将进入预睡眠模式,进入预睡眠模式后开启T_WAIT_BUS_SLEEP 定时器 NM_14
处于网络模式的节点,在成功接收或者发送一帧网络管理报文后,节点的网络处于预睡眠模式的节点,如果收到远程唤醒请求,将进入重复报文状态的 NM 正常发送子状态。
NM_16
处于预睡眠模式的节点,如果收到本地唤醒请求,将进入重复报文状态的 NM 快速发送子状态。
NM_17
处 于 预 睡 眠 模 式 的 节 点 , 如 果 不 再 收 到 本 地 或 远 程 唤 醒 请 求 ,在T_WAIT_BUS_SLEEP 超时后,节点将进入睡眠模式。
五、故障处理
节点的网络管理所在的网络总线不可用时,必须执行如下行为:
如果节点没有准备好睡眠,但总线变得不可用,则不应该进入睡眠模式。
如果节点已准备好睡眠,但总线变得不可用,则应该进入睡眠模式。
如果总线不可用,但节点状态变为准备睡眠,则应该进入睡眠模式。
如果总线不可用,但节点状态变为未准备好睡眠,则不应该进入睡眠模式。
网络管理的故障处理不适用于已经处于睡眠模式的节点,因为在睡眠模式下无通信行为,此时总线不可用是难以检测到的。
六、CAN-BUSOFF处理机制(CANFM模块)
关于CAN总线的错误处理机制,即CANFM模块,后面单独开一篇文章更新~~