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_ONLINE ComM BswM SchM FrSM FrIf Dem FrSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION) E_OK reqComMode gespeichert, 在主函数中评估 Use Case: Wecken (FRSM_WAKEUP) FrSM_MainFunction_<FrSMCluster.ShortName> loop 适用于集群的所有控制器 FrIf_GetTransceiverWUReason(CtrlIdx, ChnlIdx, TrcvWUReasonPtr) FRTRCV_WU_POWER_ON FrIf_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_WAKEUP Use Case: Anlauf (FRSM_STARTUP) FrSM_MainFunction_<FrSMCluster.ShortName> loop 适用于集群的所有控制器 FrIf_StartCommunication(CtrlIdx) opt FrSMIsColdstartEcu FrIf_AllowColdstart(CtrlIdx) BswM_FrSM_CurrentState(FRSM_BSWM_STARTUP) Use Case: Vollkommunikation (FRSM_ONLINE) FrSM_MainFunction_<FrSMCluster.ShortName> FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr) FR_POCSTATE_NORMAL_ACTIVE Dem_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 模式)启动并释放所有时隙 ComM BswM SchM FrSM FrIf Use Case: Anlauf endet in FRSM_KEYSLOT_ONLY FrSM_MainFunction_<FrSMCluster.ShortName> loop 适用于集群的所有控制器 FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr) FR_POCSTATE_NORMAL_ACTIVE, SlotMode = FR_SLOTMODE_KEYSLOT FrIf_SetState(ClstIdx, FRIF_GOTO_ONLINE) BswM_FrSM_CurrentState(FRSM_BSWM_KEYSLOT_ONLY) 对 ComM 仍适用 NoCom (FrSM_GetCurrentComMode) Use Case: Freigabe aller Slots FrSm_AllSlots(NetworkHandle) loop 适用于集群的所有控制器 FrIf_AllSlots(CtrlIdx) E_OK E_OK(仅当所有调用均为 E_OK 时) FrSM_MainFunction_<FrSMCluster.ShortName> FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr) FR_POCSTATE_NORMAL_ACTIVE, SlotMode = FR_SLOTMODE_ALL BswM_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 迁移至 NoCom ComM BswM SchM FrSM FrIf FrSM_RequestComMode(NetworkHandle, COMM_NO_COMMUNICATION) 源状态为 FullCom 状态: 在调用中立即转换 FrIf_SetState(CtrlIdx, FRIF_GOTO_OFFLINE) FrIf_HaltCommunication(CtrlIdx) BswM_FrSM_CurrentState(FRSM_BSWM_HALT_REQ) E_OK FrSM_MainFunction_<FrSMCluster.ShortName> FrIf_GetPOCStatus(CtrlIdx, POCStatusPtr) ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION) 在 t_TrcvStdbyDelay 超时后或立即转换, 如果缺少 FrSMTrcvStdbyDelay 或其值为 0 FrIf_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页 )。
进一步详细证据
gemini-3.8-flash-low· 2026-10-13 · 德文原文