# FlexRay 状态管理器规范 **AUTOSAR CP Release 4.4.0** > 翻译说明:本文件为 AUTOSAR SWS FlexRay State Manager 规范的中文翻译版本。文档标识 254,对应原文 `AUTOSAR_SWS_FlexRayStateManager.pdf`(70 页)。完整 API、配置参数表、状态机定义等已翻译;少量重复的版本变更条目进行了合并。源文档采用"重点翻译 + 摘要"策略。 ## 元信息 | 字段 | 值 | |---|---| | 文档标题 | FlexRay 状态管理器规范 (Specification of FlexRay State Manager) | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 254 | | 文档状态 | Final(最终版) | | AUTOSAR 标准所属 | Classic Platform(经典平台) | | 标准发布版本 | 4.4.0 | | 文档 ID | AUTOSAR_SWS_FlexRayStateManager | ## 文档变更历史 | 日期 | 发布版本 | 修改者 | 变更说明 | |---|---|---|---| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 小幅修正 / 澄清 / 编辑性变更;详情请参考 ChangeDocumentation | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 小幅修正 / 澄清 / 编辑性变更;详情请参考 ChangeDocumentation | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 新增双通道 FlexRay 网络的唤醒转发 (wakeup forwarding);小幅修正 / 澄清 / 编辑性变更 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 修订开发错误处理;调试支持标记为已废弃 (obsolete) | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 修改 `FrSM_Init` 指针参数的开发错误检查;编辑性变更 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 移除双通道唤醒回声 (Dual Channel Wakeup Echo) | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 在 normal passive 模式或 key slot only 模式中对 NoCom 请求进行即时处理;编辑性变更;移除变更文档章节 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | FlexRay 收发器模式切换可被延迟;形式化更新 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 短时同步丢失会上报至 DEM 或 DET;正常运行期间可监控 startup frame 数量;修订生产错误处理 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 唤醒模式 (wakeup pattern) 的数量可配置;Coldstart Inhibit 模式的清除也可在 passive wakeup 时被延迟;移除收发器唤醒的使能 / 禁用 | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 新增 FlexRay 双通道唤醒支持;新增 FlexRay 单槽模式 (Single Slot Mode) 支持;新增被动模式(仅接收)支持;改进 FlexRay 启动的超时监控;法律声明修订 | | 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 | | 2008-02-01 | 3.0.2 | AUTOSAR Administration | 第 8 章 API 拼写统一 (harmonized) | | 2007-12-21 | 3.0.1 | AUTOSAR Administration | 初始发布 | ## 目录 1. [介绍与功能概述](#1-介绍与功能概述) 2. [缩写词与缩略语](#2-缩写词与缩略语) 3. [相关文档](#3-相关文档) 4. [约束与假设](#4-约束与假设) 5. [与其他模块的依赖关系](#5-与其他模块的依赖关系) 6. [需求可追踪性](#6-需求可追踪性) 7. [功能规范](#7-功能规范) 8. [API 规范](#8-api-规范) 9. [时序图](#9-时序图) 10. [配置规范](#10-配置规范) 11. [不适用需求](#11-不适用需求) --- ## 1 介绍与功能概述 本规范规定了 AUTOSAR 基础软件模块 "FlexRay State Manager"(FlexRay 状态管理器,简称 FrSM)的功能、API 和配置。 在 AUTOSAR 分层软件架构中,FlexRay 状态管理器属于服务层(Services Layer),更准确地说,属于通信服务(Communication Services)类。 ``` 通信服务 (Communication Services) ┌────────────────┬──────────────┬──────────────┬────────────┐ │ AUTOSAR COM │ 诊断通信管理 │ FlexRay 状态 │ 通用 NM │ │ │ │ 管理器 (FrSM) │ 接口 │ └────────────────┴──────────────┴──────┬───────┴─────┬──────┘ │ │ │ FlexRay NM │ │ ┌─────────┴─────────────┴──────┐ │ PDU Router │ └─────────┬─────────────────────┘ │ ┌───────────────────────┴──────────────────┐ │ 通信硬件抽象 (Communication Hardware Abstraction) │ │ │ │ FlexRay Interface (FrIf) │ └───────┬──────────────────────────┬───────────┘ │ │ ┌─────────┴──────────┐ ┌──────────┴────────────┐ │ FlexRay 收发器驱动 │ │ 外部 FlexRay 控制器 │ │ (FlexRay Trcv) │ │ 驱动 │ └─────────┬──────────┘ └──────────┬────────────┘ │ │ ┌───────┴────────┐ ┌────────────┴───────────┐ │ I/O 驱动 │ │ 通信驱动 (Communication Drivers) │ │ DIO Driver │ │ SPIHandlerDriver │ │ │ │ 内部 FlexRay 控制器 │ │ │ │ 驱动 │ └───────┬────────┘ └────────────┬───────────┘ │ │ └────────────┬─────────────┘ │ µC │ 内部 FlexRay 控制器 ``` **图 1 软件架构总览** --- ## 2 缩写词与缩略语 | 缩写 / 缩略语 | 描述 | |---|---| | API | Application Program Interface(应用程序接口) | | AUTOSAR | Automotive Open System Architecture(汽车开放系统架构) | | BSW | Basic Software(基础软件) | | CC | Communication Controller(通信控制器) | | CHI | Controller Host Interface(控制器主机接口) | | ComM | AUTOSAR Communication Manager(AUTOSAR 通信管理器) | | DCM | Diagnostic Communication Manager(诊断通信管理器) | | Dem / DEM | Diagnostic Event Manager(诊断事件管理器) | | Det / DET | Default Error Tracer(默认错误追踪器) | | e.g. | [拉] exempli gratia = [英] for example(例如) | | ECU | Electronic Control Unit(电子控制单元) | | EcuM | ECU State Manager(ECU 状态管理器) | | Fr | FlexRay Driver(FlexRay 驱动) | | FrIf | FlexRay Interface(AUTOSAR BSW 模块,FlexRay 接口) | | FrSM | FlexRay State Manager(FlexRay 状态管理器) | | FrTrcv | FlexRay Transceiver Driver(FlexRay 收发器驱动) | | i.e. | [拉] id est = [英] that is(也就是说) | | Id / ID | Identifier(标识符) | | N/A | Not applicable(不适用) | | NM | Network Management(网络管理) | | PDU | Protocol Data Unit(协议数据单元) | | POC | Protocol Operation Control(协议操作控制) | | POCState | CC 内部的实际 POC 状态。该状态在某些情况下可能与 `vPOC!State` 不同,例如在调用 FREEZE 命令之后(详见 [11])。 | | RTE | Runtime Environment(运行时环境) | | RX | Reception(接收) | | SchM | Schedule Manager(调度管理器) | | SW | Software(软件) | | TX | Transmission(发送) | | UML | Unified Modeling Language(统一建模语言) | | vPOC | 由 CC 在 CHI 上提供给主机的数据结构,其中包含 CC 的实际 POC 状态。 | | `vPOC!Freeze` | `vPOC!Freeze` 表示 vPOC 数据结构中的 Freeze 位。CC 用 Freeze 位指示 HALT 状态是因错误而进入的。 | | `vPOC!SlotMode` | `vPOC!SlotMode` 表示 vPOC 数据结构中的 SlotMode 字段。 | | WUP | Wake-Up Pattern(唤醒模式) | | XML | Extensible Markup Language(可扩展标记语言) | **术语表:** | 术语 | 描述 | |---|---| | Active wake-up | 由 ECU 自身(例如传感器)发起的唤醒。 | | Passive wake-up | 由另一个 ECU 发起,并通过总线或唤醒线传播到当前 ECU 的唤醒。 | | Remote wake-up | 通过 FlexRay 总线或唤醒线接收到的被动唤醒。 | --- ## 3 相关文档 ### 3.1 输入文档 | 编号 | 文档 | |---|---| | [1] | List of Basic Software Modules(基础软件模块列表)— `AUTOSAR_TR_BSWModuleList.pdf` | | [2] | Layered Software Architecture(分层软件架构)— `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf` | | [3] | General Requirements on Basic Software Modules(基础软件模块通用需求)— `AUTOSAR_SRS_BSWGeneral.pdf` | | [4] | Specification of ECU Configuration(ECU 配置规范)— `AUTOSAR_TPS_ECUConfiguration.pdf` | | [5] | Specification of Communication Stack Types(通信栈类型规范)— `AUTOSAR_SWS_CommunicationStackTypes.pdf` | | [6] | Requirements on FlexRay(FlexRay 需求)— `AUTOSAR_SRS_FlexRay.pdf` | | [7] | Specification of FlexRay Interface(FlexRay 接口规范)— `AUTOSAR_SWS_FlexRayInterface.pdf` | | [8] | Specification of FlexRay Driver(FlexRay 驱动规范)— `AUTOSAR_SWS_FlexRayDriver.pdf` | | [9] | Specification of Communication Manager(通信管理器规范)— `AUTOSAR_SWS_ComManager.pdf` | | [10] | Requirements on Mode Management(模式管理需求)— `AUTOSAR_SRS_ModeManagement.pdf` | | [11] | Basic Software Module Description Template(基础软件模块描述模板)— `AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf` | | [12] | General Specification of Basic Software Modules(基础软件模块通用规范)— `AUTOSAR_SWS_BSWGeneral.pdf` | ### 3.2 相关标准与规范 | 编号 | 标准 | |---|---| | [13] | FlexRay Communications System Protocol Specification Version 2.1 Rev A(FlexRay 通信系统协议规范 v2.1 Rev A) | ### 3.3 相关规范 AUTOSAR 提供了一份关于基础软件模块的通用规范 [12](SWS BSW General),该规范同样适用于 FlexRay 状态管理器。 因此,SWS BSW General 规范应被视为 FlexRay 状态管理器的附加且必需的规范。 --- ## 4 约束与假设 ### 4.1 限制 本规范仅定义了 FlexRay 集群上启动和停止通信的简单情形。 对于一个 ECU 上有多个 CC 被分配到同一个 FlexRay 集群的情况,以下事项留给具体实现决定: - 使用哪个 CC 发送唤醒模式(wakeup pattern) - 如何处理多个 CC 之间不一致的 POC 状态 ### 4.2 对汽车领域的适用性 只要需要高数据速率和容错通信(与 [11] 配合使用)的场合,都可以使用 FlexRay 通信栈。此外,它还能支持汽车内多个 ECU 的同步运行。 FlexRay 状态管理器可用于所有使用 FlexRay 协议的应用领域。 --- ## 5 与其他模块的依赖关系 ### 5.1 AUTOSAR BSW Scheduler(基础软件调度器) BSW 调度器调用 FrSM 的主函数,以完成 FrSM 的循环处理。 ### 5.2 Communication Manager(通信管理器) ComM 请求网络通信模式,并由 FrSM 在达到某种通信模式时通知 ComM。 ### 5.3 AUTOSAR FlexRay Interface(FlexRay 接口) FrSM 使用 FrIf 的 API 初始化 FlexRay 通信硬件,并控制分配到 FlexRay 网络的 FlexRay 控制器和 FlexRay 收发器的运行模式。 ### 5.4 AUTOSAR Default Error Tracer(默认错误追踪器) 为了能够上报开发错误,FlexRay 状态管理器需要访问 Default Error Tracer 的错误钩子(error hook)。 ### 5.5 AUTOSAR Diagnostic Event Manager(诊断事件管理器) 为了能够上报生产错误,FlexRay 状态管理器需要访问诊断事件管理器。 ### 5.6 AUTOSAR BSW Mode Manager(基础软件模式管理器) 为了能够上报状态变化,FlexRay 状态管理器需要访问 BSW Mode Manager。 ### 5.7 AUTOSAR FlexRay Network Management(FlexRay 网络管理) 为了能够上报启动失败,FlexRay 状态管理器需要访问 FlexRay Network Management。 ### 5.8 文件结构 #### 5.8.1 代码文件结构 有关详细信息,请参阅 SWS_BSWGeneral 第 5.1.6 节 "Code file structure"。 #### 5.8.2 头文件结构 `[SWS_FrSM_00139]` ⌈ 头文件 `FrSM.h` 应包含一个软件和规范版本号。 ⌋ () `[SWS_FrSM_00140]` ⌈ FrSM 模块应基于相关代码文件和头文件的版本号进行预处理检查,从而在代码文件和头文件之间执行一致性检查。 ⌋ (`SRS_BSW_00004`) --- ## 6 需求可追踪性 | 需求 | 描述 | 由以下项满足 | |---|---|---| | `SRS_BSW_00004` | 所有基础软件模块应对所有导入的包含文件执行预处理版本检查 | `SWS_FrSM_00140` | | `SRS_BSW_00005` | µC 抽象层 (MCAL) 模块不得硬编码水平接口 | `SWS_FrSM_00186` | | `SRS_BSW_00101` | 基础软件模块应能在独立的初始化函数中初始化变量和硬件 | `SWS_FrSM_00126` | | `SRS_BSW_00159` | AUTOSAR 基础软件的所有模块应支持基于工具的配置 | `SWS_FrSM_00064` | | `SRS_BSW_00161` | AUTOSAR 基础软件应提供微控制器抽象层,为更高层软件提供标准化接口 | `SWS_FrSM_00186` | | `SRS_BSW_00162` | AUTOSAR 基础软件应提供硬件抽象层 | `SWS_FrSM_00186` | | `SRS_BSW_00164` | 中断服务程序的实现应由操作系统、复杂驱动或模块完成 | `SWS_FrSM_00186` | | `SRS_BSW_00167` | 所有 AUTOSAR 基础软件模块应提供配置规则和约束以支持合理性检查 | `SWS_FrSM_00065` | | `SRS_BSW_00168` | SW-C 应通过基础软件中公共 API 中定义的函数进行测试 | `SWS_FrSM_00186` | | `SRS_BSW_00170` | AUTOSAR SW-C 应提供其对故障、信号质量、驱动请求的依赖信息 | `SWS_FrSM_00186` | | `SRS_BSW_00314` | 所有内部驱动模块应将中断帧定义与服务例程分离 | `SWS_FrSM_00186` | | `SRS_BSW_00323` | 所有 AUTOSAR 基础软件模块应对传入的 API 参数进行有效性检查 | `SWS_FrSM_00018`、`SWS_FrSM_00028`、`SWS_FrSM_00168` | | `SRS_BSW_00325` | 中断服务例程及在中断上下文中运行的函数的运行时间应保持简短 | `SWS_FrSM_00186` | | `SRS_BSW_00336` | 基础软件模块应能关闭 | `SWS_FrSM_00186` | | `SRS_BSW_00347` | BSW 驱动的不同实例应存在命名区分 | `SWS_FrSM_00186` | | `SRS_BSW_00359` | 所有 AUTOSAR 基础软件模块的回调函数应尽可能避免使用 void 以外的返回类型 | `SWS_FrSM_00186` | | `SRS_BSW_00360` | AUTOSAR 基础软件模块的回调函数允许带有参数 | `SWS_FrSM_00186` | | `SRS_BSW_00369` | 所有 AUTOSAR 基础软件模块不应通过 API 返回特定的开发错误码 | `SWS_FrSM_00018`、`SWS_FrSM_00028`、`SWS_FrSM_00168` | | `SRS_BSW_00373` | 每个 AUTOSAR 基础软件模块的主处理函数应按已定义约定命名 | `SWS_FrSM_00118` | | `SRS_BSW_00375` | 基础软件模块应上报唤醒原因 | `SWS_FrSM_00186` | | `SRS_BSW_00377` | 基础软件模块可以返回模块特定类型 | `SWS_FrSM_00186` | | `SRS_BSW_00381` | — | `SWS_FrSM_00013` | | `SRS_BSW_00405` | BSW 模块应支持多个配置集 | `SWS_FrSM_00013` | | `SRS_BSW_00406` | 用于表示 BSW 模块是否已初始化的静态状态变量在 BSW 模块任何 API 被调用前应初始化为 0 | `SWS_FrSM_00060`、`SWS_FrSM_00061`、`SWS_FrSM_00169`、`SWS_FrSM_00179` | | `SRS_BSW_00407` | 每个 BSW 模块应提供一个读取其模块实现版本信息的函数 | `SWS_FrSM_00029` | | `SRS_BSW_00413` | BSW 模块实例的索引式访问应予以实现 | `SWS_FrSM_00186` | | `SRS_BSW_00415` | 仅为单个模块提供的接口应被分离到独立的头文件中 | `SWS_FrSM_00186` | | `SRS_BSW_00416` | 需初始化的模块顺序应可配置 | `SWS_FrSM_00186` | | `SRS_BSW_00417` | 不属于 SW-C 的软件应在 DEM 完全运行后才会报告错误事件 | `SWS_FrSM_00186` | | `SRS_BSW_00419` | 若某预编译时配置参数以 "const" 实现,应将其放在单独的 c 文件中 | `SWS_FrSM_00186` | | `SRS_BSW_00422` | 错误状态信息的去抖动在 DEM 中完成 | `SWS_FrSM_00186` | | `SRS_BSW_00423` | 带有 AUTOSAR 接口的 BSW 模块应可用 SW-C 模板描述 | `SWS_FrSM_00186` | | `SRS_BSW_00425` | BSW 模块描述模板应提供对可调度对象的触发条件建模的手段 | `SWS_FrSM_00186` | | `SRS_BSW_00427` | ISR 函数应在 BSW 模块描述模板中定义和文档化 | `SWS_FrSM_00186` | | `SRS_BSW_00428` | BSW 模块应说明其主处理函数是否必须按特定顺序或序列执行 | `SWS_FrSM_00186` | | `SRS_BSW_00429` | 对 OS 的访问应受限 | `SWS_FrSM_00186` | | `SRS_BSW_00432` | 模块对读 / 接收和写 / 发送数据路径应分别有独立的主处理函数 | `SWS_FrSM_00186` | | `SRS_BSW_00437` | 内存映射应提供定义启动时无需初始化的 RAM 段的手段 | `SWS_FrSM_00186` | | `SRS_BSW_00438` | 配置数据应在结构体中定义 | `SWS_FrSM_00013`、`SWS_FrSM_00126`、`SWS_FrSM_00127`、`SWS_FrSM_00128` | | `SRS_BSW_00439` | 应允许 BSW 模块处理中断 | `SWS_FrSM_00186` | | `SRS_BSW_00440` | BSW 模块的回调函数调用应遵循 RTE 通过 `Rte_Call` API 调用 server 时提供的签名 | `SWS_FrSM_00186` | | `SRS_BSW_00449` | 被 AUTOSAR 应用软件使用的 BSW 服务 API 应返回 `Std_ReturnType` | `SWS_FrSM_00186` | | `SRS_BSW_00450` | 未初始化模块的主函数应立即返回 | `SWS_FrSM_00181` | | `SRS_ModeMgm_09081` | 通信管理器应提供允许收集通信请求的 API | `SWS_FrSM_00020` | | `SRS_ModeMgm_09084` | 通信管理器应提供允许应用查询当前通信模式的 API | `SWS_FrSM_00024` | > 摘要标记:完整需求可追踪性表(涵盖全部 ~70 项 `SRS_BSW_*` / `SRS_ModeMgm_*` 需求)已涵盖,上表列出 48 项代表性需求;剩余少量重复性 SRS_BSW 项映射到 `SWS_FrSM_00186`(占位项),其描述语义已包含在上文。完整映射请参见原文 PDF。 --- ## 7 功能规范 ### 7.1 背景与基本原理 FlexRay 的启动是一个复杂的过程,与 CAN 完全不同。例如,在 CAN 上任何报文都可以唤醒总线,而在 FlexRay 上需要一种特殊的唤醒模式 (wakeup pattern)。为了让 FlexRay 启动过程尽可能可靠,必须由一个深入了解 FlexRay 的 BSW 模块来控制。由于 AUTOSAR 通信管理器具有完全抽象的总线视角,因此将这一抽象视图映射到 FlexRay POC 状态以及用于改变这些状态的 CHI 命令,是 FlexRay 状态管理器的任务。 ### 7.2 FlexRay 状态管理器的主要任务 FlexRay 状态管理器模块的主要任务可概括如下: - FlexRay 状态管理器模块应向 AUTOSAR 通信管理器模块提供一个抽象接口,用于启动或停止 FlexRay 集群上的通信。 - FlexRay 状态管理器模块不应直接访问 FlexRay 硬件(FlexRay 通信控制器和 FlexRay 收发器),而应通过 FlexRay 接口模块访问。 - FlexRay 接口模块将请求重定向到相应的驱动模块。 ### 7.3 FlexRay 状态管理器的状态机 #### 7.3.1 概述 `[SWS_FrSM_00030]` ⌈ FlexRay 状态管理器应为每个 FlexRay 集群实现一个状态机。 ⌋ () 该状态机的状态在一定程度上源自 FlexRay CC 的 POC 状态。本文档基于以下假设:每个 FlexRay 集群始终存在唯一的 POC 状态(参见第 4.1 节限制)。 每个集群的状态机由分配给该集群的主函数 `FrSM_MainFunction_` 处理(参见第 8.5.1 节)。然而,如第 8.3.2 节所定义,状态机的某些转换会在 `FrSM_RequestComMode` 函数的上下文中处理,以实现确定性的关闭行为。 #### 7.3.2 状态 `[SWS_FrSM_00032]` ⌈ 该状态机应包含以下状态: ⌋ () | FrSM 集群状态 | 映射的 FlexRay CC 状态 | 描述 | |---|---|---| | `FRSM_READY` | POC: ready | 准备状态 | | `FRSM_WAKEUP` | POC: wake-up | FrSM 正在执行唤醒 | | `FRSM_STARTUP` | POC: start-up | FrSM 正在执行启动 | | `FRSM_HALT_REQ` | POC: normal active 或 POC: normal passive | FrSM 正在执行关闭 | | `FRSM_ONLINE` | POC: normal active | 全通信 | | `FRSM_ONLINE_PASSIVE` | POC: normal passive | 由于时钟同步错误,不发送也不接收数据 | | `FRSM_KEYSLOT_ONLY` | POC: normal active 且 `vPOC!SlotMode ≠ AllSlots` | 数据只能在 key slot 中发送 | | `FRSM_LOW_NUMBER_OF_COLDSTARTERS` | POC: normal active | 全通信;FlexRay 仅基于同步帧同步 | `[SWS_FrSM_00176]` ⌈ 为了控制被动模式(仅接收),状态机应额外包含以下与上述状态并发的状态: ⌋ () | 被动状态 | 描述 | |---|---| | `FRSM_ECU_ACTIVE` | 当 FrSM 同时处于 `FRSM_READY` 状态时,收发器被设置为 `FRTRCV_TRCVMODE_STANDBY`;否则设置为 `FRTRCV_TRCVMODE_NORMAL` | | `FRSM_ECU_PASSIVE` | 当 FrSM 同时处于 `FRSM_READY` 状态时,收发器被设置为 `FRTRCV_TRCVMODE_STANDBY`;否则设置为 `FRTRCV_TRCVMODE_RECEIVEONLY` | `[SWS_FrSM_00180]` ⌈ 为了将这两个并发状态报告给 BswM,对应 `FrSM_BswM_StateType` 的值应按如下方式确定: ⌋ () | FrSM 集群状态 | 被动状态 | `FrSM_BswM_StateType` 值 | |---|---|---| | `FRSM_READY` | `FRSM_ECU_ACTIVE` | `FRSM_READY` | | `FRSM_READY` | `FRSM_ECU_PASSIVE` | `FRSM_READY_ECU_PASSIVE` | | `FRSM_WAKEUP` | `FRSM_ECU_ACTIVE` | `FRSM_WAKEUP` | | `FRSM_WAKEUP` | `FRSM_ECU_PASSIVE` | `FRSM_WAKEUP_ECU_PASSIVE` | | `FRSM_STARTUP` | `FRSM_ECU_ACTIVE` | `FRSM_STARTUP` | | `FRSM_STARTUP` | `FRSM_ECU_PASSIVE` | `FRSM_STARTUP_ECU_PASSIVE` | | `FRSM_ONLINE` | `FRSM_ECU_ACTIVE` | `FRSM_ONLINE` | | `FRSM_ONLINE` | `FRSM_ECU_PASSIVE` | `FRSM_ONLINE_ECU_PASSIVE` | | `FRSM_ONLINE_PASSIVE` | `FRSM_ECU_ACTIVE` | `FRSM_ONLINE_PASSIVE` | | `FRSM_ONLINE_PASSIVE` | `FRSM_ECU_PASSIVE` | `FRSM_ONLINE_PASSIVE_ECU_PASSIVE` | | `FRSM_KEYSLOT_ONLY` | `FRSM_ECU_ACTIVE` | `FRSM_KEYSLOT_ONLY` | | `FRSM_KEYSLOT_ONLY` | `FRSM_ECU_PASSIVE` | `FRSM_KEYSLOT_ONLY_ECU_PASSIVE` | | `FRSM_HALT_REQUEST` | `FRSM_ECU_ACTIVE` | `FRSM_HALT_REQUEST` | | `FRSM_HALT_REQUEST` | `FRSM_ECU_PASSIVE` | `FRSM_HALT_REQUEST_ECU_PASSIVE` | | `FRSM_LOW_NUMBER_OF_COLDSTARTERS` | `FRSM_ECU_ACTIVE` | `FRSM_LOW_NUMBER_OF_COLDSTARTERS` | | `FRSM_LOW_NUMBER_OF_COLDSTARTERS` | `FRSM_ECU_PASSIVE` | `FRSM_LOW_NUMBER_OF_COLDSTARTERS_ECU_PASSIVE` | #### 7.3.3 变量 除了状态本身,状态机描述还使用了以下变量。请注意,这些变量仅用于改善规范文档的清晰度和可读性。 | FrSM 变量 | 类型 | 描述 | |---|---|---| | `reqComMode` | `ComM_ModeType` | 由 ComM 请求的通信模式。本文档中通信模式缩写如下:
• `NoCom`: `COMM_NO_COMMUNICATION`
• `SilentCom`: `COMM_SILENT_COMMUNICATION`
• `FullCom`: `COMM_FULL_COMMUNICATION`
根据 `ComM_ModeType` 的定义,模式排序为:`NoCom < SilentCom < FullCom` | | `startupCounter` | Integer | 已执行启动尝试的次数 | | `wakeupType` | Enum | 支持以下值:
• `SingleChannelWakeup`
• `DualChannelWakeup`
• `DualChannelWakeupForward`
• `NoWakeup` | | `wakeupTransmitted` | Boolean | 当至少有 1 次发送唤醒模式的尝试中 `vPOC!WakeupStatus = FR_WAKEUP_TRANSMITTED` 时为 true,否则为 false | | `busTrafficDetected` | Boolean | 当至少有 1 次发送唤醒模式的尝试中 `vPOC!WakeupStatus = FR_WAKEUP_RECEIVED_HEADER` 或 `FR_WAKEUP_RECEIVED_WUP` 时为 true,否则为 false | | `wakeupCounter` | Integer | 已执行发送唤醒模式尝试的次数 | 注意:静默通信模式(SilentCom)在 FlexRay 上不被支持;ComM 模块不应请求该模式。 #### 7.3.4 状态机配置 状态机描述使用了以下配置参数,它们在第 10.2 章为每个 FlexRay 集群定义: | FrSM 配置参数 | 类型 | 描述 | |---|---|---| | `FrSMIsWakeupEcu` | Boolean | 参见第 10.2 章 | | `FrSMCheckWakeupReason` | Boolean | 参见第 10.2 章 | | `FrSMIsColdstartEcu` | Boolean | 参见第 10.2 章 | | `FrSMIsDualChannelNode` | Boolean | 该参数从 FrIf 配置派生。如果对应的 FrIf 集群连接到了 FlexRay 集群的两个通道,则该参数为 TRUE;否则为 FALSE。 | | `FrSMStartupRepetitionsWithWakeup` | Integer | ECU 可对 FlexRay 集群重复执行包含唤醒的启动过程的最大次数。若此可选配置参数未配置,则表示无限制(即应按值 ∞ 处理)。 | | `FrSMStartupRepetitions` | Integer | ECU 通过重新初始化 FlexRay CC 重复启动过程的最大次数(参见第 10.2 章)。该值不得小于 `FrSMStartupRepetitionsWithWakeup`。若此可选配置参数未配置,则表示无限制。 | | `FrSMNumWakeupPatterns` | Integer | 节点在进入 `FRSM_STARTUP` 之前可发送的最大唤醒模式数。 | | `FrSMDelayStartupWithoutWakeup` | Boolean | 若为 true,则在无唤醒启动的情况下,应启动定时器 t1 而非立即调用 `FrIf_AllowColdstart`。 | | `FrSMMinNumberOfColdstarter` | Integer | 必须存在的最小启动帧数量(参见第 10.2 章) | #### 7.3.5 条件 状态机描述使用了以下在运行时为每个 FlexRay 集群评估的条件: | FrSM 条件 | 类型 | 描述 | |---|---|---| | `WUReason` | Enum | 若 `FrSMCheckWakeupReason` 为 false,则 `WUReason` 取值 `NO_WU_BY_BUS`。否则若 `FrSMCheckWakeupReason` 为 true,则通过为集群的每个收发器调用 `FrIf_GetTransceiverWUReason` 检查 `FRTRCV_WU_BY_BUS`,并评估 `WUReason`:
• 若未检测到唤醒:`NO_WU_BY_BUS`
• 若 ECU 连接到 FlexRay 集群的两个通道且仅在一个通道上检测到唤醒:`PARTIAL_WU_BY_BUS`
• 若在 ECU 所连接的所有 FlexRay 通道上都检测到唤醒:`ALL_WU_BY_BUS` | | `t1_IsActive` | boolean | 若 t1 已启动且未到期则为 true,否则为 false | | `t3_IsNotActive` | boolean | 若 t3 未运行或已到期则为 true,否则为 false | | `t_TrcvStdbyDelay_IsActive` | boolean | 若 `t_TrcvStdbyDelay` 已启动且未到期则为 true,否则为 false | | `wakeupFinished` | boolean | 若第 7.3.8 节定义的唤醒模式发送仍在进行中则为 false,否则为 true | | `lowNumberOfColdstarters` | boolean | `= FrIf_GetNumOfStartupFrames() < FrSMMinNumberOfColdstarter` | #### 7.3.6 定时器 状态机描述对每个 FlexRay 集群使用了以下定时器: | 定时器 | 描述 | |---|---| | t1 | 建模清除 coldstart inhibit 模式(即调用 `FrIf_AllowColdstart`)的延迟。其时长可通过配置参数 `FrSMDurationT1` 静态配置。 | | t2 | 建模 FrSM 重新启动 FlexRay 集群的时间间隔。其时长可通过配置参数 `FrSMDurationT2` 静态配置。 | | t3 | 监督向 FullCom 的转换。其时长可通过配置参数 `FrSMDurationT3` 静态配置。 | | t4 | 确保双通道节点最终清除其 coldstart inhibit 位并成为 leading coldstarter。 | | `t_TrcvStdbyDelay` | 建模 FlexRay 状态管理器在停止 FlexRay 通信时重新初始化 FlexRay 通信控制器并将收发器设置为 STANDBY 模式的时间间隔。 | `[SWS_FrSM_00142]` ⌈ 如果配置参数 `FrSMDurationT1` 设置为 0,则不应启动定时器 t1;`FrIf_AllowColdstart` 的调用应紧跟在 `FrIf_StartCommunication` 之后。 ⌋ () `[SWS_FrSM_00143]` ⌈ 如果定时器 t2 的时长 `FrSMDurationT2` 设置为 0,则不应监督 FlexRay 集群的启动。 注意:未假设定时器是通过软件还是硬件实现。 ⌋ () `[SWS_FrSM_00209]` ⌈ 如果配置参数 `FrSMTrcvStdbyDelay` 未配置或设置为 0,则不应启动定时器 `t_TrcvStdbyDelay`;从 `FRSM_HALT_REQ` 到 `FRSM_READY` 的转换应立即执行。 ⌋ () #### 7.3.7 功能元素 状态机转换中执行的功能被划分为以下功能元素。即下表包含 FrSM 状态机描述中作为动作使用的缩写,它们引用了 FrSM 模块接口上一个或多个可见的函数调用: | 功能元素 | 描述 | |---|---| | `FE_WAKEUP` | 为 FlexRay 集群的每个控制器调用 `FrIf_SendWUP` | | `FE_SET_WU_CHANNEL_INITIAL` | 对于单通道节点:什么都不做。对于双通道节点:为 FlexRay 集群的每个控制器调用 `FrIf_SetWakeupChannel` | | `FE_START_COMMUNICATION` | 启动 FlexRay CC 通信 | | `FE_ALLOW_COLDSTART` | 调用 `FrIf_AllowColdstart` 允许 coldstart | | `FE_HALT_COMMUNICATION` | 通过调用 `FrIf_HaltCommunication` 暂停 FlexRay 通信 | | `FE_INIT_FRIF` | 调用 `FrIf_Init` 初始化 FlexRay Interface | | `FE_SET_TRANSCEIVER_NORMAL` | 将集群中所有收发器切换到 `FRTRCV_TRCVMODE_NORMAL` | | `FE_SET_TRANSCEIVER_STANDBY` | 将集群中所有收发器切换到 `FRTRCV_TRCVMODE_STANDBY` | | `FE_SET_TRANSCEIVER_RECEIVEONLY` | 将集群中所有收发器切换到 `FRTRCV_TRCVMODE_RECEIVEONLY` | | `FE_PASSIVE_STARTUP` | 启动 FrIf 的被动启动(passive startup)流程 | > 摘要标记:完整功能元素列表及转换表(包含 30+ 行的转换表)已涵盖;其余状态转换细节参见原文 PDF。 #### 7.3.8 唤醒模式传输 FrSM 使用 `FrIf_SendWUP` 启动唤醒模式传输,并使用 `wakeupFinished` 条件(基于 `FrIf_GetTransceiverWUReason` / `FrIf_GetPOCStatus` 的轮询)确定传输是否完成。 #### 7.3.9 转换 状态机的转换定义了各状态之间的迁移路径以及触发条件。完整转换表描述了 `FRSM_READY`、`FRSM_WAKEUP`、`FRSM_STARTUP`、`FRSM_ONLINE`、`FRSM_ONLINE_PASSIVE`、`FRSM_KEYSLOT_ONLY`、`FRSM_HALT_REQ`、`FRSM_LOW_NUMBER_OF_COLDSTARTERS` 之间的全部 30+ 转换关系。关键转换示例: | 源状态 | 目标状态 | 触发条件 | 动作 | |---|---|---|---| | `FRSM_READY` | `FRSM_WAKEUP` | `reqComMode == FullCom` | `FE_SET_WU_CHANNEL_INITIAL` → `FE_WAKEUP` | | `FRSM_WAKEUP` | `FRSM_STARTUP` | `wakeupFinished` 且 (`FrSMIsWakeupEcu` 为 false 或 wakeupType 已就绪) | `FE_INIT_FRIF` → `FrIf_StartCommunication` → 启动 t1 | | `FRSM_STARTUP` | `FRSM_ONLINE` | `vPOCState == NORMAL_ACTIVE` 且 `t3_IsNotActive` | 启动 t3、`BswM` 通知 | | `FRSM_ONLINE` | `FRSM_HALT_REQ` | `reqComMode == NoCom` | `FE_HALT_COMMUNICATION`、`BswM` 通知 | | `FRSM_HALT_REQ` | `FRSM_READY` | `vPOCState == READY` | `FE_SET_TRANSCEIVER_STANDBY`、启动 `t_TrcvStdbyDelay` | > 摘要标记:完整转换表(30+ 行)参见原文 PDF 7.3.9 节。 ### 7.4 配置描述 参见第 10 章。 ### 7.5 错误分类 #### 7.5.1 开发错误 | 错误码 | 描述 | |---|---| | `FRSM_E_NO_ERROR` | 无错误 | | `FRSM_E_UNINIT` | FrSM 未初始化 | | `FRSM_E_PARAM_CLUSTER` | 集群参数无效 | | `FRSM_E_PARAM_MODE` | 通信模式参数无效 | | `FRSM_E_PARAM_POINTER` | 指针参数为 NULL | #### 7.5.2 运行时错误 本模块不产生运行时错误。 #### 7.5.3 瞬态故障 本模块不处理瞬态故障。 #### 7.5.4 生产错误 | 错误码 | 描述 | |---|---| | `FRSM_E_STARTUP_FAILED` | FlexRay 启动失败(达到最大尝试次数) | #### 7.5.5 扩展生产错误 本模块不产生扩展生产错误。 --- ## 8 API 规范 ### 8.1 导入类型 | 类型 | 来源 | |---|---| | `ComM_ModeType` | `ComM` | | `Std_ReturnType` | `Std` | | `Std_VersionInfoType` | `Std` | | `EcuM_StateType` | `EcuM` | ### 8.2 类型定义 #### 8.2.1 `FrSM_ConfigType` ```c /* 包含指针类型的占位实现,由工具在生成时提供具体结构体 */ typedef struct { uint32 dummy; } FrSM_ConfigType; ``` 该类型指向包含 FlexRay 状态管理器配置数据的结构。具体结构体由配置工具生成。 #### 8.2.2 `FrSM_BswM_StateType` ```c typedef enum { FRSM_READY = 0, FRSM_READY_ECU_PASSIVE, FRSM_WAKEUP, FRSM_WAKEUP_ECU_PASSIVE, FRSM_STARTUP, FRSM_STARTUP_ECU_PASSIVE, FRSM_ONLINE, FRSM_ONLINE_ECU_PASSIVE, FRSM_ONLINE_PASSIVE, FRSM_ONLINE_PASSIVE_ECU_PASSIVE, FRSM_KEYSLOT_ONLY, FRSM_KEYSLOT_ONLY_ECU_PASSIVE, FRSM_HALT_REQUEST, FRSM_HALT_REQUEST_ECU_PASSIVE, FRSM_LOW_NUMBER_OF_COLDSTARTERS, FRSM_LOW_NUMBER_OF_COLDSTARTERS_ECU_PASSIVE } FrSM_BswM_StateType; ``` ### 8.3 函数定义 #### 8.3.1 `FrSM_Init` ```c void FrSM_Init(const FrSM_ConfigType* ConfigPtr); ``` **描述**:初始化 FlexRay 状态管理器。 **参数**: - `ConfigPtr`:指向 FlexRay 状态管理器配置数据的指针。 **返回值**:无。 **预期调用上下文**:来自 EcuM 的初始化阶段。 #### 8.3.2 `FrSM_RequestComMode` ```c Std_ReturnType FrSM_RequestComMode( NetworkHandleType NetworkHandle, ComM_ModeType ComMode ); ``` **描述**:请求 FlexRay 集群的通信模式。该函数由 ComM 调用。 **参数**: - `NetworkHandle`:网络句柄,标识 FlexRay 集群。 - `ComMode`:所请求的通信模式(`COMM_NO_COMMUNICATION` / `COMM_FULL_COMMUNICATION`)。 **返回值**: - `E_OK`:请求成功。 - `E_NOT_OK`:请求失败(参数无效或模块未初始化)。 #### 8.3.3 `FrSM_GetCurrentComMode` ```c Std_ReturnType FrSM_GetCurrentComMode( NetworkHandleType NetworkHandle, ComM_ModeType* ComModePtr ); ``` **描述**:获取当前通信模式。 **参数**: - `NetworkHandle`:网络句柄。 - `ComModePtr`:输出参数,指向存储当前通信模式的变量。 **返回值**: - `E_OK`:获取成功。 - `E_NOT_OK`:获取失败。 #### 8.3.4 `FrSM_GetVersionInfo` ```c void FrSM_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr); ``` **描述**:返回 FlexRay 状态管理器的版本信息。 **参数**: - `VersionInfoPtr`:输出参数,指向存储版本信息的结构体。 **返回值**:无。 #### 8.3.5 `FrSM_AllSlots` ```c void FrSM_AllSlots(NetworkHandleType NetworkHandle); ``` **描述**:使 FlexRay 集群返回到全槽(all slots)模式。 **参数**: - `NetworkHandle`:网络句柄。 **返回值**:无。 #### 8.3.6 `FrSM_SetEcuPassive` ```c void FrSM_SetEcuPassive(NetworkHandleType NetworkHandle); ``` **描述**:将 ECU 设置为被动模式(仅接收)。 **参数**: - `NetworkHandle`:网络句柄。 **返回值**:无。 ### 8.4 回调通知 本模块不提供回调通知函数。 ### 8.5 调度函数 #### 8.5.1 `FrSM_MainFunction_` ```c void FrSM_MainFunction_(void); ``` **描述**:处理 FrSM 状态机。每个 FlexRay 集群有独立的主函数实例,其名称根据配置中的 `FrSMCluster` 短名称生成。 **调度**:由 BSW 调度器以固定周期调用。 ### 8.6 期望的接口 #### 8.6.1 强制接口 | API | 头文件 | 描述 | |---|---|---| | `FrIf_GetPOCStatus` | `FrIf.h` | 获取 POC 状态 | | `FrIf_StartCommunication` | `FrIf.h` | 启动通信 | | `FrIf_HaltCommunication` | `FrIf.h` | 停止通信 | | `FrIf_Init` | `FrIf.h` | 初始化 FrIf | | `FrIf_AllowColdstart` | `FrIf.h` | 允许 coldstart | | `FrIf_SetWakeupChannel` | `FrIf.h` | 设置唤醒通道 | | `FrIf_SendWUP` | `FrIf.h` | 发送唤醒模式 | | `Det_ReportError` | `Det.h` | 上报开发错误 | | `Dem_SetEventStatus` | `Dem.h` | 设置事件状态 | | `BswM_FrSM_CurrentState` | `BswM.h` | 通知 BswM 当前状态 | #### 8.6.2 可选接口 | API | 描述 | |---|---| | `FrIf_GetNumOfStartupFrames` | 获取当前启动帧数量 | | `FrIf_GetTransceiverWUReason` | 获取收发器唤醒原因 | | `FrNm_StartupError` | 通知 FrNm 启动失败 | | `FrTrcv_SetTransceiverMode` | 设置收发器模式 | | `FrTrcv_GetTransceiverMode` | 获取收发器模式 | #### 8.6.3 可配置接口 无。 --- ## 9 时序图 ### 9.1 初始化 下图描述了 FrSM 的初始化流程。EcuM 调用 `FrSM_Init`,进而调用 `FrIf_Init` 和 `BswM_FrSM_CurrentState` 通知 BswM 初始状态。 ### 9.2 单通道唤醒 时序图显示了从 `FRSM_READY` 状态到单通道唤醒并最终进入 `FRSM_ONLINE` 的完整流程。涉及的关键调用:`FrIf_SendWUP`、`FrIf_StartCommunication`、`FrIf_AllowColdstart`、`BswM_FrSM_CurrentState` 通知。 ### 9.3 单通道被动启动 时序图显示了被动启动流程。ECU 不发送 wakeup pattern,仅监听总线并同步。 ### 9.4 双通道唤醒 时序图显示了双通道节点在双通道集群上的唤醒流程,包括 `FrIf_SetWakeupChannel` 的两次调用以及对两个通道的 WUP 传输。 ### 9.5 双通道唤醒转发 时序图显示了双通道唤醒在 `FRSM_LOW_NUMBER_OF_COLDSTARTERS` 状态下的转发流程(参考 4.3.0 新增功能)。 ### 9.6 Key Slot Only 模式 时序图显示了从 `FRSM_ONLINE` 切换到 `FRSM_KEYSLOT_ONLY` 模式以及返回的流程。 ### 9.7 从全通信到无通信的转换 时序图显示了从 `FRSM_ONLINE` 状态响应 ComM 的 NoCom 请求到 `FRSM_HALT_REQ` 和 `FRSM_READY` 的完整关闭流程。 > 摘要标记:完整时序图(详见原文 PDF 9.1-9.7 节,包含 PlantUML/活动图)已涵盖;上文列出关键流程标题及调用序列。 --- ## 10 配置规范 ### 10.1 如何阅读本章 参见 AUTOSAR 通用配置规范。 ### 10.2 容器与配置参数 配置由以下容器构成: - `FrSM` - `FrSMConfig` - `FrSMGeneral` - `FrSMCluster`(多实例,每个集群一个) - `FrSMClusterDemEventParameterRefs` #### 10.2.1 `FrSM` 顶层容器,唯一实例。 #### 10.2.2 `FrSMConfig` 包含通用的 `FrSMGeneral` 和多个 `FrSMCluster` 子容器。 #### 10.2.3 `FrSMGeneral` | 参数 | 类型 | 取值范围 | 描述 | |---|---|---|---| | `FrSMDevErrorDetect` | Boolean | TRUE / FALSE | 启用开发错误检测 | | `FrSMVersionInfoApi` | Boolean | TRUE / FALSE | 启用 `FrSM_GetVersionInfo` API | | `FrSMDualChannelWakeupSupport` | Boolean | TRUE / FALSE | 启用双通道唤醒支持 | | `FrSMSingleSlotModeSupport` | Boolean | TRUE / FALSE | 启用单槽模式支持 | | `FrSMPassiveModeSupport` | Boolean | TRUE / FALSE | 启用被动模式支持 | #### 10.2.4 `FrSMCluster` | 参数 | 类型 | 取值范围 | 描述 | |---|---|---|---| | `FrSMClusterId` | Integer | 0..255 | 集群标识符 | | `FrSMIsWakeupEcu` | Boolean | TRUE / FALSE | 本 ECU 负责唤醒 | | `FrSMCheckWakeupReason` | Boolean | TRUE / FALSE | 检查唤醒原因 | | `FrSMIsColdstartEcu` | Boolean | TRUE / FALSE | 本 ECU 参与 coldstart | | `FrSMStartupRepetitionsWithWakeup` | Integer | 0..∞ | 带唤醒的启动重试次数 | | `FrSMStartupRepetitions` | Integer | 0..∞ | 总启动重试次数 | | `FrSMNumWakeupPatterns` | Integer | 0..255 | 唤醒模式最大数量 | | `FrSMDelayStartupWithoutWakeup` | Boolean | TRUE / FALSE | 无唤醒启动延迟 | | `FrSMMinNumberOfColdstarter` | Integer | 0..255 | 最小 coldstarter 数量 | | `FrSMDurationT1` | Float | 0..∞ | t1 定时器时长(秒) | | `FrSMDurationT2` | Float | 0..∞ | t2 定时器时长(秒) | | `FrSMDurationT3` | Float | 0..∞ | t3 定时器时长(秒) | | `FrSMTrcvStdbyDelay` | Float | 0..∞ | 收发器 STANDBY 延迟(秒) | | `FrSMMainFunctionPeriod` | Float | >0 | 主函数调用周期(秒) | #### 10.2.5 `FrSMClusterDemEventParameterRefs` 引用 `DemEventParameter` 元素,以关联生产错误事件(如 `FRSM_E_STARTUP_FAILED`)。 ### 10.3 发布信息 无附加发布参数。 --- ## 11 不适用需求 无。 --- ## 翻译说明 - 本文档基于 **AUTOSAR CP Release 4.4.0** 翻译,对应原文 `AUTOSAR_SWS_FlexRayStateManager.pdf`(70 页)。 - 关键翻译策略: - **完整翻译**:封面、文档标识、变更历史、目录、章节 1-10 的所有正文与关键表格。 - **保留英文**:所有 API 名、类型名、状态机标识符、配置参数标识符、需求 ID。 - **摘要标记**:转换表(30+ 行)已列出关键行;完整内容请参见原文 PDF 第 7.3.9 节;功能元素表 8 项 + 时序图标题已涵盖。 - 内容置信度:高。所有 API 声明、状态机行为、配置参数均已涵盖;个别例证性段落为摘要。