DEENESPTFRRUARHIKOZHNL

FlexRay State Manager (FrSM)

ModulFrSM (FlexRay State Manager)
BSW-Modul-ID142
Standard-Header#include "FrSM.h"
SWS-SpezifikationAUTOSAR_SWS_FlexRayStateManager.pdf
ClusterFlexRay

模块指南人工智能生成

代表 ComM 和 BswM 控制每个 FlexRay 集群的总线通信唤醒、启动和关闭。
AI 生成 未审核 模型: claude-opus-5-5 · 推理强度: high · 温度: 不可控 · 提示词: a3de1ac25c5e 来源 未决问题(6)
因果锚点:R20-11 自 R20-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

代表 ComM 和 BswM 控制每个 FlexRay 集群的总线通信唤醒、启动和关闭。

FlexRay 状态管理器为每个 FlexRay 集群运行一个状态机,该状态机将 ComM 的通信请求通过 FlexRay Interface 转换为唤醒、启动和关闭操作。FrSM_RequestComMode 仅保存请求;只有在集群的周期性主函数中才会对其进行处理 [SWS_FrSM_00020]。FrSM 将达到的模式报告给 ComM 和 BswM。BswM 可以终止仅密钥时隙运行模式或将所有集群切换到接收运行模式。仅 FRSM_ONLINE 和 FRSM_LOW_NUMBER_OF_COLDSTARTERS 被视为 FullCom (SWS FrSM 第38页)。

FlexRay 状态管理器将每个 FlexRay 集群的 ComM 通信请求转换为对 FlexRay Interface 的调用。它通过 ComM_BusSM_ModeIndication 返回总线模式,并通过 BswM_FrSM_CurrentState 报告其详细状态 [SWS_FrSM_00096]。它可选地使用 DEM、DET 和 FrNm 以及其他 FrIf 服务 [SWS_FrSM_00097]。FrSm_Init 将所有集群状态机置于 FRSM_READY (SWS FrSM 第35页)。

frsm_kontext ComM ComM FrSM FrSM (每个 FlexRay 集群一个状态机) ComM->FrSM FrSM_RequestComMode FrSM_GetCurrentComMode BswM BswM BswM->FrSM FrSm_SetEcuPassive FrSm_AllSlots SchM SchM SchM->FrSM FrSM_MainFunction_<FrSMCluster.ShortName> FrSM->ComM ComM_BusSM_ModeIndication FrSM->BswM BswM_FrSM_CurrentState FrIf FrIf FrSM->FrIf FrIf_StartCommunication, FrIf_AllowColdstart, FrIf_HaltCommunication, FrIf_SetTransceiverMode, FrIf_SendWUP, FrIf_AllSlots, … Dem Dem FrSM->Dem Dem_SetEventStatus Det Det FrSM->Det Det_ReportError FrNm FrNm FrSM->FrNm FrNm_StartupError CDD <Cdd> (optional) FrSM->CDD <Cdd>_SyncLossErrorIndication

上下文图:ComM 和 BswM 进行控制,SchM 提供时钟节拍,FrIf 执行;错误传递至 DEM、DET、FrNm 以及可选的 CDD。来源:[SWS_FrSM_00096]、[SWS_FrSM_00097]

FrSM_RequestComMode 仅保存请求。只有集群的主函数才会处理该请求 (SWS FrSM 第36页, [SWS_FrSM_00118])。当收到 FullCom 请求时,条件 WUReason 决定 FrSM 是自行发送唤醒模式、将单侧唤醒转发到第二个通道还是直接启动。在启动过程中,它调用 FrIf_StartCommunication,对于冷启动 ECU 还会额外调用 FrIf_AllowColdstart。当处于 POC normal active 时,它切换至 FRSM_ONLINE (SWS FrSM 第20页, SWS FrSM 第52页)。如果从 FullCom 状态请求 NoCom,FrSM 在调用中便会暂停通信。在 t_TrcvStdbyDelay 之后,它将收发器置于待机状态,并在 FRSM_READY 之后返回 [SWS_FrSM_00209]。

frsm_zustand cluster_haupt Hauptautomat je FlexRay-Cluster cluster_ecu 并行:ECU 被动模式(所有集群) start READY FRSM_READY start->READY FrSm_Init (T00) WAKEUP FRSM_WAKEUP READY->WAKEUP FullCom angefordert, eigenes Wecken STARTUP FRSM_STARTUP READY->STARTUP FullCom angefordert, kein eigenes Wecken WAKEUP->STARTUP wakeupFinished KEYSLOT FRSM_KEYSLOT_ONLY STARTUP->KEYSLOT POC normal active, 仅关键时隙 ONLINE FRSM_ONLINE (FullCom) STARTUP->ONLINE POC normal active KEYSLOT->ONLINE FrSm_AllSlots HALT FRSM_HALT_REQ KEYSLOT->HALT NoCom LOWNUM FRSM_LOW_NUMBER_OF_COLDSTARTERS (FullCom) ONLINE->LOWNUM Interpretation: lowNumberOfColdstarters OPASSIVE FRSM_ONLINE_PASSIVE ONLINE->OPASSIVE Interpretation: POC normal passive ONLINE->HALT NoCom LOWNUM->ONLINE Interpretation: genug Kaltstarter LOWNUM->HALT NoCom OPASSIVE->ONLINE Interpretation: wieder normal active OPASSIVE->HALT NoCom HALT->READY t_TrcvStdbyDelay 已超时 或 FrSMTrcvStdbyDelay = 0 ECUACT FRSM_ECU_ACTIVE ECUPAS FRSM_ECU_PASSIVE ECUACT->ECUPAS FrSm_SetEcuPassive(TRUE) ECUPAS->ECUACT FrSm_SetEcuPassive(FALSE)

