目录
一、概述
该文档描述了AUTOSAR CAN网络管理(CanNm)的概念、核心功能、可配置特性、接口和配置问题。
AUTOSAR CAN网络管理是一种独立于硬件的协议,只能在CAN上使用。其主要目的是协调网络在正常运行和总线睡眠模式之间的过渡。除了核心功能之外,还提供了可配置的功能,例如实现检测所有当前节点或检测所有其他节点是否都准备好睡眠的服务。
CAN网络管理(CanNm)功能提供了网络管理接口(NmIf)和CAN接口(CanIf)模块之间的自适应。
二、说明
(1)CanNm的一个通道仅与一个网络中的一个网络管理集群关联。一个网络管理集群在一个节点中只能有一个CanNm的通道。
(2)CanNm的一个通道仅与同一ECU内的一个网络相关联。
(3)CanNm仅适用于CAN系统。
三、功能说明
3.1 协调算法
AUTOSAR CanNm基于分散的直接网络管理策略,这意味着每个网络节点只根据在通信系统内接收或传输的网络管理pdu来执行自给自足的活动。
CanNm算法基于周期网络管理pdu,通过广播传输由集群中的所有节点接收。网络管理pdu的接收表示发送节点希望保持网络管理集群的清醒状态。如果任何节点准备进入总线睡眠模式,它将停止发送网络管理pdu,但只要接收到来自其他节点的网络管理pdu,它就会延迟过渡到总线睡眠模式。最后,如果由于不再接收到网络管理pdu而经过专用计时器,则每个节点都会启动到总线-睡眠模式的转换。
如果网络管理集群中的任何节点需要总线通信,它可以通过传输网络管理pdu,将网络管理集群从总线-睡眠模式中唤醒。
【规范】CanNm集群中的每个网络节点只要需要总线通信,就应定期传输网络管理PDU,否则应不传输网络管理PDU。
【规范】如果禁用了CanNm状态,并且在CanNm集群中的总线通信,并且总线上根据CanNmTimeoutTime + CanNmWaitBusSleepTime 转换到总线睡眠模式。
【规范】CanNm状态机应包含从网络管理集群中单个节点的角度来看的AUTOSAR CanNm算法所需的状态、转换和触发器。
3.2 操作模式
【规范】CanNm包含在模块界面上可见的三种操作模式:
- Network Mode
- Prepare Bus-Sleep Mode
- Bus-Sleep Mode
【规范】运行模式的变化应通过回调函数通知上层。
【规范】当调用CanNm_GetState时,CanNm将返回当前的NM状态和模式。
3.2.1 网络模式
【规范】网络模式应包括三种内部状态:
- Repeat Message State
- Normal Operation State
- Ready Sleep State
【规范】当从总线睡眠状态进入网络模式时,默认情况下,CanNm模块应进入重复消息状态。
【规范】当从准备总线睡眠模式进入网络模式时,默认情况下,CanNm模块应进入重复消息状态。
【规范】当进入网络模式后,CanNm模块应启动NM-Timeout计时器。
【规范】当进入网络模式时,CanNm应通过调用回调函数Nm_NetworkMode来通知上层新的当前操作模式。
【规范】当在网络模式下成功接收到网络管理PDU(调用CanNm_RxIndication)时,如果启用了PDU传输能力,CanNm模块应重新启动NM-Timeout定时器。
【规范】在网络模式下成功传输网络管理PDU(用E_OK调用CanNm_TxConfirmation)时,CanNm模块应重新启动NM-Timeout定时器。
备注:如果启用了CanNmImmediateTxConfEnabled,则假设每个网络管理PDU传输请求都会导致网络管理PDU传输成功。
【规范】CAN NM模块应在每次启动或重新启动时重置NM-Timeout定时器。
【规范】如果在网络模式下调用CanNm_PassiveStartUp,CanNm模块不执行此服务,并返回E_NOT_OK。
(1)Repeat Message State
对于未处于被动模式的节点,重复消息状态确保,从总线睡眠或准备总线睡眠到网络模式的任何转换对网络上的其他节点都可见。此外,它还可以确保任何节点在最短的时间内保持活动状态。它可以用于现有节点的检测。
【规范】当进入重复消息状态时,CanNm模块应(重新)启动网络管理pdu的传输,除非启用了被动模式和/或禁用了通信。
【规范】当NM-Timeout 计时器在重复消息状态下超时时,CanNm模块应(重新)启动NM-Timeout 计时器。
【规范】当NM-Timeout 时间计时器在重复消息状态下到期时,CanNm模块应向DET报告CANNM_E_NETWORK_TIMEOUT。
【规范】网络管理状态机应在由CanNmRepeatMessageTime(配置参数)确定的可配置时间内保持在重复消息状态,之后CanNm模块应离开重复消息状态。
【规范】当重复消息状态离开,如果网络已被请求时,CanNm模块应进入正常运行状态。
【规范】当“重复消息状态”时,如果网络已释放,CanNm模块应进入就绪休眠状态。
【规范】如果CanNmNodeDetectionEnabled被设置为TRUE,CanNm应在离开重复消息状态时清除重复消息位。
【规范】如果服务CanNm_RepeatMessageRequest在重复消息状态、准备总线睡眠模式或总线睡眠模式下被调用,CanNm模块不得执行服务并返回E_NOT_OK。
【规范】
(2)Normal Operation State
“正常运行状态”确保,只要请求网络,任何节点都可以保持网络管理集群的清醒状态。
【规范】当从准备睡眠状态进入正常运行状态时,CanNm模块应启动网络管理pdu的传输。
备注:如果启用了被动模式或禁用了网络管理PDU传输能力,则不传输NMPDU,因此不需要执行任何操作。
【规范】当NM-Timeout计时器在正常运行状态下超时时,CanNm模块应(重新)启动NM超时计时器。
【规范】当NM-Timeout在正常运行状态下到期时,CanNm模块应向DET报告CANNM_E_NETWORK_TIMEOUT。
【规范】当网络被释放,当前状态为正常运行状态时,CanNm模块应进入准备睡眠状态。
【规范】如果CanNmNodeDetectionEnabled被设置为TRUE,并且在正常操作状态下收到重复消息请求位,则CanNm模块应输入重复消息状态。
【规范】如果CanNm_RepeatMessageRequest检测已启用设置为TRUE,并且在正常操作状态下调用函数CanNm_RepeatMessageRequest,则CanNm模块应输入重复消息状态。
【规范】如果CanNmNodeDetectionEnabled被设置为TRUE,并且在正常操作状态下调用函数CanNm_RepeatMessageRequest,则CanNm模块应设置重复消息位。
(3)Ready Sleep State
就绪休眠状态确保网络管理集群中的任何节点等待过渡到准备总线休眠模式,只要任何其他节点保持网络管理集群休眠。
【规范】当从重复消息状态或正常运行状态进入就绪休眠状态时,CanNm模块应停止网络管理pdu的传输。
备注:如果启用了被动模式,则不传输NMpdu,因此不需要执行任何操作。
备注:如果在某些情况下禁用被动模式,NMpdu必须在就绪睡眠状态下传输,以允许在网络中同步关闭,例如重新传输PN关闭消息。
【规范】当NM-Timeout计时器在准备就绪休眠状态下到期时,CanNm模块应进入准备总线休眠模式。
【规范】当请求网络且当前状态为准备睡眠状态时,CanNm模块应进入正常运行状态。
【规范】如果已CanNmNodeDetectionEnabled 设置为TRUE,并且在准备睡眠状态下收到重复消息请求位,则CanNm模块应进入重复消息状态。
【规范】如果CanNm_RepeatMessageRequest检测已启用被设置为TRUE,并且在准备睡眠状态下调用函数CanNm_RepeatMessageRequest,则CanNm模块应输入重复消息状态。
【规范】如果CanNmNodeDetectionEnabled设置为TRUE,函数CanNm_RepeatMessageRequest为就绪睡眠状态,则CanNm模块应设置重复消息位。
3.2.2 准备总线睡眠模式
准备总线睡眠模式的目的是确保所有节点在进入总线睡眠模式之前都有时间停止其网络活动。在准备总线睡眠模式中,总线活动平静下来(即传输排队消息以使所有Tx缓冲区为空),最后在准备总线睡眠模式中,总线上没有活动。
【规范】当进入准备总线-睡眠模式时,CanNm模块应通过调用Nm_PrepareBusSleepMode通知上层。
【规范】如果CanNmStayInPbsEnabled失能时,则应保持在准备总线睡眠模式CanNmWaitBusSleepTime(配置参数)之后,并进入总线睡眠模式。
【规范】在准备总线睡眠模式下成功接收到网络管理PDU时,CanNm模块应进入网络模式;默认情况下,CanNm模块应进入重复消息状态。
【规范】当在准备总线睡眠模式下请求网络时,CanNm模块应进入网络模式;默认情况下,CanNm模块应进入重复消息状态。
【规范】当网络在准备总线睡眠模式下被请求时,CanNm模块已进入网络模式,如果CanNmImmediateRestartEnabled(配置参数)设置为TRUE,CanNm模块应传输网络管理PDU。
3.2.3 总线睡眠模式
总线睡眠模式的目的是在不交换消息时减少节点的功耗。通信控制器被切换到睡眠模式,各自的唤醒机制被激活,最终在总线-睡眠模式中将功耗降低到足够的水平。
【规范】当进入总线睡眠模式时,除初始化时的默认情况外,CanNm模块应通过调用回调函数Nm_BusSleepMode来通知上层。
【规范】当CanNm模块在总线睡眠模式下成功接收到一个网络管理PDU(CanNm_RxIndication的调用)时,CanNm模块应通过调用回调函数Nm_NetworkStartIndication来通知上层。
【规范】当CanNm模块在总线睡眠模式下成功接收到网络管理PDU(CanNm_RxIndication的调用)时,CanNm模块应向DET报告错误CANNM_E_NET_START_IND。
【规范】如果在总线睡眠模式或准备总线睡眠模式中调用CanNm_PassiveStartUp,CanNm模块应进入网络模式;默认CanNm模块应进入重复消息状态。
【规范】当在总线睡眠模式下请求网络时,CanNm模块应进入网络模式,默认CanNm模块应进入重复消息状态。
3.3 网络状态
【规范】函数调用CanNm_NetworkRequest应请求网络。即CanNm模块将将网络状态更改为“requested”。
【规范】函数调用CanNm_NetworkRelease将释放网络。即CanNm模块将将网络状态更改为“released”。
3.4 初始化
【规范】如果CanNm模块(CanNm_Init)的初始化成功,则CanNm模块应将网络管理状态设置为总线睡眠模式。
【规范】当初始化时,默认情况下,CanNm模块应将网络状态设置为“已释放”
【规范】当初始化时,默认情况下,CanNm模块应进入总线睡眠模式。
【规范】函数CanNm_Init应通过传递一个配置指针参数来选择活动配置集。
【规范】如果CanNmGlobalPnSupport 设置为TRUE,并且初始化了CanNm(调用CanNm_Init),则CanNm将停止NM消息Tx超时计时器。
【规范】在初始化期间,CanNm模块应停用总线负载降低。
【规范】初始化后,CanNm模块应通过停止消息周期计时器来停止网络管理pdu的传输。
【规范】在初始化期间,CanNm模块应将用户数据的每个字节设置为0xFF。
【规范】在初始化期间,CanNm模块应将控制位向量设置为0x00。
3.5 参数
【规范】AUTOSAR CanNm算法应独立于处理器,这意味着;它不得依赖于任何处理器特定的硬件支持,因此应可以在自动存储器范围内的任何处理器架构上实现。
【规范】配置时间参数网络超时时间NM-Timeout。
【规范】配置时间参数重复消息时间Repeat Message Time。
【规范】配置时间参数等待总线睡眠时间Wait Bus-Sleep Time。
【规范】配置时间参数远程睡眠指示时间Remote Sleep Indication Time。
3.6 网络管理PDU结构
网络管理PDU的格式,例如8个字节,其中源节点标识符(SNI)位于第一个字节,控制位向量(CBV)位于第二个字节,使用用户数据,并启用部分网络。用户数据范围位于系统字节和PNC位向量之间:
【规范】源节点标识符的位置应通过CanNmPduN位置配置为字节0、字节1或关闭。
【规范】控制位矢量的位置应可通过计算机定位到字节0、字节1或关闭进行配置。
【规范】未分配给Nm系统字节或PNC位向量的剩余字节应可用于用户数据。
控制位向量的格式:
控制位向量应包括:
- 位0:重复消息请求位
- 0:未请求重复消息状态
- 1:请求重复消息状态
- 位1:PN关闭请求位(PNSR)
- 0:NM消息不包含同步的部分网络关闭请求
- 1:NM消息不包含至少一个PNC的同步的部分网络关闭请求
- 位3:NM协调器休眠位
- 0:主协调器不请求开始同步关机
- 1:主协调器请求开始同步关机
- 位4:主动唤醒位
- 0:节点未唤醒网络(被动唤醒)
- 1:节点已唤醒网络(主动唤醒)
- 位5:部分网络学习位(PNL)
- 0:不请求PNC学习
- 1:请求PNC学习
- 位6:部分网络信息位(PNI)
- 0: NM PDU不包含部分网络请求信息
- 1: NM PDU不包含部分网络请求信息
- 位2和位7被保留给未来的扩展
【规范】CanNm模块应设置具有配置参数CanNmNodeId的源节点标识符,除非CanNmPduNid位置设置为关闭。
【规范】如果CanNm由于调用CanNm_NetworkRequest(即由于激活唤醒)而将状态从总线睡眠模式或准备总线睡眠模式更改为网络模式,且CanNmActiveWakeupBitEnabled为TRUE,CanNm应在CBV中设置激活驻波位。
【规范】如果CanNm模块离开网络模式,且CanNmActiveWakeupBitEnabled为TRUE,则CanNm模块应清除CBV中的激活唤醒位。
3.7 通信调度
3.7.1 发送
【规范】网络管理pdu传输能力应通过网络CanNmPassiveModeEnabled进行配置。
【规范】CanNm模块应提供定期传输模式。在此传输模式下,CanNm模块应定期发送网络管理pdu。
【规范】CanNm模块应可选择提供具有总线负载降低功能的定期传输模式。在这种传输模式下,CanNm模块应根据特定的算法传输网络管理pdu。
【规范】即时传输确认机制应可通过CanNmImmediateTxConfEnabled进行配置。
【规范】如果未通过CanNm_NetworkRequest或CanNmImmediateNmTransmissions输入的重复消息状态为零,则在进入重复消息状态后,CanNmMsg CanNmImmediateNmTransmissions应延迟NM PDU的传输。
【规范】当由于CanNm_NetworkRequest()(主动唤醒)而从总线休眠模式或准备总线休眠模式进入重复消息状态时,如果CanNmImmediateNmTransmissions大于零,则应使用CanNm_NetworkRequest()立即发送CanNm_NetworkRequest()作为周期时间。应尽快触发第一个NM PDU的传输。传输后,消息周期计时器应重新加载。在这种情况下不适用。
【规范】如果从就绪睡眠状态进入正常运行状态,则应立即启动NMPDU的传输。
【规范】如果CanNmPnHandleMultipleNetworkRequests设置为TRUE,CanNm_NetworkRequest将触发从网络模式到重复消息状态的状态转换。如果PDU传输能力被启用,NMPDU应立即使用计算机网络Nm周期时间作为周期时间进行传输。应尽快触发第一个NM PDU的传输。传输后,消息周期计时器应重新加载。在这种情况下不适用。
【规范】如果NMPDU传输即时传输时间,则应确保成功请求此定时的CanNmImmediateNmTransmissions(包括首次即时传输)。如果对CanIf的传输请求失败(返回E_NOT_OK),CanNm将在下一个主功能中重试该传输请求。然后,CanNm将继续使用CanNmMsg循环时间传输NMpdu。
【规范】如果CanNm消息周期计时器过期,则CanNm模块将使用CanNm消息周期时间重新启动。
【规范】如果网络管理pdu的传输已经停止,CanNm模块应取消消息周期计时器。
3.7.2 接收
如果已成功接收到NM PDU,CanIf模块将调用回调函数CanNm_RxIndication。
【规范】在回调函数CanNm_RxIndication的调用时,CanNm模块应将函数参数中引用的网络管理PDU的数据复制到一个内部缓冲区。
3.8 其他功能
3.8.1 远程睡眠指示器的检测
“远程睡眠指示”表示一种情况,即处于正常操作状态的节点发现集群中的所有其他节点都准备好了睡眠(处于读取状态)。处于正常运行状态的节点仍将使总线保持清醒。
3.8.2 用户数据
如果配置了用户数据,它将被肯定地在重复消息状态下发送。在正常运行状态下,是否发送用户数据取决于总线负载减少的配置。在就绪睡眠状态中,将不会发送用户数据。
3.8.3 被动模式
在被动模式下,节点只接收网络管理pdu,而不传输任何网络管理pdu。
3.8.4 网络管理PDU Rx指示
在调用回调函数CanNm_RxIndication时,当且仅当CanNmPduRxIndicationEnabled(配置参数)设置为TRUE时,CanNm模块应调用Nm回调函数Nm_PduRxIndication。
3.8.5 状态更改通知
如果启用了回调Nm_StateChangeNotification(配置参数CanNmStateChangeIndEnabled为TRUE),则应通过调用Nm_StateChangeNotification将自动存储器CanNm状态的所有更改通知给上层。
3.8.6 通信控制
【规范】如果服务CanNm_DisableCommunication,CanNm模块应禁用网络管理PDU传输能力。
3.8.7 协调器对同步功能的支持
当有多个协调器连接到同一总线的CBV中的一个特殊位时,Nm协调器睡眠准备位用于指示主协调器请求启动关闭序列。该算法的主要功能在Nm模块中进行描述。
3.9 UML状态图
下图显示了与API规范有关的UML状态图。与模式变化相关的转换用绿色表示,与错误处理相关的转换用红色表示,可选的节点检测/动态pnc到信道映射相关的转换用蓝色表示。
四、API接口
4.1 API定义
- CanNm_Init
- CanNm_DeInit
- CanNm_PassiveStartUp ——被动唤醒启动网络CAN NM
- CanNm_NetworkRequest ——请求网络,因为ECU需要在总线上进行通信。
- CanNm_NetworkRelease ——释放网络,因为ECU不需要在总线上进行通信。
- CanNm_DisableCommunication ——禁用NM PDU传输能力
- CanNm_EnableCommunication ——启用NM PDU传输能力
- CanNm_SetUserData ——为在总线上下次传输的网元pdu设置用户数据
- CanNm_GetUserData ——从最近接收的网MPDU中获取用户数据。
- CanNm_Transmit ——请求传输一个PDU。
- CanNm_GetNodeIdentifier ——从最近接收到的NM PDU中获取节点标识符。
- CanNm_GetLocalNodeIdentifier ——获取为本地节点配置的节点标识符。
- CanNm_RepeatMessageRequest ——为总线上下次传输的NMPDU设置重复消息请求位。
- CanNm_GetPduData ——从最近接收到的NM PDU中获取整个PDU数据。
- CanNm_GetState ——返回网络管理的状态和模式。
- CanNm_GetVersionInfo
- CanNm_RequestBusSynchronization ——请求总线同步。
- CanNm_CheckRemoteSleepIndication ——检查是否发生了远程睡眠指示。
- CanNm_SetSleepReadyBit ——在控制位向量中设置NM协调器睡眠准备就绪位
4.2 通知函数
- CanNm_TxConfirmation ——下层通信接口模块确认PDU的传输,或PDU的传输失败。
- CanNm_RxIndication ——指示从下层通信接口模块接收到的PDU。
- CanNm_ConfirmPnAvailability ——在指定的网元通道上启用PN过滤器功能。
- CanNm_TriggerTransmit ——上层模块在此进行数据填充
4.3 调度函数
- CanNm_MainFunction ——处理CanNm的状态机。