注意:本文仅用作日常学习记录,由于技术有限,如有理解错误,后期会不定期更新
AutoSar网络管理理解
1、AutoSar网络管理时间参数
参数名称 | 标称值 | 冗余 | 描述 |
T_REPEAT_MESSAGE | 1600ms | +/-10% | 网络上的其他节点可以通过接收网络管理报文或自身上电来唤醒的最小时间 |
T_NM_TIMEOUT | 2000ms | +/-10% | 只要节点进入网络模式并启动此定时器(成功接收或者发送一帧NM报文后,T_NM_TIMEROUT应该重置),当此定时器到期时,节点将进入预睡眠模式。 |
T_WAIT_BUS_SLEEP | 2000ms | +/-10% | 确保所有节点有时间停止其网络活动定时器。 |
T_STARTx_AppFrame | 20ms | +/-10% | 成功发送第一帧网络管理报文后开始发送应用报文最大间隔时间。 |
T_NM_ImmediateCycleTime | 20ms | +/-10% | 快速发送子状态下,网络管理报文发送周期。 |
T_NM_MessageCycle | 500ms | +/-10% | 正常发送子状态或者常规操作状态下,网络管理报文发送周期 |
N_ImmediateNM_TIMES | 10次 | - | 快速发送子状态下,以周期时间T_NM_ImmediateCycleTime = 20ms发送的网络管理报文数量。 |
T_START_NM_TX | 10ms | +/-10% | 从预睡眠模式进入网络模式开始发送第一帧网络管理报文的时间 |
T_WakeUp | 100ms | +/-10% | 从睡眠模式进入网络模式,开始发送网络管理报文的时间 |
注意:不同主机厂定义的各时间参数会有不同。
2、协议状态机内容
概述:AutoSar网络管理的机制是所有节点同睡同醒,需要通信就发网络管理报文,不需要就停止发送。它的状态机有三种模式 :睡眠模式(Bus Sleep Mode),预睡眠模式(Prepare Bus Sleep Mode),网络模式(Network Mode),网络模式又有三种状态:重复报文状态(Repeat Message State),常规操作状态(Normal Operation State),准备睡眠状态(Ready Sleep State)。
3、网络管理报文数据格式
NM Message ID = NM Control Frame Base Address + ECU Address
网络管理报文的数据格式:
Byte 0 | ECU Address |
Byte 1 | Control Bit Vector |
Byte 2 | User Data 0 |
Byte 3 | User Data 1 |
Byte 4 | User Data 2 |
Byte 5 | User Data 3 |
Byte 6 | User Data 4 |
Byte 7 | User Data 5 |
Byte 1的Control Bit Vector定义如下:
Byte1 | Control Bit Vector | 描述 |
bit0 | Repeat Message Request(请求重复状态位) | 0: Repeat Message State not requested 1: Repeat Message State requested |
bit1 | Reserve | |
bit2 | Reserve | |
bit3 | NM Coordinator Sleep Ready Bit | 0: Start of synchronized shutdown is not requested by main coordinator 1: Start of synchronized shutdown is requested by main coordinator |
bit4 | Active Wakeup Bit(本地主动唤醒) | 0: Node has not woken up the network (passive wakeup) 1: Node has woken up the network (active wakeup) |
bit5 | Reserve | |
bit6 | Partial Network Information Bit | 0: NM PDU contains no Partial Network request information 1: NM PDU contains Partial Network request information |
bit7 | Reserve |
4、各状态转换分析
状态转换过程分析:
(a)过程:ECU上电(KL30)后,进入初始化,初始化完成后进入Bus Sleep Mode(睡眠模式),此时ECU具有被本地事件唤醒得能力,等待自需本地唤醒事件(KL15电)或收到远程网络管理报文唤醒。
(b)过程:由Bus Sleep Mode(睡眠模式)进入Repeat Message State(重复报文发送状态),根据唤醒条件得不同(自需本地唤醒或者收到远程管理报文唤醒),在Repeat Message State(重复报文状态)有两种子状态,NMF快速发送状态和NMF正常发送状态。
(1)NMF快速发送状态:若ECU是以自需本地唤醒,节点主动唤醒网络进入Repeat Message State(重复报文发送状态),在T_REPEAT_MESSAGE超时内,以T_NM_ImmediateCycleTime周期发送N_ImmediateNM_TIMES帧网络管理报文来唤醒其他控制器,此时CBV满足bit4置1。
(2)NMF正常发送状态:若ECU收到网络管理报文,节点被动唤醒网络进入Repeat Message State(重复报文发送状态),在T_REPEAT_MESSAGE超时内,按照T_NM_MessageCycle周期正常发送网络管理报文,此时CBV满足bit0置0。
(c)过程:在Repeat Message State(重复报文状态)下,经过CANNM_REPEAT_MESSAGE_TIME时间超时,同时自身持续有本地唤醒需求来维持通信,就进入到到Normal Operation State(常规操作状态)。
(d)过程:在Repeat Message State(重复报文状态)下,经过CANNM_REPEAT_MESSAGE_TIME时间超时,自身是通过网络管理报文被动唤醒,确定此时无需维持通信需求,就进入到Ready Sleep State(准备睡眠状态),同时停止发送网络管理报文,应用报文正常发送。
( e )过程:处于Ready Sleep State(准备睡眠状态)下,若ECU检测到本地唤醒或者收到网络管理报文来继续维持通信,则进入到Normal Operation State(常规操作状态),如果是本地唤醒,需要以T_NM_MessageCycle为周期发送网络管理报文,此时CBV的bit4置1。
( f )过程:处于Normal Operation State(常规操作状态)下,ECU检测到本地无需求,不再需要维持通信,网络满足请求睡眠条件,则进入到Ready Sleep State(准备睡眠状态),同时停止发送网络管理报文,应用报文正常发送。
注意:对于需要协调多个AUTOSAR网络管理子网的网关,其处于常规操作状态下,如果监测到自身满足睡眠条件,并在满足准备睡眠条件后2s(TBD)内未收到其他节点的NM报文,则将网络管理状态切换到准备睡眠状态,同时停止发送NM报文。
(g)过程:在Ready Sleep State(准备睡眠状态)下,在ECU没有检测到本地唤醒或者没有收到网络管理报文,T_NM_TIMEOUT超时,则进入到Prepare Bus Sleep Mode(预睡眠状态),此时应用报文和网络管理报文同时停发。
(h)过程:处于Prepare Bus Sleep Mode(预睡眠状态)状态下,ECU没有检测到本地唤醒或者没有收到网络管理报文,在CANNM_WAIT_BUS_SLEEP_TIME超时后,进入Bus Sleep Mode(睡眠模式)。
(i)过程:处于Prepare Bus Sleep Mode(预睡眠状态)状态下,ECU检测到本地需求唤醒,则进入到Repeat Message State(重复报文状态)NMF快速发送状态,且在T_START_NM时间内发出第一帧NM报文。ECU接收到网络管理报文,则进入到Repeat Message State(重复报文状态)NMF正常发送状态。
(j)处于Normal Operation State(常规操作状态)下,如果自身有重复报文状态请求位置1或者其他网络管理报文请求重复状态位置1,则进入重复报文状态,ECU在T_START_NM_TX时间内发网络管理报文byte1=0X10(bit置1是因为主动唤醒),之后正常发送。
5、各状态报文收发情况
状态 | NM | App | |||
Tx | Rx | Tx | Rx | ||
Bus Sleep Mode(睡眠模式) | N | Y | N | N | |
Prepare Bus Sleep Mode(预睡眠模式) | N | Y | N | N | |
Network Mode(网络模式) | Repeat Message State(重复报文状态) | Y | Y | Y | Y |
Normal Operation State(常规操作状态 | Y | Y | Y | Y | |
Ready Sleep State(准备睡眠状态) | N | Y | Y | Y |
实际CANOE报文观察
网络管理报文唤醒:唤醒之后进入Repeat Message State(重复报文状态)NMF正常发送状态,之后自身无需求进入Ready Sleep State(准备睡眠状态),等待时间进入睡眠。
本地唤醒:接通KL15,进入Repeat Message State(重复报文状态)NMF快速发送状态,进入到Normal Operation State(常规操作状态),之后一直保持本地唤醒,断开KL15,由Normal Operation State(常规操作状态)进入到Ready Sleep State(准备睡眠状态),等待睡眠。
OSEK直接网络管理理解
1、概述
NMPDU包括源地址(407)、目标地址(07)、操作码(01),其中操作码中会有Alive、Ring、LimpHome、Sleep Indication(睡眠指示位)、Sleep Acknowledge(睡眠确认位)的标识。
网络管理具体的功能有保证网络同步进入睡眠状态、网络启动后确定网络配置、运行过程中监控网络配置、提供网络状态信息、网络故障的处理,而网络管理的重要任务就是确保ECU之间交流的安全和可靠。OSEK NM 提供了两种可选的监控机制,直接网络管理和间接网络管理。直接NM通过令牌环实现网络状态的监控,通过发送网络管理报文每一个节点被其它节点监控。间接网络管理是通过监控应用报文监控间接监控节点与网络的状态,网络中的每个节点必须周期性发送报文。
2、OSEK网络管理时间参数
3、OSEK协议数据单元定义
CAN ID = NM Base ID + NM ID(ECU地址)
(1)Alive报文(OpCode=0x01/0x11)
开始阶段:如果一个ECU准备通过CAN进行通信或者检测其他ECU的通信请求,需要发 送 alive 报文在逻辑建环中进行注册;
运行阶段:如果ECU检测到自己被跳过,则再次发送发送alive报文在逻辑建环中进行注册;
错误状态:如果ECU检测到其他节点的错误(T[max]时间内没收到Ring报文)会再次发送alive报文在逻辑建环中进行注册;
(2)Ring报文(OpCode=0x02/0x12/0x32)
用来向后继节点传递报文,用来形成逻辑环。
自身满足睡眠条件,则置位Sleep.ind=1(OpCode=0x12)
所有节点满足睡眠条件,则置位Sleep.ack=1(OpCode=0x32)
(3)Limphome报文(OpCode=0x04/0x14)
当接收/发送错误计数器超过其阈值时,节点进入跛行状态,并以TError周期发送 LimpHome报 文。
当自身满足睡眠条件,置位Sleep.ind=1(OpCode=0x14)
4、OSEK直接网络管理遵循规则
1、基于“令牌环”,令牌环从NMID小的节点,传递到NMID大的节点,此时若没有更大的NMID,则传输到最小NMID的节点,形成闭环。
2、当控制器不知道指向谁时,则指向自己。
3、如果一个ECU准备通过CAN进行通信或者检测其他ECU的通信请求,需要发送Alive报文在逻辑建环中进行注册。
4、如果ECU检测到自己被跳过(逻辑环数量大于2),则再次发送alive报文在逻辑建环中进行注册(如果此时逻辑环为两个节点,则发送指向另一个节点的Ring报文)。
5、如果ECU检测到其他节点的错误(T[max]时间内没收到Ring报文)会再次发送alive报文在逻辑建环中进行注册。
6、当控制器发完alive报文后T[typ]=100ms内没有收到Ring报文,就自己发送一帧Ring报文。
7、当收到一帧指向自己的Ring报文时,启动T[typ]=100ms定时器,定时器结束后,发送一帧指向后续节点的Ring报文。
8、当控制器发送完一帧Ring报文之后,会启动一个T[max]=260定时器,在T[max]=260时间之内没有收到Ring报文,接收错误定时器+1,重启控制器,并发送一个指向自己的Alive报文。当接收/发送错误计数器超过其阈值(4次)时,节点进入跛行状态,并以TError周期发送 LimpHome报文。
9、在发送完32指令报文后,会等待T[WBS]=1500ms时间后,再确认没有其他网络管理信号后,进行全体休眠。
10、DUT接收到未指向自身的Ring报文后(未检测到被跳过),应重置TMax定时器,TMax定时器未超时时不应发送任何网络管理报文,TMax定时器超时后应发送SI=0的Alive报文。
11、DUT在TTyp定时时间内接收到指向自身的Ring报文时,应重置TTyp定时器,TTyp定时器超时后发送自身Ring报文。
5、OSEK直接网络管理状态机跳转图
状态解释:
- NM Init:完成初始化(主要是硬件初始化),清空储存器,此状态短暂。
- NM Reset:复位
- NM Awake——一般情况,节点长期保持的状态,网络管理通信正常进行。其子状态包括NM Reset、NM Normal、NM LimpHome三个状态,NM Reset:软件初始化,发送Alive报文。NM Normal:周期性发送/接收Ring报文,检测节点状态和网络配置的变化,向应用程序提交Normal配置和LimpHome配置,NM LimpHome:此状态为跛行状态,此状态下节点不能正常发送/接收网络管理报文,同时节点会周期性的发送LimpHome报文。
- NM Bus Sleep——睡眠状态,网络管理通信停止
- NM Active——节点参与网络管理
- NM Passive——节点不参与网络管理,但仍会监视网络活动
各状态之间的跳转:
- NM Init—NM Awake的转化是在初始化完毕,自然完成
- NM Reset:软件初始化,发送Alive报文
- NM Reset→NM Normal:收到Ring报文或者在tT[typ]=100ms之后发送Ring报文,能正常发送和接收
- NM Normal → NM Reset:Ring报文接收超时(当控制器发送完一帧Ring报文之后,会启动一个T[max]=260定时器,在T[max]=260时间之内没有收到Ring报文)
- NM Reset → NM LimpHome:NM报文多次不能正常发送和接收Ring报文(当控制器发送完一帧Ring报文之后,会启动一个T[max]=260定时器,在T[max]=260时间之内没有收到Ring报文,接收错误定时器+1,重启控制器,并发送一个指向自己的Alive报文。当接收/发送错误计数器超过其阈值(4次)时,节点进入跛行状态,并以TError周期发送 LimpHome报文)。
- NM LimpHome → NM Reset:LimpHome报文发送成功且收到其他任何节点的NM报文
- NM Normal → NM LimpHome:NM报文多次发送失败
- NM Normal Active→NM Normal Active Prep Sleep:自身满足休眠条件,同时发送Sleep Indication(睡眠指示位)=1成功。
- NM Normal→NM wait Bus Sleep Normal:收到Sleep Acknowledge(睡眠承认位)位=1,等待总线休眠
- NM LimpHome →NM wait Bus Sleep LimpHome:收到Sleep Acknowledge(睡眠承认位)位=1,等待总线休眠
- NM wait Bus Sleep Normal→NM Reset:收到Sleep Indication(睡眠指示位)=0的报文。
- NM wait Bus Sleep LimpHome→NM LimpHome :收到Sleep Indication(睡眠指示位)=0的报文。
- NM wait Bus Sleep Normal→NM Bus Sleep:T[WBS]=1500ms超时进入NM Bus Sleep。
- NM wait Bus Sleep LimpHome→NM Bus Sleep:T[WBS]=1500ms超时进入NM Bus Sleep
- NM Bus Sleep→NM init:有本地唤醒需求或者收到网络管理报文。
AutoSar网络管理和OSEK网络管理的区别
相同点
1、都属于直接网络管理。
2、网络管理的目的都是协调各节点同步进入休眠及唤醒(主要是休眠)。
3、都依靠特定的网络管理CAN报文,每个节点的网络管理ID都不一样。
4、唤醒方法相同,第一个唤醒的节点发送网络管理帧即同时唤醒其它节点。
不同点
1、唤醒网络管理报文类型不同:
- 网络唤醒后,OSEK要求节点发出的第一帧必须是Alive报文类型,不能是Ring, Limphome等报文。
- AutoSar只要求是规定标识符的网络管理报文。
- OSEK网络管理有间接网络管理,通过应用报文唤醒,无NM报文。
2、休眠规定不同
OSEK网络管理遵循同步休眠过程:
1、如果逻辑环中有节点想休眠,就设置Ring报文中的Sleep.Ind指示位=1。
- 2、当逻辑环中所有的节点都设置了Sleep.Ind指示位,也意味着任何节点接收到所有其它节点的Sleep.Ind指示位。
- 3、逻辑环中所有的节点设置Sleep.Ack指示位=1
- 4、任何节点接收到所有其它的节点的Sleep.Ack指示位=1
- 5、所有节点同步进入等待睡眠状态
- 6、tWaitBusSleep=1500ms时间内没有收到唤醒时间,所有节点同步进入睡眠状态。
AutoSar基于分布式休眠过程:
- 每个节点根据通信系统中发送或者接收到的NM消息来执行自给自足的网络活动。NM消息通过广播发送,所有网络中的所有节点都可以接收到。接收到NM消息表示发送这个NM消息的节点倾向维持网络工作模式(NETWORK MODE)。如果有节点准备好进入总线睡眠模式 (BUS SLEEP MODE),它就停止发送NM消息,但是只要它还能够接收到从其他节点发来的NM消息,它就延迟到总线睡眠模式的变迁。最终,在一定的时限内,由于不再接收到NM消息,每个节点都启动到总线睡眠模式的变迁。如果网络中的任何节点需要总线通信,它可以通过发送NM消息使网络从来总线睡眠模式中唤醒。
- 概括如下:
1、每个网络节点如果想保持总线通信,就会一直发送周期性的NM消息;如果它不再需要保持总线通信,它就不再发送NM消息。
2、如果总线通信在一段时间内没有发送或者接收到NM消息,则执行到Bus-Sleep模式的转移,进入休眠状态。
3、PDU结构不同
- OSEK网络管理报文PDU包括自己源地址,目标地址(下一个令牌环目标),Opcode操作码。
- AutoSar网络帧PDU只包括自己地址,以及少量的操作位,在Control Bit Vector中设置。