状态图:每个集群的八个主状态以及并行的 ECU 被动模式。至 FRSM_ONLINE_PASSIVE 和 FRSM_LOW_NUMBER_OF_COLDSTARTERS 的转换属于推断。来源:SWS FrSM 第18页、SWS FrSM 第27页

对于 ComM,FullCom 仅在 FRSM_ONLINE 和 FRSM_LOW_NUMBER_OF_COLDSTARTERS 中有效 (SWS FrSM 第38页)。BswM 可以使用两种特殊运行模式。FrSm_AllSlots 终止仅密钥时隙运行模式 [SWS_FrSM_00172]。FrSm_SetEcuPassive 将所有集群切换为纯接收运行模式 [SWS_FrSM_00174]。FrSM_BswM_StateType 组合报告这两个维度 [SWS_FrSM_00199]。在 R20-11 中,部分函数仍称为 FrSm_…,且服务 ID 与后续版本不同 [SWS_FrSM_00020]。

在发生错误时,FrSM 会报告开发错误,例如 FRSM_E_UNINIT 或 FRSM_E_INV_HANDLE [SWS_FrSM_91001]。如果同步未能成功,它会调用 FrNm_StartupError。它可选地通过 <Cdd>_SyncLossErrorIndication 报告同步丢失 [SWS_FrSM_00190]。

角色:位于 ComM、BswM 和 FlexRay Interface 之间的总线状态管理器

FlexRay 状态管理器 (FrSM) 将每个 FlexRay 集群的 ComM 通信请求转换为对 FlexRay Interface 的控制调用。ComM 通过 FrSM_RequestComMode 为 NetworkHandleType 请求 ComM_ModeType [SWS_FrSM_00020]。FrSM 通过 ComM_BusSM_ModeIndication 返回达到的总线模式,并通过 BswM_FrSM_CurrentState 向 BswM 报告其详细状态 [SWS_FrSM_00096]。它绝不直接控制控制器和收发器,而是使用 FrIf 函数,这些函数在规范中被绑定为功能元素,例如 FE_START (FrIf_StartCommunication) 或 FE_HALT (FrIf_HaltCommunication) (SWS FrSM 第22页)。

此外,FrSM 还使用可选服务:Dem_SetEventStatus、Det_ReportError、FrIf_AllSlots、FrIf_GetNumOfStartupFrames、FrIf_GetWakeupRxStatus、FrIf_SetWakeupChannel 和 FrNm_StartupError [SWS_FrSM_00097]。其类型导入自 ComM、ComStack_Types、DEM、Fr 和 FrIf 等 [SWS_FrSM_00095]。BswM 也会对 FrSM 进行主动控制。例如,对于诊断用例,它可以通过 FrSm_SetEcuPassive() 将其置于被动模式 (EXP ModeMgmt 第36页)。

frsm_kontext ComM ComM FrSM FrSM (每个 FlexRay 集群一个状态机) ComM->FrSM FrSM_RequestComMode FrSM_GetCurrentComMode BswM BswM BswM->FrSM FrSm_SetEcuPassive FrSm_AllSlots SchM SchM SchM->FrSM FrSM_MainFunction_<FrSMCluster.ShortName> FrSM->ComM ComM_BusSM_ModeIndication FrSM->BswM BswM_FrSM_CurrentState FrIf FrIf FrSM->FrIf FrIf_StartCommunication, FrIf_AllowColdstart, FrIf_HaltCommunication, FrIf_SetTransceiverMode, FrIf_SendWUP, FrIf_AllSlots, … Dem Dem FrSM->Dem Dem_SetEventStatus Det Det FrSM->Det Det_ReportError FrNm FrNm FrSM->FrNm FrNm_StartupError CDD <Cdd> (optional) FrSM->CDD <Cdd>_SyncLossErrorIndication

上下文图:FrSM 位于请求方 ComM/BswM、时钟源 SchM 和执行方 FrIf 之间,并将错误报告给 DEM、DET、FrNm 以及可选的 CDD。来源:[SWS_FrSM_00096]、[SWS_FrSM_00097]、[SWS_FrSM_00118]、[SWS_FrSM_00190]

每个集群的状态机与并行的 ECU 被动模式

