AUTOSAR CAN Network Management

功能概述

  • AUTOSAR CanNm基于分布式直接网络管理策略,这意味着每个网络节点仅根据通信系统内接收或传输的网络管理 PDU执行自给自足的活动。
  • AUTOSAR CanNm算法基于周期性的网络管理PDU,这些PDU通过广播传输被集群中的所有节点接收。接收到网络管理PDU表明发送节点希望保持网络管理集群处于唤醒状态。如果任何节点准备进入总线睡眠模式,它将停止发送网络管理PDU,但只要接收到来自其他节点的网络管理PDU,它就会推迟进入总线睡眠模式的转换。最后,如果由于不再接收到任何网络管理PDU而导致专用计时器超时,每个节点将启动向总线睡眠模式的转换。
  • 如果网络管理集群中的任何节点需要总线通信,它可以通过发送网络管理PDU将网络管理集群从总线休眠模式唤醒。

功能需求及实现

关键需求:

  • CanNm集群中的每个网络节点只要需要总线通信,就应发送周期性的网络管理PDU;否则,它不应发送任何网络管理PDU。
  • 如果CanNm集群中的总线通信被释放,并且在由配置参数 CANNM_TIMEOUT_TIMECANNM_WAIT_BUS_SLEEP_TIME 确定的可配置时间内总线上没有网络管理PDU,则应执行向总线睡眠模式的转换。
    注意:状态转换必须在下一个main function调用之前完成。

操作模式(Operational Modes)

AUTOSAR CanNm应在模块接口处包含三种可见的操作模式:

  • 网络模式(Network Mode)
  • 预备总线休眠模式(Prepare Bus-Sleep Mode)
  • 总线休眠模式(Bus-Sleep Mode)

AUTOSAR CanNm操作模式的变化应通过回调函数通知上层。调用CanNm_GetState时,CanNm返回当前的NM 状态和模式。

网络模式(Network Mode)

网络模式由三个内部状态组成:

  • 重复报文状态(Repeat Message State)
  • 正常运行状态(Normal Operation State)
  • 准备睡眠状态(Ready Sleep State)
  1. Bus-Sleep Mode式进入Network Mode时,默认情况下 CanNm模块应进入Repeat Message State
  2. Prepare Bus- Sleep Mode模式进入Network Mode时,默认情况下CanNm模块应进入Repeat Message State
  3. 当进入Network Mode时,CanNm模块应启动网络管理超时定时器NM-Timeout
  4. 进入Network Mode后,CanNm应通过调用回调函数Nm_NetworkMode通知上层当前的新操作模式。
  5. Network Mode下成功接收网络管理PDU时(调用CanNm_RxIndication),如果启用了PDU传输能力,CanNm模块应重新启动NM-Timeout定时器。
  6. Network Mode下成功发送网络管理 PDU 时(调用CanNm_TxConfirmation 时为E_OK),CanNm 模块应重新启动 NM-Timeout定时器。
    注意:如果启用了 CANNM_IMMEDIATE_TXCONF_ENABLED,则假定每个网络管理PDU传输请求都会成功完成网络管理PDU的传输。
重复报文状态(Repeat Message State)

对于非被动模式的节点,Repeat Message State可确保网络上的其他节点看到从Bus-SleepPrepare Bus-SleepNetwork Mode的任何转换。此外,它还确保任何节点在最短的时间内保持活动状态。它可用于检测当前节点。
进入Repeat Message State后,CanNm 模块将(重新)开始传输网络管理PDU,除非启用了被动模式(passive mode)和/或禁用了通信。

  1. Repeat Message State下,当网络管理定时器NM-Timeout到期时,CanNm 模块应(重新)启动网络管理NM-Timeout超时定时器。
  2. 网络管理状态机应在Repeat Message State下停留一定时间,该时间由CanNmRepeatMessageTime(配置参数)决定;之后,CanNm 模块应离开Repeat Message State
  3. 离开Repeat Message State后,如果已请求网络,CanNm模块将进入Normal Operation State
  4. 离开Repeat Message State状态后,如果网络已被释放,CanNm模块应进入Ready Sleep State
  5. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,则CanNm应在离开Repeat Message State时清除"重复报文(Repeat Message Bit)"位。
  6. 如果在Repeat Message StatePrepare Bus-Sleep ModeBus-Sleep Mode下调用CanNm_RepeatMessageRequest服务,CanNm模块将不执行该服务并返回E_NOT_OK 。
