AUTOSAR Network Management

最近在学习AUTOSAR Network Management,所以记下详细笔记,也分享一下学习过程。

有什么不对的地方还请大神指正。

概述

AUTOSAR CanNm是基于权利分散的直接网络管理。每个网络节点的状态只取决于该节点接收到和发送的NMPDUs。

AUTOSAR CanNM的核心思想主要归纳为以下两条:

1.  如果节点需要保持通信,则节点需要周期的发送NMPDUs,否则停止发送NMPDUs

2.     如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。

工作模式和状态

CanNm一共有三个工作模式

1.  Network Mode

2.  PrepareBus-Sleep Mode

扫描二维码关注公众号,回复: 5276144 查看本文章

3.  Bus-Sleep Mode

模式的改变应该通过回调函数通知上层。
三种模式的切换关系见下图:

下面单独说每种模式

Network Mode

Network Mode又包括三个内部状态

1. Repeat Message State 
2. Normal Operation State 
3. Ready Sleep State

下图为三种状态的切换图

Repeat Message State

这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点发现。这个状态可以用来检测总线上的节点。
当进入Repeat Message State时,节点应该开始传送NMPDUs。
在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。
CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。
当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。

Normal Operation State

这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该发送NMPDUs。
在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。
如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。
如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。

ReadySleep State

这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。
如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。
如果该节点需要使用总线,则节点进入Nomal Operation State。
如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。

PrepareBus-Sleep Mode

这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为发送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。

当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。

在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。


Bus-SleepMode

Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。

当进入Bus-Sleep Mode时候,应该通知上层应用。

在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。

如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。
--------------------- 
作者:dw115856 
来源:CSDN 
原文:https://blog.csdn.net/dw115856/article/details/77266745 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/u012252959/article/details/86641115