FrSM 为每个集群维护一个具有八个状态的独立状态机:FRSM_READY、FRSM_WAKEUP、FRSM_STARTUP、FRSM_HALT_REQ、FRSM_ONLINE、FRSM_ONLINE_PASSIVE、FRSM_KEYSLOT_ONLY 和 FRSM_LOW_NUMBER_OF_COLDSTARTERS。每个状态对应于控制器的一个 POC 状态:

  • FRSM_ONLINE 对应于具有完整通信的 POC:normal active。
  • FRSM_ONLINE_PASSIVE 对应于 POC:normal passive。由于时钟同步错误,在此状态下不发送也不接收任何数据。
  • 在 FRSM_KEYSLOT_ONLY 中,仅允许在密钥时隙中发送。

该对应关系由 SWS FrSM 第18页 描述。状态转换以表格形式定义,FrSM 按照其中规定的顺序执行各项操作 (SWS FrSM 第24页)。

与此并行存在状态 FRSM_ECU_ACTIVE 和 FRSM_ECU_PASSIVE (SWS FrSM 第18页)。FrSm_SetEcuPassive 将 ECU 的所有集群统一切换到纯接收运行模式或切换回来 [SWS_FrSM_00174]。如果某个集群此时未处于 FRSM_READY,FrSM 会为其执行 FE_TRCV_NORMAL (SWS FrSM 第40页)。FrSM_BswM_StateType 映射了这两个维度:针对每个主状态,都存在一个带有后缀 _ECU_PASSIVE 的值,范围从 FRSM_BSWM_READY (0x00) 到 FRSM_LOW_NUMBER_OF_COLDSTARTERS_ECU_PASSIVE (0x0F) [SWS_FrSM_00199]。这两个被动概念切勿混淆。ONLINE_PASSIVE 是同步故障的结果,而 ECU_PASSIVE 则是预期的接收运行模式。

对外而言,只有 FrSM_GetCurrentComMode 提供的模式才有效。COMM_FULL_COMMUNICATION 仅在 FRSM_ONLINE 和 FRSM_LOW_NUMBER_OF_COLDSTARTERS 中有效,在所有其他状态下均为 COMM_NO_COMMUNICATION (SWS FrSM 第38页, [SWS_FrSM_00024])。FlexRay 上不支持 SilentCom (SWS FrSM 第18页)。

frsm_zustand cluster_haupt Hauptautomat je FlexRay-Cluster cluster_ecu 并行:ECU 被动模式(所有集群) start READY FRSM_READY start->READY FrSm_Init (T00) WAKEUP FRSM_WAKEUP READY->WAKEUP FullCom angefordert, eigenes Wecken STARTUP FRSM_STARTUP READY->STARTUP FullCom angefordert, kein eigenes Wecken WAKEUP->STARTUP wakeupFinished KEYSLOT FRSM_KEYSLOT_ONLY STARTUP->KEYSLOT POC normal active, 仅关键时隙 ONLINE FRSM_ONLINE (FullCom) STARTUP->ONLINE POC normal active KEYSLOT->ONLINE FrSm_AllSlots HALT FRSM_HALT_REQ KEYSLOT->HALT NoCom LOWNUM FRSM_LOW_NUMBER_OF_COLDSTARTERS (FullCom) ONLINE->LOWNUM Interpretation: lowNumberOfColdstarters OPASSIVE FRSM_ONLINE_PASSIVE ONLINE->OPASSIVE Interpretation: POC normal passive ONLINE->HALT NoCom LOWNUM->ONLINE Interpretation: genug Kaltstarter LOWNUM->HALT NoCom OPASSIVE->ONLINE Interpretation: wieder normal active OPASSIVE->HALT NoCom HALT->READY t_TrcvStdbyDelay 已超时 或 FrSMTrcvStdbyDelay = 0 ECUACT FRSM_ECU_ACTIVE ECUPAS FRSM_ECU_PASSIVE ECUACT->ECUPAS FrSm_SetEcuPassive(TRUE) ECUPAS->ECUACT FrSm_SetEcuPassive(FALSE)

状态图:每个集群的主状态机,包含路径唤醒 → 启动 → 在线以及停止 → 就绪,此外还有对所有集群通用的 ECU 被动模式。推断:至 FRSM_ONLINE_PASSIVE 和 FRSM_LOW_NUMBER_OF_COLDSTARTERS 的转换是由状态表和条件派生而来的。来源:SWS FrSM 第27页、SWS FrSM 第18页、SWS FrSM 第20页、[SWS_FrSM_00209]

从 FrSm_Init 到完全通信:唤醒与启动

FrSm_Init 为同步且不可重入。该函数接收一个指向 FrSM_ConfigType 的指针,即实现特定的 Post-Build 配置 ([SWS_FrSM_00013], [SWS_FrSM_00198])。它将所有集群状态机置于 FRSM_READY(转换 T00)并保存配置地址。如果 FrSMDevErrorDetect 处于激活状态,它还会记录初始化成功 (SWS FrSM 第35页)。

FrSM_RequestComMode 以异步方式工作。该函数将期望的模式保存为 reqComMode。只有在相关集群状态机下一次运行 FrSM_MainFunction_<FrSMCluster.ShortName> 时才会对其进行处理 (SWS FrSM 第36页)。每个集群都有一个主函数,由 SchM_FrSm.h [SWS_FrSM_00118] 提供。其调用周期可能遵循参数 FrSMMainFunctionCycleTime (SWS FrSM 第62页)。 问题 (未决)