正常运行状态(Normal Operation State)

正常操作状态确保任何节点都可以在网络被请求时保持网络管理集群处于唤醒状态。

  1. Ready Sleep State状态进入Normal Operation State状态时,CanNm模块应开始传输网络管理PDU。
    注意:如果启用了被动模式或网络管理PDU传输能力被禁用,则不会传输NM PDU,因此无需执行任何操作。
  2. Normal Operation State下的 NM 超时定时器NM-Timeout到期时,CanNm 模块应(重新)启动NM超时NM-Timeout定时器。
  3. 当网络被释放且当前状态为Normal Operation State时,CanNm模块应进入Ready Sleep state
  4. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,并且在Normal Operation State下接收到重复信息请求位,则 CanNm 模块将进入Repeat Message State
  5. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,并且在 Normal Operation State下调用函数 CanNm_RepeatMessageRequest,则CanNm模块将进入Repeat Message State
  6. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,并且在Normal Operation State下调用了函数 CanNm_RepeatMessageRequest,则 CanNm模块应设置重复消息位(Repeat Message Bit)。
准备睡眠状态(Ready Sleep State)

Ready Sleep State确保只要有其他节点保持网络管理群集中的唤醒状态,网络管理群集中的任何节点都会等待过渡到Prepare Bus-Sleep Mode的转换。

  1. 当从Repeat Message StateNormal Operation State进入Ready Sleep State时,CanNm模块应停止传输网络管理 PDU。
    注意: 如果启用了被动模式(passive mode),则不会发送任何NM PDU,因此无需执行任何操作。
  2. Ready Sleep State下,当NM超时定时器NM-Timeout到期时,CanNm 模块应进入Prepare Bus-Sleep Mode
  3. 当网络被请求并且当前状态为Ready Sleep State时,CanNm模块应进入Normal Operation State
  4. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,并且在Ready Sleep State下接收到重复信息请求位,则CanNm 模块应进入Repeat Message State
  5. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,并且在 Ready Sleep State下调用函数 CanNm_RepeatMessageRequest,则CanNm模块将进入Repeat Message State
  6. 如果CanNmNodeDetectionEnabled设置为 “TRUE”,并且在Ready Sleep State下调用了函数 CanNm_RepeatMessageRequest,则 CanNm模块应设置重复消息位(Repeat Message Bit)。
预备总线休眠模式(Prepare Bus-Sleep Mode)

Prepare Bus-Sleep Mode的目的是确保在进入Bus-Sleep Mode之前,所有节点都有时间停止网络活动。在Prepare Bus-Sleep Mode下,总线活动将趋于平静(即传输队列报文,以使所有Tx 缓冲区为空),最终在 Prepare Bus-Sleep Mode下总线上没有任何活动。

  1. 当进入Prepare Bus-Sleep Mode时,CanNm模块应通过调用Nm_PrepareBusSleepMode通知上层。
  2. CanNm模块应在Prepare Bus-Sleep Mode中保持一段可配置的时间,该时间由CanNmWaitBusSleepTime(配置参数)决定;之后应退出Prepare Bus-Sleep Mode并进入Bus-Sleep Mode
  3. Prepare Bus-Sleep Mode下成功接收网络管理PDU后,CanNm模块应进入Network Mode;默认情况下,CanNm 模块应进入Repeat Message State
  4. Prepare Bus-Sleep Mode模式下请求网络时,CanNm模块应进入Network Mode;默认情况下,CanNm 模块应进入Repeat Message State
  5. Prepare Bus-Sleep Mode模式下请求网络且CanNm模块已进入Network Mode,并且 CanNmImmediateRestartEnabled(配置参数)设置为 "true "时,CanNm模块应发送网络管理PDU。
    理由依据:集群中的其他节点仍处于Prepare Bus-Sleep Mode;在上述特殊情况下,应避免过渡到Bus-Sleep Mode,并尽快恢复总线通信。
    由于CanNm中网络管理PDU的传输偏移,Repeat Message State下第一个网络管理PDU的传输可能会严重延迟。为了避免延迟重启网络,可以立即请求传输网络管理PDU。
    注意:如果将CanNmImmediateRestartEnabled设为 “TRUE”,并使用唤醒线路,则在Prepare Bus-Sleep Mode下,如果所有网络节点都收到网络请求,就会发生网络管理PDU突发。
总线休眠模式(Bus-Sleep Mode)

