OSEK 网络管理之认识NM报文

OSEK 网络管理之认识NM报文

前言

关于OESK网络管理睡眠的文章有很多, 大多只有文字的介绍。笔者是汽车测试人员, 认为真实的log分析会更有利于初学者理解。 如有问题, 欢迎指正。

1. 网络管理协议数据单元(NM Protocol Data Unit)结构

所有的网络管理报文都包含协议数据单元(NM protocol data unit, 即NMPDU),NMPDU 包含了网络管理的相关信息。如下图:
NMPDU

1.1 Source

 源头是发送节点的网络地址。如图发送节点的地址为400+4F;

在这里插入图片描述

1.2 Destination

destination字段包含逻辑后继者的NM地址。 如果没有逻辑后继着, Destination就是该节点自己的地址;如图目的地址是400+20;
在这里插入图片描述

1.3OpCode

有几种基础的NM报文类型:
*Alive message
Alive报文有以下三种使用情形:
1)开始阶段:如果一个ECU需要和其他ECU通讯或者接受到其他ECU的通讯请求, 该ECU会发送一个alive报文来注册到逻辑环。
在这里插入图片描述

2)正常阶段:如果一个ECU发现它在逻辑环中被跳过了, 它会重新发送alive报文以注册到逻辑环。
3)错误情况:如果一个ECU发现了其他ECU出现错误(在T[max]时间内没有收到ring报文), 那么该ECU会发送一个alive报文来重新发起逻辑环。
*Ring message
在正常情况下,ECUs 会根据OSEK标准周期地发送ring报文。
在这里插入图片描述

*Limp home message
在出现错误的情况下ECU 会进入到跛行模式。
在这里插入图片描述

OpCode 的定义如下图:
在这里插入图片描述
DBC里信号定义如下:
在这里插入图片描述
总结: NM 报文类型有如下几种
在这里插入图片描述
在这里插入图片描述

2. NM报文长度

NM报文的长度定义为8Byte。

3. 数据位(Data Byte)

NM 报文的Byte3 ~Byte8 是用来表示网络相关的信息, 不表示应用数据。
当网络处于清醒状态时,网络中的每个ECU都应随时支持用户数据服务 。
供应商会提供特定的ECU用户数据, 一般包含以下2种:
*应用报文清醒原因(wakeup reason)

ECU会发送被唤醒的原因。被CAN通讯唤醒的ECU会发送唤醒原因:被网络唤醒;
被应用程序唤醒的ECU会发送唤醒原因: 为什么会被应用唤醒;
该bit大多数由OEM定义。
*CAN保持唤醒原因(reason keeping CAN bus awake)
ECU 会在跛行报文或者Ring报文上发送阻止ECU睡眠的原因。ECU会发送保持CAN网络唤醒的清醒状态的原因直到ECU把Sleep.Ind 位置1。
该bit大多数由OEM定义。

4. NM CAN ID

CAN ID = base address + node address. 基础址是0x400。 节点地址是0x00~0x3F .CAN ID 在这个区间的报文都会被其他ECU视为网络管理报文并执行正确的动作。每一个ECU有它独一的NM CANID.
在这里插入图片描述

5. ECU与网络之间的编码

NMPDU和CAN报文的转换如下图所示。 该转换由每个ECU内部的NM模块完成。
在这里插入图片描述

6. 总结

该文主要介绍了OSEK 网络管理报文的结构和常见的报文类型, 为下面了解网络管理功能打基础。

### 关于 AUTOSAR NM 报文配置 在 AUTOSAR 中,网络管理 (NM) 报文的配置涉及多个方面,包括报文生成函数的位置以及 Nm 的具体参数设置。为了确保在网络初始化阶段能够正确发送 NM 报文,通常会将 NM 报文生成函数集成到网络管理层中[^1]。 #### 配置 NM 参数 Nm 的配置不仅限于简单的参数设定;它还涉及到调整总线专用 NMs 中可选特性的支持情况。当某些特性未被 Nm 协调器使用时,NM 只充当一个直通接口层的角色。这意味着如果启用了这些不必要的特性,则主要影响的是控制 API 函数和来自底层硬件抽象层(HAL) 或者其他驱动程序提供的回调机制之间的交互方式[^2]。 对于 CAN 总线来说,具体的配置项可能包括但不限于: - **NmTimeout**:定义节点等待响应的最大时间长度; - **NmRepeatMessageCycleTime**:指定重复传输相同消息的时间间隔; - **NmBusOffRecoveryMode**:决定如何处理总线下线恢复模式下的行为。 #### 实现示例 下面是一个简化版的例子来展示如何通过 C 语言代码实现基本的 NM 报文配置: ```c // 定义结构体用于存储 NM 配置数据 typedef struct { uint8_t timeout; uint16_t repeatMsgCycleTime; } NmConfigType; void configureNm(NmConfigType *config){ config->timeout = 5; // 设置超时时间为 5 秒钟 config->repeatMsgCycleTime = 200; // 设定每 200ms 发送一次心跳包 } ``` 此段代码展示了如何创建并填充 `NmConfigType` 结构体实例以完成最基本的 NM 参数配置工作。实际应用中还需要考虑更多细节,并遵循项目特定的要求来进行更复杂的定制化操作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值