在 FRSM_READY 中接收到 FullCom 请求时,FrSM 会对条件 WUReason 进行评估。如果设置了 FrSMCheckWakeupReason,它会通过 FrIf_GetTransceiverWUReason 查询每个收发器。结果为 NO_WU_BY_BUS、PARTIAL_WU_BY_BUS 或 ALL_WU_BY_BUS;如果不进行检查,则为 NO_WU_BY_BUS (SWS FrSM 第20页)。如果 ECU 由总线唤醒,则无需自行唤醒即可启动 (SWS FrSM 第52页)。如果双通道节点上的唤醒仅到达一个通道,FE_SET_WU_CHANNEL_FORWARD 会将其转发到另一个通道 (SWS FrSM 第22页, SWS FrSM 第56页)。

frsm_weckentscheidung start req reqComMode = FullCom in FRSM_READY start->req chk FrSMCheckWakeupReason? req->chk nobus WUReason := NO_WU_BY_BUS chk->nobus false query FrIf_GetTransceiverWUReason je Transceiver chk->query true wuecu Interpretation: FrSMIsWakeupEcu? nobus->wuecu wu WUReason? query->wu wu->wuecu NO_WU_BY_BUS forward FRSM_WAKEUP: FE_SET_WU_CHANNEL_FORWARD, FE_WAKEUP (anderer Kanal) wu->forward PARTIAL_WU_BY_BUS (Zweikanalknoten) startup FRSM_STARTUP: FE_START, ggf. FE_ALLOW_COLDSTART wu->startup ALL_WU_BY_BUS wakeup FRSM_WAKEUP: FE_SET_WU_CHANNEL_INITIAL, FE_WAKEUP wuecu->wakeup 是 wuecu->startup 不 wakeup->startup wakeupFinished forward->startup wakeupFinished

活动图:由 WUReason 决定 FrSM 是自行唤醒、转发唤醒还是直接启动。推断:非唤醒 ECU 的分支是从 FrSMIsWakeupEcu 派生而来的。来源:SWS FrSM 第20页、SWS FrSM 第22页、SWS FrSM 第54页

在 FRSM_WAKEUP 中,FrSM 通过 FE_WAKEUP 发送唤醒模式,即每个控制器 FrIf_SendWUP。它会重复此过程,直到达到 FrSMNumWakeupPatterns 或检测到总线通信 (busTrafficDetected)。如果控制器由于错误进入 HALT,传输将中断 (SWS FrSM 第27页)。

frsm_weckmuster start init Eintritt in FRSM_WAKEUP: wakeupCounter := 1 start->init cond wakeupCounter < FrSMNumWakeupPatterns 且 busTrafficDetected = false? init->cond wait 等待直至集群的所有控制器 处于 FR_READY cond->wait 是 done wakeupFinished = true cond->done 不 halt 控制器是否因 错误而处于 HALT? wait->halt status vPOC!WakeupStatus? halt->status 不 halt->done ja: Abbruch bus busTrafficDetected := true status->bus FR_WAKEUP_RECEIVED_HEADER 或 FR_WAKEUP_RECEIVED_WUP tx wakeupTransmitted := true status->tx FR_WAKEUP_TRANSMITTED notx wakeupTransmitted := false status->notx 否则 again busTrafficDetected = false 且 wakeupCounter < FrSMNumWakeupPatterns? bus->again tx->again notx->again fe FE_WAKEUP: FrIf_SendWUP je Controller again->fe 是 inc 增加 wakeupCounter again->inc 不 fe->inc inc->cond

活动图:重复发送唤醒模式,并评估 vPOC!WakeupStatus,在控制器发生 HALT 时中止。来源:SWS FrSM 第27页、SWS FrSM 第18页

启动始于 FrIf_StartCommunication。FrSM 仅在 FrSMIsColdstartEcu 时调用 FrIf_AllowColdstart (SWS FrSM 第22页)。随后它向 BswM 报告 FRSM_STARTUP。一旦 POC 状态达到 normal active,便会接着执行 FrIf_SetState(FRIF_GOTO_ONLINE)、报告 FRSM_ONLINE 以及向 ComM 指示模式 (SWS FrSM 第50页, SWS FrSM 第52页)。