Bus-Sleep Mode的目的是在不交换信息时降低节点的功耗。在Bus-Sleep Mode下,通信控制器进入休眠模式,启动相应的唤醒机制,最终将功耗降至适当水平。
如果网络管理集群中的所有节点都配置了由CanNmTimeoutTime + CanNmWaitBusSleepTime(两个配置参数)决定的可配置时间,则网络管理集群中使用AUTOSAR NM算法进行协调的所有节点都会在大致相同的时间过渡到Bus-Sleep Mode
注意:在网络管理集群的所有网络节点中,参数CanNmTimeoutTime 和 CanNmWaitBusSleepTime的值应该相同。根据具体实施情况,进入Bus-Sleep Mode的时间会完全相同或大致相同;这一转换的时间抖动取决于以下因素:

  • 内部时钟精度(振荡器漂移)
  • NM任务周期时间(如果任务未与全局时间同步)
  • 网络管理PDU在Tx队列中的等待时间(如果在传输请求后立即进行传输确认)

在最佳情况下,只需考虑振荡器漂移的可配置时间,该时间由 CanNmTimeoutTime + CanNmWaitBusSleepTime(两个配置参数)决定。

  1. 进入总Bus-Sleep Mode时(初始化时的默认情况除外),CanNm模块应通过调用回调函数Nm_BusSleepMode通知上层。
  2. 当CanNm模块在Bus-Sleep Mode下成功接收到网络管理PDU(调用CanNm_RxIndication)时,CanNm模块应通过调用回调函数Nm_NetworkStartIndication通知上层。
    理由依据:为避免出现网络管理和模式管理之间的竞争条件和状态不一致,CanNm不会自动执行从Bus-Sleep ModeNetwork Mode的转换。CanNm只通知必须做出唤醒决定的上层。总线休眠模式下的网络管理PDU接收必须根据 ECU关闭/启动过程的当前状态进行处理。
  3. 当CanNm模块在Bus-Sleep Mode下成功接收到网络管理PDU(调用CanNm_RxIndication)时,CanNm模块应向 DET报告错误CANNM_E_NET_START_IND。
  4. 如果在Bus-Sleep ModePrepare Bus-Sleep Mode下调用CanNm_PassiveStartUp,CanNm模块应进入Network Mode;默认情况下,CanNm 模块应进入Repeat Message State
    注意:在Prepare Bus-Sleep ModeBus-Sleep Mode中,假定网络已释放,除非明确请求总线通信。
  5. Bus-Sleep Mode下请求网络时,CanNm 模块应进入Network Mode;默认情况下,CanNm模块应进入Repeat Message State

网络状态(Network states)

网络状态(即 "请求(requested)"和 “释放(released)”)是AUTOSAR CanNm状态机的两个附加状态,与状态机并行存在。网络状态表示软件组件是否需要在总线上通信(此时网络状态为 “请求”);或者软件组件是否不需要在总线上通信(此时总线网络状态为 “释放”);请注意,如果网络被释放,ECU 可能仍会通信,因为其他 ECU 仍会请求使用网络。
网络状态(即“请求”和“释放”)是AUTOSAR CanNm状态机的两个附加状态,与状态机并行存在。网络状态表示软件组件是否需要在总线上通信(然后“请求(requested)”网络状态);或者软件组件是否不必在总线上通信(总线网络状态随后被“释放(released)”);请注意,如果网络被释放,ECU仍可能通信,因为其他ECU仍在请求网络。

  1. 函数调用CanNm_NetworkRequest应请求网络。即CanNm模块应将网络状态更改为 “请求”。
  2. 调用函数CanNm_NetworkRelease应释放网络。即CanNm模块应将网络状态更改为 “已释放”。

初始化(Initialization)

  1. 如果CanNm模块的初始化 (CanNm_Init) 成功,CanNm模块应将网络管理状态设置为Bus-Sleep Mode。注:CanNm模块应在CanIf初始化之后、和调用任何其他网络管理服务之前进行初始化。
  2. 初始化时,默认情况下,CanNm模块应将网络状态设置为 “已释放”。
  3. 初始化时,默认情况下 CanNm 模块应进入Bus-Sleep Mode
  4. 函数CanNm_Init通过传递配置指针参数来选择活动配置集。
  5. 如果CanNmGlobalPnSupport设置为 “true”,并且CanNm已初始化(调用CanNm_Init),则CanNm应停止NM消息 Tx超时定时器。
  6. 在初始化过程中,CanNm模块应停用总线负载降低功能。
  7. 初始化后,CanNm模块应通过停止 "消息周期定时器 "来停止网络管理PDU的传输。注:如果 CanNmPassiveModeEnabled设置为 “true”,则不需要CanNm消息周期,因为此类节点不会传输网络管理PDU。
  8. 如果CanNm没有初始化,任何CanNm函数(CanNm_Init除外)的调用都将被拒绝,如果API有返回值,则将返回 E_NOT_OK。如果启用了开发错误检测(CanNmDevErrorDetect设置为TRUE),则应向DET报告 CANNM_E_UNINIT。
  9. 在初始化过程中,CanNm模块应将用户数据(user data)的每个字节设置为0xFF 。
    10.在初始化过程中,CanNm 模块应将“Control Bit Vector”设置为 0x00。

