AutoSar之CAN网络管理

本文首发于微信公众号“汽车控制与人工智能”欢迎关注。

今天整理下AUTOSAR中的CAN网络管理。

​AUTOSAR中网络管理主要使用了CAN接口(CanIf),并提供通用网络管理接口(NmIf)。CAN网络管理在CAN架构中所处的位置如图1,与其他模块的交互如图2。
在这里插入图片描述
图1 CAN架构
在这里插入图片描述
图2 网络管理和其他模块的联系

AUTOSAR网络管理基于分散的直接网络管理策略,这意味着每个网络节点仅依赖于通信系统中接收或传输的网络管理pdu来执行自给自足的活动。网络管理算法基于周期性的网络管理PDUs,通过广播传输被集群中的所有节点接收。接收网络管理PDUs表明发送节点希望保持网络管理集群处于唤醒状态。如果有节点准备进入总线休眠模式,它将停止发送网络管理PDU,但是只要接收到来自其他节点的网络管理PDU,它就会延迟向总线休眠模式的转换。如果由于不再接收网络管理PDU而导致计时器超时,则每个节点都将启动到总线休眠模式的转换。

如果网络管理集群中的任何节点需要总线通信,则可以通过传输网络管理PDU将网络管理集群从总线休眠模式中唤醒。

下面介绍几个相关的概念。

唤醒请求(Wake Up Request)

唤醒请求可分为两种:

● 主动唤醒请求:来自模块内部对网络的请求。主动唤醒节点的网络管理报文必须先于应用报文发送。

● 被动唤醒请求:来自总线上其他模块对该模块的网络请求。被动唤醒的节点,发送网络管理报文和应用报文的先后顺序无特别要求。

网络状态(Network States)

节点的网络状态包括以下两种:

● 网络请求:模块需要主动与总线上其他节点进行信息交换时,它必须通过发送网络管理报文来请求网络,并将其网络状态设置为“网络请求”;

● 网络释放:模块不需要主动与总线上其他节点进行信息交换时,必须将其网络状态设置为“网络释放”;需要注意的是,在网络释放状态下模块仍可能因总线上的其他节点请求网络而与其进行信息交互。

总线唤醒(Bus wake up)

采用AUTOSAR CAN 网络管理方式的ECU必须选择符合 ISO 11898-5 标准的高速 CAN 收发器。若ECU处于低功耗模式,仅在总线上出现符合ISO 11898-5标准定义的唤醒序列,且该 ECU成功接收到该网段定义的唤醒报文时才能够被总线唤醒。这里这条唤醒报文必须是该网段中 ECU 的网络管理报文。

理解上面几个概念后,我们可以看下AUTOSAR 网络管理模式(AUTOSAR Network Management Operational Modes)了,AUTOSAR网络管理(以下简称 CanNm)包含以下三种模式: 睡眠模式(Bus-Sleep Mode),预睡眠模式(Prepare Bus-Sleep Mode),网络模式(Network Mode) ,三种模式的切换过程如图3。

在这里插入图片描述
图3 网络管理状态切换图
睡眠模式

当节点没有主动网络唤醒及被动唤醒请求时,ECU 通信控制器切换至睡眠模式,ECU功耗降低至适当水平。在睡眠模式下,节点的网络管理报文和应用报文禁止发送,并且不能对总线上的报文进行ACK应答。同时节点在该模式下,如果检测到有效的唤醒源,节点必须被唤醒。

预睡眠模式

在预睡眠模式下,总线活动静止下来,最终达到总线上没有活动,ECU通信控制器状态处于工作模式。在该模式下,节点的网络管理报文和应用报文禁止发送,但应该对总线上的报文进行 ACK应答。节点的网络管理状态必须保持预睡眠模式一段时间,一旦超时,网络管理状态应该离开预睡眠模式,进入睡眠模式。

网络模式

网络模式可分为三种内部状态:

重复报文状态 (Repeat Message State)
常规操作状态 (Normal Operation State)
准备睡眠状态(Ready Sleep State)
重复报文状态

