40 KiB
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 介绍与功能概述
本规范规定了 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_<FrSMCluster.ShortName> 处理(参见第 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
/* 包含指针类型的占位实现,由工具在生成时提供具体结构体 */
typedef struct {
uint32 dummy;
} FrSM_ConfigType;
该类型指向包含 FlexRay 状态管理器配置数据的结构。具体结构体由配置工具生成。
8.2.2 FrSM_BswM_StateType
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
void FrSM_Init(const FrSM_ConfigType* ConfigPtr);
描述:初始化 FlexRay 状态管理器。
参数:
ConfigPtr:指向 FlexRay 状态管理器配置数据的指针。
返回值:无。
预期调用上下文:来自 EcuM 的初始化阶段。
8.3.2 FrSM_RequestComMode
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
Std_ReturnType FrSM_GetCurrentComMode(
NetworkHandleType NetworkHandle,
ComM_ModeType* ComModePtr
);
描述:获取当前通信模式。
参数:
NetworkHandle:网络句柄。ComModePtr:输出参数,指向存储当前通信模式的变量。
返回值:
E_OK:获取成功。E_NOT_OK:获取失败。
8.3.4 FrSM_GetVersionInfo
void FrSM_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
描述:返回 FlexRay 状态管理器的版本信息。
参数:
VersionInfoPtr:输出参数,指向存储版本信息的结构体。
返回值:无。
8.3.5 FrSM_AllSlots
void FrSM_AllSlots(NetworkHandleType NetworkHandle);
描述:使 FlexRay 集群返回到全槽(all slots)模式。
参数:
NetworkHandle:网络句柄。
返回值:无。
8.3.6 FrSM_SetEcuPassive
void FrSM_SetEcuPassive(NetworkHandleType NetworkHandle);
描述:将 ECU 设置为被动模式(仅接收)。
参数:
NetworkHandle:网络句柄。
返回值:无。
8.4 回调通知
本模块不提供回调通知函数。
8.5 调度函数
8.5.1 FrSM_MainFunction_<FrSMCluster.ShortName>
void FrSM_MainFunction_<FrSMCluster.ShortName>(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 容器与配置参数
配置由以下容器构成:
FrSMFrSMConfigFrSMGeneralFrSMCluster(多实例,每个集群一个)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 声明、状态机行为、配置参数均已涵盖;个别例证性段落为摘要。