具体实现

AUTOSAR CanNm算法应独立于处理器,这意味着;它不依赖于任何特定于处理器的硬件支持,因此可以在AUTOSAR范围内的任何处理器架构上实现。

时间参数(Timing parameters)
  1. 配置参数“CanNmTimeout Time”应确定AUTOSAR CanNm时许参数NM-Timeout Time
  2. 配置参数“CanNmRepeatMessageTime”应确定AUTOSAR CanNm时序参数Repeat Message Time
  3. 配置参数“CanNmWaitBusSleepTime”应确定AUTOSAR CanNm时序参数Wait Bus-Sleep Time
  4. 配置参数“CanNmRemoteSleepIndTime”应确定AUTOSAR CanNm时序参数远程睡眠指示时间Remote Sleep Indication Time

网络管理PDU结构

下图显示了8个字节的网络管理PDU的格式,其中源节点标识符位于第一个字节,控制位向量位于第二个字节:
在这里插入图片描述

  1. 源节点标识符的位置应可通过CanNmPduNidPosition配置为字节0、字节1或关闭(默认值:字节0)。注意:将CanNmPduNidPosition设置为关闭意味着在NM PDU中没有空间被源节点标识符占用。因此,用户数据又多了一个字节。
  2. 控制位向量的位置应可通过CanNmPduCbvPosition配置为字节0、字节1或关闭(默认值:字节1)。注意:将CanNmPduCbvPosition设置为关闭意味着在NM PDU中没有空间被源节点标识符占用。因此,用户数据又多了一个字节。

注意:网络管理PDU的长度由“全局”ECUC模块中的PduLength参数定义,请参阅Ecu配置规范)。启用的系统字节数和D网络管理PDU的长度之间的差值是用户数据字节数。

下图描述了控制位向量的格式
在这里插入图片描述
控制位向量应由以下部分组成
位 0:重复报文请求
\qquad 0:未请求重复报文状态
\qquad 1: 要求重复信息状态
位 3:NM 协调器睡眠位
\qquad 0:主协调器未请求开始同步关机
\qquad 1: 主协调器要求开始同步关机
位 4 主动唤醒位
\qquad 0:节点被动唤醒
\qquad 1:节点主动唤醒网络
位 6 部分网络信息位 (PNI)
\qquad 0:NM PDU 不包含部分网络请求信息
\qquad 1:NM PDU 包含部分网络请求信息
第 1、2、5、7 位保留用于未来扩展
\qquad 0:禁用/保留供将来使用
注意:在初始化过程中,控制位向量以0x00初始化。

  1. CanNm模块应使用配置参数CanNmNodeId设置源节点标识符,除非CanNmPduNidPosition设置为关闭。
  2. 如果CanNm因调用CanNm_NetworkRequest而执行从Bus Sleep ModePrepare Bus Sleep ModeNetwork Mode的状态更改(即因主动唤醒),且CanNmActiveWakeupBitEnabled为TRUE,则CanNm应在CBV中设置ActiveWakeupBit
  3. 如果CanNm模块离开Network ModeCanNmActiveWakeupBitEnabled为TRUE,则CanNm模块应清除CBV中的 ActiveWakeupBit

通信调度

传输(Transmission)