重复报文状态包含两个子状态:

网络管理报文快速发送状态
网络管理报文正常发送状态
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会立即重置。

节点的网络管理状态保持重复报文状态一段时间(这段时间一般可以配置),一旦超时,网络管理状态会离开重复报文状态。在该状态下,节点的网络管理报文和应用报文能够正常发送。

常规操作状态

当节点处于网络模式因主动网络请求需要与网络上其他节点继续进行通信时,必须保持在常规操作状态。在常规操作状态下,节点一旦接收或发送一条网络管理报文,或者NM-Timeout Timer超时,NM-Timeout Timer应该立即重置。在该状态下,节点的网络管理报文和应用报文必须正常发送。

准备睡眠状态

节点进入准备睡眠状态后,必须停止发送网络管理报文,所有的应用报文在NM Timeout Timer超时后必须停止发送。在准备睡眠状态下,节点一旦接收到一条网络管理报文,NM Timeout Timer会立刻重置。NM Timeout Timer超时,节点的网络管理状态应该进入预睡眠模式。

网络管理报文(NM PDU)

网络管理报文格式(NM PDU structure)

AUTOSAR CAN 网络管理报文的数据场格式如下表所示:
在这里插入图片描述

源节点标识符(Source Node Identifier)

NM PDU的字节 0 用于发送源节点标识符,每一个 ECU 都会被分配一个唯一的标识符,来告知接收节点该 NM PDU 是由哪个节点发送的。

控制比特向量(Control Bit Vector)

NM PDU 的字节 1 被分配用于发送控制比特向量。其中:

bit 0 :重复报文状态请求位;

bit 3 :网络管理睡眠协调位;

bit 4 :激活唤醒位;

bit 6 :部分网络信息位;

其他bit位暂时预留。
在这里插入图片描述

用户数据域(User Data)

网络管理报文的字节 2 到字节 7 用于发送用户自定义的数据信息,这些字节目前各项目为扩展预留,都被填充为‘0x00’。

网络管理状态切换(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范围内的任何处理器架构上实现。

状态转换的时序图

当唤醒请求(主动唤醒请求、被动唤醒请求)将节点的网络管理状态激活时,该节点的所有应用报文必须延迟一定时间后才能够开始发送。网络中的被唤醒节点网络管理报文的发送不受 延迟时间的限制,可以在它结束前发送,但首帧网络管理报文必须在节点进入重复报文状态后再延迟一定时间发送,以避免被唤醒节点同时发网络管理报文而形成网络拥堵。

在这里插入图片描述
NM信号发送的时序图
在这里插入图片描述
NM信号接收的时序图
在这里插入图片描述
NM协调过程
在睡眠的过程中,一旦NM Timeout Timer超时,节点所有的应用报文必须立刻停止发送。

上图描述的案例是针对单一主动唤醒请求触发的唤醒与睡眠过程,当多个唤醒请求交错发生时,各唤醒请求必须遵守各自的定时参数,不会互相影响。

文中名词解释:

AUTOSAR:AUTOmotive Open System Architecture, 汽车开放系统架构

CAN:Controller Area Network, 控制器局域网

NM:Network Management, 网络管理

NM PDU:Network Management protocol data unit, 网络管理协议数据单元

CanIf:CAN Interface CAN接口

CanNm:CAN Network Management CAN网络管理

CBV:Control Bit Vector 控制比特向量

DTC:Diagnostic Trouble Code诊断故障码

CWU:Car Wakeup 整车唤醒

ERA:External Request Array 外部请求数组

EIRA:External and Internal Request Array 外部和内部请求数组

PNC:Partial Network Cluster 部分网络集

PNI :Partial Network Information 部分网络信息

作者简介:

Demu,传统汽车电控向智能驾驶转变的汽车人。从事发动机控制器系统工程师和软件工程师多年,有丰富的ECU系统和软件设计经验。欢迎大家一起留言交流,共同进步。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章