AUTOSAR图解==>AUTOSAR_SWS_SAEJ1939NetworkManagement

AUTOSAR SAE J1939 网络管理模块详解

基于AUTOSAR标准的J1939网络管理实现原理与应用

目录


1. 概述

1.1 J1939网络管理简介

SAE J1939是一种广泛应用于重型车辆、农业机械和工程机械的CAN总线通信协议。与传统AUTOSAR网络管理不同,J1939网络管理的主要目标不是处理ECU的休眠和唤醒,而是为每个ECU分配唯一的网络地址。

在J1939网络中,每个ECU通过发送AddressClaimed消息来声明其网络地址。如果多个ECU尝试使用相同地址,具有更高优先级的ECU将保留此地址,而其他ECU必须放弃地址并发送CannotClaimAddress消息。优先级由64位的NAME值决定,NAME值越小优先级越高。

J1939标准定义了地址范围从0到253(0x00-0xFD)的可用网络地址,其中254(0xFE)被保留用作空地址(NULL),255(0xFF)用作全局地址。

1.2 J1939Nm在AUTOSAR中的定位

AUTOSAR J1939 Network Management模块(J1939Nm)实现了J1939协议中的网络管理功能,主要负责:

  • 处理AddressClaimed和CannotClaimAddress消息的发送与接收
  • 管理网络状态转换和通知
  • 处理地址冲突情况
  • 响应地址请求
  • 确保ECU在地址声明前或地址丢失后不发送其他消息

J1939Nm是AUTOSAR通信栈的基础软件模块,位于通信层,与其他模块如通信管理器(ComM)、基础软件模式管理器(BswM)、网络管理接口(Nm)等协同工作。


2. 架构设计

2.1 J1939Nm模块架构

J1939Nm模块在AUTOSAR分层架构中的位置及其与其他模块的关系如下图所示:

在这里插入图片描述

2.2 与其他模块的交互

J1939Nm模块与其他AUTOSAR基础软件模块有以下主要接口:

  1. 提供的接口

    • 初始化接口J1939Nm_Init()J1939Nm_DeInit()
    • 网络管理接口J1939Nm_NetworkRequest()J1939Nm_NetworkRelease()J1939Nm_GetState()
    • 地址管理接口J1939Nm_PassiveStartUp()J1939Nm_GetBusOffDelay()
    • 回调接口J1939Nm_RxIndication()J1939Nm_TxConfirmation()J1939Nm_RequestIndication()
  2. 调用的接口

    • CAN接口CanIf_Transmit()
    • 网络管理通知Nm_StateChangeNotification()Nm_NetworkMode()Nm_BusSleepMode()
    • 模式管理通知BswM_J1939Nm_StateChangeNotification()
    • 诊断接口Dem_SetEventStatus()Det_ReportError()

J1939Nm模块的主要功能包括:

  • 管理J1939网络地址声明
  • 处理地址冲突
  • 响应地址请求
  • 确保ECU在地址声明前或地址丢失后不发送消息

从架构上看,J1939Nm位于通信层,直接与CanIf、Nm、J1939Rm等模块交互,同时也接收来自服务层的ComM和BswM的请求和通知。这种分层设计确保了模块间的清晰边界和标准化接口。


3. 状态管理

3.1 网络管理状态机

J1939Nm模块实现了一个状态机来管理ECU在J1939网络中的状态。下图展示了J1939Nm的内部状态转换:

在这里插入图片描述

3.2 状态转换流程