传输机制仅在启用了网络管理PDU传输能力时才相关。

  1. 网络管理PDU的传输能力应可通过CanNmPassiveModeEnabled进行配置。
  2. CanNm模块应提供周期性传输模式。在这种传输模式下,CanNm模块应定期发送网络管理PDU。
  3. CanNm模块应可选择提供降低总线负载的周期性传输模式。在这种传输模式下,CanNm模块应根据特定算法传输网络管理PDU。
    周期性传输模式用于Repeat Message StateNormal Operation State。带总线负载减少功能的周期性传输模式仅在Normal Operation State下可用。
    注:如果总线负载降低机制被禁用,则在 Repeat Message StateNormal Operation State下使用周期性传输模式。
    只有在启用总线负载降低机制的情况下,才会在Normal Operation State下使用总线负载降低的周期性传输模式。
  4. 应通过CanNmImmediateTxConfEnabled配置即时传输确认机制。
    注:即时传输确认机制适用于不想使用CanIf实际确认的系统。
    理由依据:如果总线访问完全通过离线系统设计工具来调节,则CanIf的实际传输确认可视为冗余。由于假设已知最大仲裁时间,因此可以在传输请求时立即发出确认。
    此外,在这样的系统中仅针对一条NM消息,执行多余的实际传输确认,将意味着与整个Can接口(CanIf)和Can驱动程序层的执行时间有关的重大性能损失,从而使计算的时间的效率低下。
  5. 如果不是通过调用CanNm_NetworkRequest,进入Repeat Message State,或者 CanNmImmediateNmTransmissions为零,则在进入Repeat Message State后,NM PDU的传输应延迟CanNmMsgCycleOffset
  6. 当由于CanNm_NetworkRequest()(主动唤醒)而从Bus Sleep ModePrepare Bus Sleep Mode进入 Repeat Message State时,如果CanNmImmediateNmTransmissions大于零,则应使用CanNmImmmediateNmCycleTime作为循环时间来传输NM PDU。应尽快触发第一个NM PDU的传输。传输后,消息周期定时器应重新加载CanNmImmediatenCycleTime。在这种情况下,不应使用 CanNmMsgCycleOffset
  7. 如果从Ready Sleep State进入Normal Operation State,则应立即开始传输NM PDU。
  8. 如果CanNmPnHandMultipleNetworkRequests设置为TRUE,则CanNm_NetworkRequest应触发从Network ModeRepeat Message State的状态转换。如果启用了PDU传输能力,则应使用CanNmImmediateNmCycleTime作为周期时间传输NM PDU。第一个NM PDU的传输应尽快触发。传输后,应使用CanNmImmediateNmCycleTime重新加载信息周期定时器。在这种情况下,不应使用CanNmMsgCycleOffset
    注:根据ECUC_CanNm_00056,在这种情况下CanNmImmediateNmTransmissions必须大于零。
  9. 如果NM PDU需使用CanNmImmediateNmCycleTime来进行传输,CanNm 应确保成功请求使用此定时的CanNmImmediateNmTransmission(包括第一次立即传输)被成功请求。 如果对CanIf的传输请求失败(即:返回E_NOT_OK),CanNm将在下一个主函数中重试传输请求。
  10. 如果NM PDU需使用CanNmImmediateNmCycleTime来进行传输,CanNm 应确保成功请求使用此定时的CanNmImmediateNmTransmission(包括第一次立即传输)被成功请求。 如果对CanIf的传输请求失败(即:返回E_NOT_OK),CanNm将在下一个主函数中重试传输请求。之后,CanN 应使用CanNmMsgCycleTime继续传输NM PDU。
    注意:在使用CanNmImmediateNmCycleTime传输NM PDU时,不得传输其他Nm PDU(即CanNmMsgCycleTime传输周期已经被停止)。
  11. 如果已开始传输网络管理PDU,且CanNm报文周期定时器到期,则CanNm模块应通过调用CanIf函数 CanIf_Transmit传输网络管理 PDU。
    注意: 如果CanIf_Transmit函数调用失败,第 7.12 章所述的传输错误处理将通知CanNm模块。
  12. 如果NM PDU的传输已经开始,在下列的两种场景中,CanNm模块需通过调用CanIf_Transmit,发送NM PDU。
  13. 如果 CanNm 报文周期定时器过期,CanNm模块应使用CanNmMsgCycleTime重新启动。
  14. 如果网络管理PDU的传输已停止,CanNm模块应取消消息周期定时器。
接收(Reception)

如果成功接收到NM PDU,CanIf模块将调用回调函数CanNm_RxIndication

  1. 在调用回调函数CanNm_RxIndication时,CanNm模块应将函数参数中引用的网络管理PDU的数据复制到内部缓冲区。

UML状态图

下图显示了与API规范相关的UML状态图。与模式变化相关的转换用绿色表示,与错误处理相关的转换用红色表示,与可选节点检测相关的转换用蓝色表示。此外,假定总线负载减少功能已启用。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值