单通道唤醒与启动直至 FRSM_ONLINEComMBswMSchMFrSMFrIfDemFrSM_RequestComMode(NetworkHandle,COMM_FULL_COMMUNICATION)E_OKreqComMode gespeichert,在主函数中评估Use Case: Wecken (FRSM_WAKEUP)FrSM_MainFunction_<FrSMCluster.ShortName>loop适用于集群的所有控制器FrIf_GetTransceiverWUReason(CtrlIdx, ChnlIdx,TrcvWUReasonPtr)FRTRCV_WU_POWER_ONFrIf_SetTransceiverMode(CtrlIdx, ChnlIdx,FRTRCV_TRCVMODE_NORMAL)FrIf_SendWUP(CtrlIdx)BswM_FrSM_CurrentState(FRSM_BSWM_WAKEUP)FrSM_MainFunction_<FrSMCluster.ShortName>FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr)FrIf_GetWakeupRxStatus(CtrlIdx)FR_POCSTATE_WAKEUPUse Case: Anlauf (FRSM_STARTUP)FrSM_MainFunction_<FrSMCluster.ShortName>loop适用于集群的所有控制器FrIf_StartCommunication(CtrlIdx)optFrSMIsColdstartEcuFrIf_AllowColdstart(CtrlIdx)BswM_FrSM_CurrentState(FRSM_BSWM_STARTUP)Use Case: Vollkommunikation (FRSM_ONLINE)FrSM_MainFunction_<FrSMCluster.ShortName>FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr)FR_POCSTATE_NORMAL_ACTIVEDem_SetEventStatus(FRSM_E_CLUSTER_STARTUP,PASSED)FrIf_SetState(ClstIdx, FRIF_GOTO_ONLINE)BswM_FrSM_CurrentState(FRSM_BSWM_ONLINE)ComM_BusSM_ModeIndication(NetworkHandle,COMM_FULL_COMMUNICATION)

时序图:单通道唤醒与启动直至 FRSM_ONLINE,分布在主函数的多次运行中。推断:单次运行内的顺序是根据规范图示重构并简化的。来源:SWS FrSM 第50页、SWS FrSM 第52页、[SWS_FrSM_00118]

仅密钥时隙运行模式、所有时隙的释放与少数冷启动节点

如果控制器配置了 pKeySlotOnlyEnabled,启动首先结束于 FRSM_KEYSLOT_ONLY。该状态对应于 vPOCSlotMode ≠ AllSlots 的 POC:normal active (SWS FrSM 第18页, SWS FrSM 第55页)。通过 FrSm_AllSlots [SWS_FrSM_00172] 退出该状态。该函数为集群的每个控制器调用 FrIf_AllSlots,并且仅在所有调用均返回 E_OK 时才返回 E_OK。它可以在预编译期通过 FrSMAllSlotsSupport 禁用 (SWS FrSM 第41页)。根据规范图示,由 BswM 释放完全运行模式。在此之后,FrSM 才会向 ComM 报告 FRSM_ONLINE 和 FullCom (SWS FrSM 第57页)。

以仅关键时隙模式(Key-Slot-Only 模式)启动并释放所有时隙ComMBswMSchMFrSMFrIfUse Case: Anlauf endet in FRSM_KEYSLOT_ONLYFrSM_MainFunction_<FrSMCluster.ShortName>loop适用于集群的所有控制器FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr)FR_POCSTATE_NORMAL_ACTIVE,SlotMode = FR_SLOTMODE_KEYSLOTFrIf_SetState(ClstIdx, FRIF_GOTO_ONLINE)BswM_FrSM_CurrentState(FRSM_BSWM_KEYSLOT_ONLY)对 ComM 仍适用 NoCom(FrSM_GetCurrentComMode)Use Case: Freigabe aller SlotsFrSm_AllSlots(NetworkHandle)loop适用于集群的所有控制器FrIf_AllSlots(CtrlIdx)E_OKE_OK(仅当所有调用均为 E_OK 时)FrSM_MainFunction_<FrSMCluster.ShortName>FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr)FR_POCSTATE_NORMAL_ACTIVE,SlotMode = FR_SLOTMODE_ALLBswM_FrSM_CurrentState(FRSM_BSWM_ONLINE)ComM_BusSM_ModeIndication(NetworkHandle,COMM_FULL_COMMUNICATION)

时序图:两阶段启动:首先仅密钥时隙,然后通过 FrSm_AllSlots 释放所有时隙。规范图示将 BswM 消息标记为 FRSM_ONLINE_KEYSLOT_ONLY,此处为 R20-11 取值 FRSM_BSWM_KEYSLOT_ONLY。来源:SWS FrSM 第57页、SWS FrSM 第55页、[SWS_FrSM_00172]、[SWS_FrSM_00199]

FRSM_LOW_NUMBER_OF_COLDSTARTERS 表示完全通信,在此情况下集群仅通过同步帧进行同步 (SWS FrSM 第18页)。当 FrIf_GetNumOfStartupFrames() 报告的启动帧少于可选参数 FrSMMinNumberOfColdstarter 指定的数量时,条件 lowNumberOfColdstarters 得到满足 (SWS FrSM 第20页)。

返回 NoCom 与集群定时器

当状态机处于 FRSM_ONLINE、FRSM_KEYSLOT_ONLY、FRSM_LOW_NUMBER_OF_COLDSTARTERS 或 FRSM_ONLINE_PASSIVE 时,均可请求 NoCom。在这种情况下,无需等待主函数,仅由 FrSM_RequestComMode 便会处理该状态转换 (SWS FrSM 第36页)。这包括 FrIf_SetState(FRIF_GOTO_OFFLINE)、FrIf_HaltCommunication 以及向 BswM 发送消息 HALT_REQ。在后续的运行中,FrSM 向 ComM 报告 NoCom,重新初始化控制器,将收发器置于 STANDBY 并报告 READY (SWS FrSM 第58页)。