J1939Nm状态机包含以下主要状态:

  1. SleepMode(NM_MODE_BUS_SLEEP)

    • ECU初始化后的默认状态
    • 此状态下ECU的网络功能处于休眠状态
    • 通过J1939Nm_Init()进入此状态
  2. NetworkMode(NM_MODE_NETWORK)

    • 包含Offline和NormalOperation两个子状态
    • 通过J1939Nm_NetworkRequest()从SleepMode切换到此状态
    • 切换时,会触发AddressClaimed消息的发送并通知Nm接口
  3. Offline状态

    • Claiming子状态

      • 当配置了启动延迟(J1939NmNodeStartUpDelay)时,节点进入此状态
      • 发送AddressClaimed消息后等待250ms,检测是否有地址冲突
      • 延时结束后自动切换到NormalOperation状态
    • AcLost子状态

      • 当收到更高优先级(NAME值更小)的相同地址声明时,进入此状态
      • 进入该状态后发送CannotClaimAddress消息(源地址=0xFE)
      • 通知BswM和Nm接口当前状态为OFFLINE
  4. NormalOperation(NM_STATE_NORMAL_OPERATION)

    • ECU已成功获取网络地址,可以正常通信
    • 如果未配置启动延迟,在网络请求后直接进入此状态
    • 如果配置了启动延迟,在Claiming状态250ms延时后进入此状态

