can⽹络管理(Autosar中的NM)
1、NM(⽹络管理)是⽤来做什么的;
不管是传统的燃油车还是新能源车,车上都有各种各样的ECU,⽽所有这些ECU都是需要⽤电的,⽽车上的供电单元⼀般是蓄电池,因此蓄电池的电量是有限的,对于新能源车来说太耗电⽆疑会给电池的续航⾥程带来巨⼤影响,因此为了尽可能的省电,所以就提出了⽹络管理,也就是说⽹络管理⼀个最重要的作⽤就是为了省电。
那么⽹络管理是如何来实现省电的呢?我们知道车上的所有ECU之间会通过CAN通信、Flexray或以太⽹等进⾏相互通信连接在⼀起,那么⽹络管理就是通过在各个ECU的⽹络上,发送⼀些命令制定⼀套规则,来实现各个ECU的协同睡眠和唤醒。
什么是ECU的睡眠和唤醒?为了⽀持睡眠和唤醒,ECU的芯⽚必须⽀持低功耗模式和正常⼯作模式的切换。低功耗模式(ECU睡眠)指⼀个ECU断电或者处于极少数的外围器件⼯作的模式;唤醒指的是ECU处于全⼯作模式。
总结下:其实⽹络管理就是⽤来节约能源,有效的实现车上的ECU的协同睡眠和唤醒。
AUTOSAR中⽹络管理主要使⽤了CAN接⼝(CanIf),并提供通⽤⽹络管理接⼝(NmIf)。CAN⽹络管理在CAN架构中所处的位置。
2. AutoSar中⽹络管理的原理;
我⽤⽐较多的CAN⽹络管理为例来进⾏说明,我会主要围绕其中最重要的⼀个状态机来进⾏介绍。
⽹络管理最终要实现的是车上的ECU能够协同睡眠以及唤醒,也就是说⽹络管理最重要的⼀点是要保证车上的ECU能够协同唤醒和休眠。那么假如车上的ECU都处于睡眠模式,⽹络上都没有报⽂,你咋实现唤醒呢,其实,⼀般不会让所有的ECU都处于睡眠模式,这个时候可能会有极少的ECU处于⼯作状态,⽐如车上的BCM。也就是说有⼀些ECU是通过KL15直接唤醒的,⽽有些是通过CAN报⽂唤醒。当然或许后⾯会升级到更加节能的模块,可以不需要钥匙信号,这些模块在睡眠状态时,耗能⾮常少,因此可以⼀直处于可唤醒状态。
唤醒请求(Wake Up Request)
唤醒请求可分为两种:
● 主动唤醒请求:来⾃模块内部对⽹络的请求。主动唤醒节点的⽹络管理报⽂必须先于应⽤报⽂发送。
● 被动唤醒请求:来⾃总线上其他模块对该模块的⽹络请求。被动唤醒的节点,发送⽹络管理报⽂和应⽤报⽂的先后顺序⽆特别要求。
⽹络状态(Network States)
节点的⽹络状态包括以下两种:
● ⽹络请求:模块需要主动与总线上其他节点进⾏信息交换时,它必须通过发送⽹络管理报⽂来请求⽹络,并将其⽹络状态设置为“⽹络请求”;
● ⽹络释放:模块不需要主动与总线上其他节点进⾏信息交换时,必须将其⽹络状态设置为“⽹络释放”;需要注意的是,在⽹络释放状态下模块仍可能因总线上的其他节点请求⽹络⽽与其进⾏信息交互。
总线唤醒(Bus wake up)
采⽤AUTOSAR CAN ⽹络管理⽅式的ECU必须选择符合 ISO 11898-5 标准的⾼速 CAN 收发器。若ECU处于低功耗模式,仅在总线上出现符合ISO 11898-5标准定义的唤醒序列,且该 ECU成功接收到该⽹段定义的唤醒报⽂时才能够被总线唤醒。这⾥这条唤醒报⽂必须是该⽹段中 ECU 的⽹络管理报⽂。
为了满⾜这种协同唤醒和睡眠,我们下⾯来看看Autosar中的NM是如何实现协同的。
如图所⽰,状态机中有三个主状态,分别是BusSleep睡眠模式、PreSleep预睡眠模式、Network⽹络模式三个状态;其中Network状态⼜分为三个⼦状态,分别是RepeatMsg重复报⽂状态、NormalOperate常规操作状态、ReadySleep准备睡眠状态。下⾯我来讲⼀下每个状态它的作⽤。
BusSleep睡眠模式:这个状态就是我们所说的休眠状态,这个状态下是不发送⽹络管理报⽂也不收发应⽤报⽂,⼀般该状态时⼀个低功耗的状态,也就是我们上⽂提到的协同睡眠状态。当然我们上电初始化时,也会默认进⼊该状态。(当节点没有主动⽹络唤醒及被动唤醒请求时,ECU 通信控制器切换⾄睡眠模式,ECU功耗降低⾄适当⽔平。在睡眠模式下,节点的⽹络管理报⽂和应⽤报⽂禁⽌发送,并且不能对总线上的报⽂进⾏ACK应答。同时节点在该模式下,如果检测到有效的唤醒源,节点必须被唤醒)。
PreSleep预睡眠模式:这个状态是进⼊休眠状态的前⼀准备状态,这个状态⼀般不发送⽹络管理报⽂帧了,也不发送应⽤报⽂了,只是等待其他ECU⼀起睡眠,为啥要这个状态呢,其实就是实现‘’协同‘’两个字,也就是让等⼀段时间让车上所有ECU实现⼀起睡眠,其实这个⼀起睡眠还是⽐较重要的,⽐如车上某个ECU的⼯作与其他ECU的⼯作是关联的,⽐如VCU(整车控制器)和INV(电机控制器),有可能VCU不发报⽂了,会导致INV报故障,因此这种情况是要避免的。(在预睡眠模式下,总线活动静⽌下来,最终达到总线上没有活动,ECU通信控制器状态处于⼯作模式。在该模式下,节点的⽹络管理报⽂和应⽤报⽂禁⽌发送,但应该对总线上的报⽂进⾏ ACK应答。节点的⽹络管理状态
必须保持预睡眠模式⼀段时间,⼀旦超时,⽹络管理状态应该离开预睡眠模式,进⼊睡眠模式。
Network⽹络模式:这个状态是允许ECU进⾏正常通信的,⼀般这个状态下即可以收发⽹络管理报⽂帧也可以收发应⽤报⽂(包括诊断报⽂),意思就是唤醒状态。接下来我来解释⼀下这个状态下⾥⾯的三个⼦状态的含义:
1、RepeatMsg重复报⽂状态:表⽰重复发⽹络管理报⽂的状态。重复报⽂状态包含两个⼦状态:⽹络管理报⽂快速发送状态和⽹络管
理报⽂正常发送状态。
NM PDU 快速发送状态:节点在进⼊NM PDU快速发送状态时,必须开启或重置NM-Timeout Timer,为了快速唤醒⽹络,必须以快速周期发送⽹络管理报⽂,同时不得发送正常周期⽹络管理报⽂;所有的应⽤报⽂必须在第⼀帧快速NM PDU报⽂发送开始后延迟⼀定时间才能发送。在NM PDU快速发送状态下,节点⼀旦接收或发送⼀条⽹络管理报⽂,或者NM-Timeout Timer超时,NM-Timeout Timer会⽴即重置。
NM PDU 正常发送状态:进⼊NM PDU 正常发送状态后,节点必须以正常周期发送⽹络管理报⽂。若
节点因被动唤醒请求进⼊NM PDU正常发送状态,必须开启NM-Timeout Timer,同时所有的应⽤报⽂必须从节点检测到唤醒请求后延迟Tx_Enable_Time 才能发送。在NM PDU正常发送状态下,节点⼀旦接收或发送⼀条⽹络管理报⽂,或者 NM Timeout Timer超时,NM Timeout Timer会⽴即重置。
节点的⽹络管理状态保持重复报⽂状态⼀段时间(这段时间⼀般可以配置),⼀旦超时,⽹络管理状态会离开重复报⽂状态。在该状态下,节点的⽹络管理报⽂和应⽤报⽂能够正常发送。
⼀般我们进⼊⽹络(Network)状态时,⾸先会进⼊这个状态,这个状态下会快速的发送⼀些⽹络管理报⽂帧出来,为啥要快速发送⼀些⽹络管理报⽂呢?其实就是想尽快的告诉车上的其他ECU,我上线了!我要正常通信了,⼤家请注意啊,⼤家也和我⼀块进⾏整车通信啊。就是以上这个意思。
2、NormalOperate常规操作状态:在进⼊RepeatMsg⼀段⼀时间后,如果需要通信,就会跳到正常⼯作状态,正常⼯作状态会按照
正常的周期发送⽹络管理报⽂以及所有应⽤报⽂正常进⾏通信,可以说这个状态就是真正的唤醒状态。(在常规操作状态下,节点⼀旦接收或发送⼀条⽹络管理报⽂,或者NM-Timeout Timer超时,NM-Timeout Timer应该⽴即重置。在该状态下,节点的⽹络管理报⽂和应⽤报⽂必须正常发送。)
3、ReadySleep准备睡眠状态:如果唤醒后,需要休眠,那么我们可能需要做⼀些准备⼯作才能允许我们的ECU进⼊休眠,⽐如这个
时候有⼀些数据要存储、⽐如电机控制器检测到电机还没停下来等等情况,因此这个状态就是⽤来做⼀些休眠前的准备⼯作,我们可以看到,任何从唤醒到休眠的过程,都需要经过这个状态,也就是说睡眠前有些准备⼯作是必须要完成的。那么这个状态下,其实还是能够进⾏通信的,只有进⼊PreSleep状态,才会把相应的应⽤报⽂收发关闭以及发送NM报⽂关闭。还有⼀点要声明的是,⼀般⽹络管理报⽂帧的接收不会关闭。(节点进⼊准备睡眠状态后,必须停⽌发送⽹络管理报⽂,所有的应⽤报⽂在NM Timeout Timer超时后必须停⽌发送。在准备睡眠状态下,节点⼀旦接收到⼀条⽹络管理报⽂,NM Timeout Timer会⽴刻重置。NM Timeout Timer超时,节点的⽹络管理状态应该进⼊预睡眠模式。)
3.⽹络管理报⽂(NM PDU)
AUTOSAR CAN ⽹络管理报⽂的数据场格式如下表所⽰:
源节点标识符(Source Node Identifier)
NM PDU的字节 0 ⽤于发送源节点标识符,每⼀个 ECU 都会被分配⼀个唯⼀的标识符,来告知接收节点该 NM PDU 是由哪个节点发送的。
控制⽐特向量(Control Bit Vector)
timeout on t2 timerNM PDU 的字节 1 被分配⽤于发送控制⽐特向量。其中:
bit 0 :重复报⽂状态请求位;
bit 3 :⽹络管理睡眠协调位;
bit 4 :激活唤醒位;
bit 6 :部分⽹络信息位;
其他bit位暂时预留。
⽤户数据域(User Data)
⽹络管理报⽂的字节 2 到字节 7 ⽤于发送⽤户⾃定义的数据信息,这些字节⽬前各项⽬为扩展预留,都被填充为‘0x00’。
4、⽹络管理状态切换(Network Management State Transition)
Condition_01
节点供电状态从电池off切换到电池on 后,节点必须进⾏⽹络管理模块CanNm初始化,初始化完成后节点必须进⼊睡眠模式,并且需要⽴即具备被主动唤醒请求或者被动唤醒请求唤醒的能⼒;
Condition_02
当节点处于睡眠模式时,如果收到有效的⽹络管理报⽂,那么节点将离开睡眠模式并进⼊重复报⽂状态中的NM PDU正常发送状态。进⼊NM PDU正常发送状态后,在计时器Repeat Message Timer超时以前,节点必须以正常周期发送⽹络管理报⽂。在节点收到⽹络管理报⽂时,它向总线发出的第⼀帧报⽂可以是⽹络管理报⽂也可以是应⽤报⽂。
Condition_03
如果节点在睡眠模式下检测到主动唤醒请求,那么节点必须发送⽹络管理报⽂来主动唤醒⽹络,在节点主动唤醒⽹络的过程中,必须⾸先进⼊NM PDU快速发送状态。当节点因主动唤醒请求需要唤醒⽹络时,必须快速发送连续NM PDU报⽂。
Condition_04
处于NM PDU快速发送状态的节点,在计数器为零时,节 点 将 进 ⼊NM PDU正常发送状态,并开始等待⼀段时间后以正常周期发送⽹络管理报⽂。
Condition_05
处于重复报⽂状态下的主动请求⽹络节点,如果Repeat Message Timer 发⽣超时,但节点的主动⽹络请求仍持续存在,节点必须进⼊常规操作状态。节点继续保持以正常周期发送⽹络管理报⽂和应⽤报⽂PDU。
Condition_06
处于常规操作状态的节点,如果释放所有的⽹络请求,不再需要主动请求⽹络,那么它必须⽴即将⽹络管理状态切换到准备睡眠状态,同时该节点必须⽴即停⽌发送⽹络管理报⽂。
Condition_07
处于准备睡眠状态的节点,如果检测到主动⽹络请求,节点必须⽴刻进⼊常规操作状态,同时必须开始以正常周期发送⽹络管理报⽂和应⽤报⽂PDU。
Condition_08
处于重复报⽂状态的NM PDU正常发送状态的节点,如果没有检测到主动⽹络请求,⼀旦 Repeat Message Timer超时,节点将进⼊准备睡眠状态。
Condition_09
处于准备睡眠状态的节点如果没有检测到主动⽹络请求,⼀旦NM Timeout Timer超时,节点将进⼊预睡眠模式。
Condition_10
处于预睡眠模式的节点,如果收到被动唤醒请求,节点将进⼊重复报⽂状态的NM PDU正常发送状态。
Condition_11
处于预睡眠模式的节点,如果检测到主动唤醒请求,节点将进⼊重复报⽂状态的NM PDU快速发送状态。
Condition_12
处于预睡眠模式的节点如果不再收到主动或被动唤醒请求,⼀旦Wait Bus-Sleep Timer超时,节点将进⼊睡眠模式。
Condition_13
在任何状态下发⽣电池掉电,节点都将进⼊关闭模式,不再拥有任何通信和⽹络管理的功能。AUTOSAR⽹络管理的算法与处理器⽆关,即它不依赖于任何处理器特定的硬件⽀持,因此可以在AUTOSAR范围内的任何处理器架构上实现。
5.状态转换的时序图
当唤醒请求(主动唤醒请求、被动唤醒请求)将节点的⽹络管理状态激活时,该节点的所有应⽤报⽂必须延迟⼀定时间后才能够开始发送。⽹络中的被唤醒节点⽹络管理报⽂的发送不受 延迟时间的限制,可以在它结束前发送,但⾸帧⽹络管理报⽂必须在节点进⼊重复报⽂状态后再延迟⼀定时间发送,以避免被唤醒节点同时发⽹络管理报⽂⽽形成⽹络拥堵。
NM信号发送的时序图

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。