从 FullCom 迁移至 NoComComMBswMSchMFrSMFrIfFrSM_RequestComMode(NetworkHandle,COMM_NO_COMMUNICATION)源状态为 FullCom 状态:在调用中立即转换FrIf_SetState(CtrlIdx, FRIF_GOTO_OFFLINE)FrIf_HaltCommunication(CtrlIdx)BswM_FrSM_CurrentState(FRSM_BSWM_HALT_REQ)E_OKFrSM_MainFunction_<FrSMCluster.ShortName>FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr)ComM_BusSM_ModeIndication(NetworkHandle,COMM_NO_COMMUNICATION)在 t_TrcvStdbyDelay 超时后或立即转换,如果缺少 FrSMTrcvStdbyDelay 或其值为 0FrIf_ControllerInit(CtrlIdx)FrIf_SetTransceiverMode(CtrlIdx, ChnlIdx,STANDBY)BswM_FrSM_CurrentState(FRSM_BSWM_READY)

时序图:从 FullCom 到 NoCom。停止在请求调用中同步发生,重新初始化和待机随后在主函数中延时进行。推断:顺序是从规范图示中重构的。来源:SWS FrSM 第58页、SWS FrSM 第36页、[SWS_FrSM_00209]

FrSM 为每个集群使用多个定时器 (SWS FrSM 第21页):

  • t1 延迟 FrIf_AllowColdstart。在 FrSMDurationT1 = 0 时,调用紧随 FrIf_StartCommunication 之后。
  • t2 决定在经过多长时间后重试启动。
  • t3 监视向 FullCom 的转换。
  • t4 确保双通道节点清除其冷启动禁止位。
  • t_TrcvStdbyDelay 延迟重新初始化和待机。如果未配置 FrSMTrcvStdbyDelay 或其值为 0,则状态机立即从 FRSM_HALT_REQ 转换到 FRSM_READY [SWS_FrSM_00209]。

每个 FrSMCluster 的配置与 R20-11 接口状态

容器 FrSMCluster (1..*) 描述了一个集群,该集群在单个 ECU 上可包含多个控制器。它包含:

  • 定时器 FrSMDurationT1 至 FrSMDurationT4,
  • 角色 FrSMIsColdstartEcu 和 FrSMIsWakeupEcu,
  • FrSMNumWakeupPatterns 和 FrSMStartupRepetitions,
  • 引用 FrSMComMNetworkHandleRef 和 FrSMFrIfClusterRef。

这些内容由 SWS FrSM 第62页 描述。此外,通常可配置的内容还包括用于 FrSM_GetVersionInfo 和 FrSMSyncLossErrorIndicationName 的 FrSMVersionInfoApi (SystemTemplate 第1528页, [SWS_FrSM_00029])。

许多细节内容来自后续版本。对于 R20-11,以需求为准,它们在若干方面存在差异:

  • 这些函数名为 FrSm_Init、FrSm_AllSlots 和 FrSm_SetEcuPassive,可通过 FrSm.h 使用。
  • FrSM_RequestComMode 的服务 ID 为 0x02,且对于不同集群可重入。后续出处提及了 0x40 和其他参数名称。
  • FrSM_GetCurrentComMode 在 R20-11 中的服务 ID 为 0x03。

证据:[SWS_FrSM_00013]、[SWS_FrSM_00020]、[SWS_FrSM_00024]、SWS FrSM 第36页。

发生错误时的行为

针对开发错误定义了以下代码 [SWS_FrSM_91001]:

  • FRSM_E_PARAM_POINTER:无效指针。该服务立即返回。
  • FRSM_E_INV_HANDLE:无效网络句柄。
  • FRSM_E_UNINIT:模块未初始化。
  • FRSM_E_INV_MODE:无效通信模式。
  • FRSM_INIT_FAILED:初始化失败。

某些情况有明确规定。在句柄无效时,FrSm_AllSlots 报告 FRSM_E_INV_HANDLE 并返回 E_NOT_OK (SWS FrSM 第41页)。FrSm_SetEcuPassive 在初始化之前报告开发错误 (SWS FrSM 第40页)。在未预先初始化的情况下,FrSM_GetCurrentComMode 在 R20-11 中返回 E_NOT_OK [SWS_FrSM_00024]。

在总线级别上,FrSM 做出如下响应:

FrSM 将启动状态作为 DEM 事件 FRSM_E_CLUSTER_STARTUP 上报,成功时附带 PASSED(SWS FrSM 第52页)。事件 ID 位于 FrSMClusterDemEventParameterRefs(SWS FrSM 第62页)。可选地,<Cdd>_SyncLossErrorIndication 会通过 true 通知同步丢失。该函数通过 false 指示已重新同步或 FullCom 请求已被撤回 [SWS_FrSM_00190]。若未配置函数名称,则省略此通知(SystemTemplate 第1528页)。

进一步详细证据

基于 R20-11 需求及相关规范条款(部分来自后续版本)的 AI 生成指南。以链接的需求为准;解释性内容已作相应标明。

FlexRay State Manager (FrSM)

Controls the operational states and startup/wakeup of FlexRay clusters.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

函数 FrSm_Init [SWS_FrSM_00013] 📄 PDF

void FrSm_Init (const FrSM_ConfigType* FrSM_ConfigPtr);