状态转换过程中的关键点:

  • 每次状态变化都会通知BswM(通过BswM_J1939Nm_StateChangeNotification()
  • 通道级别的状态变化会通知Nm接口(通过Nm_StateChangeNotification()
  • 从NetworkMode返回SleepMode由J1939Nm_NetworkRelease()触发
  • 地址冲突会导致从NormalOperation切换到AcLost状态

这种状态管理机制确保了ECU在J1939网络中按照标准流程进行地址声明和冲突处理,并通过标准接口通知其他AUTOSAR模块当前网络状态。


4. 地址管理

4.1 地址声明机制

J1939网络中的地址管理通过AddressClaimed消息实现。下图展示了J1939Nm模块处理地址声明的序列流程:

在这里插入图片描述

地址声明的主要流程包括:

  1. 启动阶段地址声明

    • 当ComM请求网络服务时,调用链为:ComM → Nm → J1939Nm_NetworkRequest()
    • J1939Nm更新状态为NetworkMode并通知Nm接口
    • 根据J1939NmNodeStartUpDelay配置,设置NodeChannel状态
    • 通过CanIf发送AddressClaimed消息
    • 如果配置了启动延迟,启动250ms计时器,延时后切换到NormalOperation状态
  2. 接收地址声明处理

    • 当接收到外部设备的AddressClaimed消息时,通过J1939Nm_RxIndication()处理
    • 比较接收到的源地址与本地配置的地址和NAME优先级
    • 如果地址相同但接收到的NAME优先级更高,本地ECU切换到AcLost状态并发送CannotClaimAddress
    • 如果地址相同但本地优先级更高,重新发送本地的AddressClaimed消息
    • 如果地址不同,记录外部节点信息
  3. 地址请求响应

    • 当接收到地址请求消息(RQST,PGN=0x0EA00)时,J1939Rm调用J1939Nm_RequestIndication()
    • 根据当前NodeChannel状态决定响应方式:
      • 如果处于NormalOperation或Claiming状态,发送AddressClaimed消息
      • 如果处于AcLost状态,发送CannotClaimAddress消息
  4. 网络关闭流程

    • 当ComM释放网络时,调用链为:ComM → Nm → J1939Nm_NetworkRelease()
    • J1939Nm更新状态为SleepMode
    • 通知Nm接口和BswM状态变化(NM_STATE_BUS_SLEEP)

4.2 地址冲突处理

当两个或多个ECU尝试使用相同地址时,会发生地址冲突。J1939Nm通过以下机制处理地址冲突:

  1. 冲突检测

    • 接收到与本地地址相同的AddressClaimed消息时,比较NAME优先级
    • NAME是一个64位标识符,数值越小优先级越高
  2. 冲突解决

    • 如果本地NAME优先级更高,J1939Nm重新发送AddressClaimed消息
    • 如果外部设备NAME优先级更高,本地ECU进入AcLost状态并发送CannotClaimAddress消息
  3. 随机延时

    • 为避免总线负载峰值和重复冲突,在发送CannotClaimAddress消息前添加随机延时
    • 随机延时基于节点NAME计算,确保不同节点使用不同的延时值
  4. BusOff处理

    • CAN总线上的BusOff事件后恢复也使用随机延时
    • 通过J1939Nm_GetBusOffDelay()获取延时值

4.3 地址请求响应

J1939协议允许节点请求网络上其他节点的地址信息。J1939Nm通过以下方式处理地址请求:

  1. 请求处理

    • J1939Rm收到请求消息后调用J1939Nm_RequestIndication()
    • 请求可以是全局的(DA=0xFF)或针对特定地址的
  2. 响应生成

    • 根据当前状态决定响应类型:
      • NormalOperation或Claiming状态:发送AddressClaimed
      • AcLost状态:发送CannotClaimAddress
  3. 响应传输

    • 所有响应都是全局发送的(DA=0xFF)
    • 在AcLost状态发送响应前添加随机延时

通过这些机制,J1939Nm确保了ECU在J1939网络中可以正确声明地址、处理地址冲突并响应地址请求,符合SAE J1939-81标准规范。


5. 配置模型

5.1 配置结构

J1939Nm模块的配置结构如下图所示:

在这里插入图片描述

5.2 配置参数

J1939Nm模块的配置分为以下几个主要部分:

  1. 模块级配置

    • J1939NmGeneral:包含模块通用配置
      • J1939NmDevErrorDetect:开发错误检测开关
      • J1939NmMainFunctionPeriod:主函数周期时间
      • J1939NmVersionInfoApi:版本信息API开关
      • J1939NmBusOffDelayTickPeriod:总线关闭延迟周期
      • J1939NmUserCallout:用户回调函数开关
  2. 配置集

    • J1939NmConfigSet:包含网络配置
      • J1939NmSharedAddressSpace:共享地址空间配置
      • J1939NmChannel:通道配置
      • J1939NmNode:本地节点配置
      • J1939NmExternalNode:外部节点配置
  3. 共享地址空间配置

    • 用于网关应用场景,允许不同J1939通道间的地址协调
    • 定义哪些通道属于同一个地址空间
  4. 通道配置

    • J1939NmChannelId:通道标识符
    • J1939NmChannelEnable:通道启用标志
    • J1939NmChannelUsesAddressArbitration:是否使用地址仲裁
    • J1939NmTxPdu/J1939NmRxPdu:发送/接收PDU配置
    • ComMChannelRef:对应的ComM通道引用
  5. 节点配置

    • J1939NmNode:本地节点配置

      • J1939NmNodeNameXxx参数:构成64位J1939 NAME
      • J1939NmNodePreferredAddress:节点首选源地址
      • J1939NmNodeStartUpDelay:是否启用启动延迟
      • J1939NmNodeSpecificDemEventParameterRefs:诊断事件参数引用
    • J1939NmExternalNode:外部节点配置(用于网关场景)

      • 结构与本地节点类似,用于在多个通道间转发外部节点的地址声明
  6. PDU配置

    • J1939NmTxPdu:发送PDU配置,用于AddressClaimed消息发送
    • J1939NmRxPdu:接收PDU配置,用于接收外部AddressClaimed消息

J1939Nm配置模型的设计支持多节点、多通道场景,并能处理网关应用中的地址协调。配置参数允许调整模块行为,如是否启用地址仲裁、是否使用启动延迟等,以适应不同应用需求。


6. 总结

AUTOSAR SAE J1939网络管理模块(J1939Nm)实现了J1939协议中的网络管理功能,专注于地址管理而非传统的ECU休眠和唤醒管理。其主要特点和优势包括:

  • 标准合规性:完全符合SAE J1939-81网络管理标准
  • 灵活配置:支持多种配置选项,适应不同应用场景
  • 网关支持:通过共享地址空间支持网关应用中的地址协调
  • 完整状态管理:提供详细的状态转换和通知机制
  • 健壮的冲突处理:通过优先级比较和随机延时处理地址冲突

J1939Nm模块作为AUTOSAR通信栈的重要组成部分,为重型车辆、农业机械和工程机械等应用领域提供了标准化的网络管理解决方案,确保不同厂商的ECU可以在同一网络中正确协作。

通过本文介绍的架构设计、状态管理、地址管理和配置模型,开发者可以更好地理解和使用J1939Nm模块,实现基于AUTOSAR标准的J1939网络应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值