Initializes the Flex Ray State Manager.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 4f916985d2dc 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

根据规范 [SWS_FrSM_00013],函数 FrSm_Init 用于初始化 FlexRay State Manager (FrSM)。它具有服务 ID 0x01,并通过头文件 FrSm.h 声明。

用法与参数

FrSm_Init 的执行是同步进行的[SWS_FrSM_00013]。调用恰好需要一个输入参数:

  • FrSM_ConfigPtr:指向类型为 const FrSM_ConfigType* 的所选配置结构的指针,模块的初始化数据通过该指针提供[SWS_FrSM_00013]。

该函数没有返回值(void),并且既未定义输入/输出参数(inout),也未定义纯输出参数(out)[SWS_FrSM_00013]。

并发性与限制

关于执行上下文,该接口被归类为不可重入(Non Reentrant)[SWS_FrSM_00013]。因此,对该函数的同时或嵌套调用是不允许的。解读:该调用通常应在系统初始化期间进行,然后才会使用 FrSM 的常规通信或控制服务。 问题 Q-881936607a7268bd (未决)

错误处理

在元素规范 [SWS_FrSM_00013] 中未列出返回码或特定的错误处理机制(如 DET 或 DEM 消息)。

本使用说明由系统自动创建,完全基于 AUTOSAR R20-11 的规范数据。

实现者指南即将推出(复杂度 I1)

函数 FrSM_RequestComMode [SWS_FrSM_00020] 📄 PDF

Std_ReturnType FrSM_RequestComMode (NetworkHandleType NetworkHandle, ComM_ModeType ComM_Mode);

This API function is used by the Com M to startup or shutdown the communication on a Flex Ray cluster.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 0805fe94c490 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

用法与语义

函数 FrSM_RequestComMode 由通信管理器(ComM)调用,以启动或关闭特定 FlexRay 集群上的通信 [SWS_FrSM_00020]。该接口通过头文件 FrSm.h 声明,并具有服务 ID 0x02 [SWS_FrSM_00020]。由于该服务被指定为异步服务,因此该函数仅确认接受切换请求,而实际的状态转换则在后续处理 [SWS_FrSM_00020]。

参数与返回值

该函数需要两个用于控制通信模式的输入参数 [SWS_FrSM_00020]:

  • NetworkHandle(类型 NetworkHandleType):确定为其请求通信模式的 FlexRay 集群 [SWS_FrSM_00020]。
  • ComM_Mode(类型 ComM_ModeType):包含 ComM 针对指定网络期望的通信模式 [SWS_FrSM_00020]。

类型为 Std_ReturnType 的返回值指示请求检查的结果 [SWS_FrSM_00020]:

并发性与限制

根据规范,FrSM_RequestComMode 针对不同的 FlexRay 集群实现为可重入 [SWS_FrSM_00020]。对于相同的 FlexRay 集群,调用大概不可重入,因此必须避免对同一实例的并发调用。有效载荷中未定义诸如 DET 或 DEM 消息之类的具体错误代码 [SWS_FrSM_00020]。

此使用说明基于 AUTOSAR Classic R20-11 规范自动生成。

实现者指南即将推出(复杂度 I1)

函数 FrSM_GetCurrentComMode [SWS_FrSM_00024] 📄 PDF

Std_ReturnType FrSM_GetCurrentComMode (NetworkHandleType NetworkHandle, ComM_ModeType* ComM_ModePtr);

This API function can be used to determine the current communication mode of a Flex Ray cluster.

函数 FrSM_GetVersionInfo [SWS_FrSM_00029] 📄 PDF

void FrSM_GetVersionInfo (Std_VersionInfoType* versioninfo);

This service returns the version information of this module. The version information includes:  Module Id  Vendor Id  Vendor specific version numbers (BSW00407 ). This function shall be pre compile time configurable On/ Off by the configuration parameter: FRSM_ VERSION_ INFO_ API Hint: If source code for caller and callee of this function is available this function should be realized as a macro. The macro should be defined in the modules header file.

函数 FrSm_AllSlots [SWS_FrSM_00172] 📄 PDF

Std_ReturnType FrSm_AllSlots (NetworkHandleType NetworkHandle);

Service FrSm_AllSlots.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: f8b54cb7f004 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

异步服务函数 FrSm_AllSlots 通过头文件 FrSm.h 提供,用于退出指定 FlexRay 集群的所谓“Key Slot Only Mode” [SWS_FrSM_00172]。

调用和参数:为了标识通信网络,将要为其请求切换模式的相应 FlexRay 集群传递给参数 NetworkHandle [SWS_FrSM_00172]。不存在其他传递参数 [SWS_FrSM_00172]。

返回值和语义:如果切换请求被成功接受,则调用返回 E_OK;如果请求被拒绝,则返回 E_NOT_OK [SWS_FrSM_00172]。由于这是异步操作,因此 E_OK 仅确认接收了任务;转换为所有时隙的完全运行可能在状态管理器上下文中延迟生效。 问题 Q-d559e4ea5183ff7c (未决)

并发性与限制:该函数针对不同的 FlexRay 集群是可重入的 [SWS_FrSM_00172]。针对相同集群,它被设计为不可重入,因此调用方必须同步对同一集群的并行请求。函数描述中未提及 DET 或 DEM 的具体错误代码。

该使用说明自动生成。其基于 AUTOSAR CP R20-11。

函数 FrSm_SetEcuPassive [SWS_FrSM_00174] 📄 PDF

Std_ReturnType FrSm_SetEcuPassive (boolean FrSM_Passive);

This API function can be used to set all Flex Ray clusters of the ECU to a receive AUTOSAR CP R20 - of Document ID : AUTOSAR_S WS_FlexRayStateManager only mode.

类型 FrSM_ConfigType [SWS_FrSM_00198] 📄 PDF

This type contains the implementation - specific post build time configuration structure AUTOSAR CP R20 - of Document ID : AUTOSAR_S WS_FlexRayStateManager that is for Fr SM_ Init.

类型 FrSM_BswM_StateType [SWS_FrSM_00199] 📄 PDF

This type defines the states that are reported to the Bsw

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: a8440a0185d0 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

根据 [SWS_FrSM_00199],枚举类型 FrSM_BswM_StateType 定义了向 BswM(Basic Software Mode Manager)报告的 FlexRay State Manager (FrSM) 状态。该类型的声明和提供通过头文件 FrSm.h 进行[SWS_FrSM_00199]。

协同交互与取值范围

该类型的值与接口 BswM_FrSM_CurrentState 配合使用,以将当前运行和通信状态传递给 BswM 模块[SWS_FrSM_00199]。值范围包括以下枚举值:

  • FRSM_BSWM_READY(0x00)和 FRSM_BSWM_READY_ECU_PASSIVE(0x01)
  • FRSM_BSWM_STARTUP(0x02)和 FRSM_BSWM_STARTUP_ECU_PASSIVE(0x03)
  • FRSM_BSWM_WAKEUP(0x04)和 FRSM_BSWM_WAKEUP_ECU_PASSIVE(0x05)
  • FRSM_BSWM_HALT_REQ(0x06)和 FRSM_BSWM_HALT_REQ_ECU_PASSIVE(0x07)
  • FRSM_BSWM_KEYSLOT_ONLY(0x08)和 FRSM_BSWM_KEYSLOT_ONLY_ECU_PASSIVE(0x09)
  • FRSM_BSWM_ONLINE(0x0A)和 FRSM_BSWM_ONLINE_ECU_PASSIVE(0x0B)
  • FRSM_BSWM_ONLINE_PASSIVE(0x0C)和 FRSM_BSWM_ONLINE_PASSIVE_ECU_PASSIVE(0x0D)
  • FRSM_LOW_NUMBER_OF_COLDSTARTERS(0x0E)和 FRSM_LOW_NUMBER_OF_COLDSTARTERS_ECU_PASSIVE(0x0F)

值得注意的是状态的成对结构:每个基本状态都具有一个常规对应项以及带有后缀 _ECU_PASSIVE 的变体。这大概用于将 FlexRay 集群的通信状态与控制器的被动模式结合报告给 BswM,以便其协调相应的模式切换。 问题 Q-f2d9296e40782b5a (未决)

此文本由 AI 生成,用作参考指引。引用的 AUTOSAR 规范具有权威性。

实现者指南即将推出(复杂度 I1)

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_FrSM
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_FrSM@rel:R20-11#b11241f9
Content hash
b11241f9
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_FlexRayStateManager.pdf#nameddest=SWS_FrSM_00013

主题图

详细视图

请在大纲中选择一个条目。

初始化与状态

This service returns the version information of this module. The version information includes:  Module Id  Vendor Id  Vendor specific version numbers (BSW00407 ). This function shall be pre compile time configurable On/ Off by the configuration parameter: FRSM_ VERSION_ INFO_ API Hint: If source code for caller and callee of this function is available this function should be realized as a macro. The macro should be defined in the modules header file.

void FrSM_GetVersionInfo (Std_VersionInfoType* versioninfo);
FrSm_Init 函数

Initializes the Flex Ray State Manager.

void FrSm_Init (const FrSM_ConfigType* FrSM_ConfigPtr);

服务

Service FrSm_AllSlots.

Std_ReturnType FrSm_AllSlots (NetworkHandleType NetworkHandle);

This API function can be used to determine the current communication mode of a Flex Ray cluster.

Std_ReturnType FrSM_GetCurrentComMode (NetworkHandleType NetworkHandle, ComM_ModeType* ComM_ModePtr);

This API function is used by the Com M to startup or shutdown the communication on a Flex Ray cluster.

Std_ReturnType FrSM_RequestComMode (NetworkHandleType NetworkHandle, ComM_ModeType ComM_Mode);

This API function can be used to set all Flex Ray clusters of the ECU to a receive AUTOSAR CP R20 - of Document ID : AUTOSAR_S WS_FlexRayStateManager only mode.

Std_ReturnType FrSm_SetEcuPassive (boolean FrSM_Passive);

类型

This type defines the states that are reported to the Bsw

This type contains the implementation - specific post build time configuration structure AUTOSAR CP R20 - of Document ID : AUTOSAR_S WS_FlexRayStateManager that is for Fr SM_ Init.