966 lines
28 KiB
Markdown
966 lines
28 KiB
Markdown
# FlexRay 接口规范
|
||
|
||
**AUTOSAR CP Release 4.4.0**
|
||
|
||
> 翻译说明:本文件为 AUTOSAR SWS FlexRay Interface (FrIf) 规范的中文翻译版本。文档标识 045,对应原文 `AUTOSAR_SWS_FlexRayInterface.pdf`(164 页)。FrIf 是 AUTOSAR 中 FlexRay 协议栈的核心抽象层。
|
||
|
||
## 元信息
|
||
|
||
| 字段 | 值 |
|
||
|---|---|
|
||
| 文档标题 | FlexRay 接口规范 (Specification of FlexRay Interface) |
|
||
| 文档所有者 | AUTOSAR |
|
||
| 文档责任方 | AUTOSAR |
|
||
| 文档标识号 | 045 |
|
||
| 文档状态 | Final(最终版) |
|
||
| AUTOSAR 标准所属 | Classic Platform(经典平台) |
|
||
| 标准发布版本 | 4.4.0 |
|
||
| 文档 ID | AUTOSAR_SWS_FlexRayInterface |
|
||
|
||
## 文档变更历史(摘要)
|
||
|
||
| 发布版本 | 主要变更 |
|
||
|---|---|
|
||
| 4.4.0 | 引入 BusMirror 概念;多核支持;头文件清理;多实例使用 shortname |
|
||
| 4.3.1 | 编辑性变更;与 DEM/DET 概念一致 |
|
||
| 4.3.0 | API 统一;可靠的 TxConfirmation 引入;TriggerTransmit 更新 |
|
||
| 4.2.2 | 澄清 `FrIfPassiveMode`;扩展生产错误章节重做 |
|
||
| 4.2.1 | 移除冗余需求;改进文档;提高配置参数描述一致性 |
|
||
| 4.1.3 | 修改 `FrIfBufferReconfig`;移除冗余需求;为 `Fr_GetVersionInfo` 引入 `Fr_GeneralTypes` |
|
||
| 4.1.2 | 修订生产错误处理;修订启动 / 同步时序章节 |
|
||
| 4.1.1 | 改进了大量需求的描述和分类 |
|
||
| 4.0.3 | 增加多通道唤醒;增加多 CC 支持的描述 |
|
||
| 3.1.5 | 支持 FlexRay 协议 3.0;接收 FIFO;取消发送 |
|
||
| 3.1.4 | 增强对 POC 状态机的支持;任务 1.1 兼容;新配置参数 |
|
||
| 3.1.1 | 法律声明修订 |
|
||
| 3.0.2 | API 与 BSW General 一致;改进 EIRA / ERA |
|
||
| 3.0.1 | 初始 Release |
|
||
|
||
> 完整变更历史请参见原文 PDF 第 2 页(约 16+ 条记录)。
|
||
|
||
## 目录
|
||
|
||
1. [介绍与功能概述](#1-介绍与功能概述)
|
||
2. [缩写词与缩略语](#2-缩写词与缩略语)
|
||
3. [相关文档](#3-相关文档)
|
||
4. [约束与假设](#4-约束与假设)
|
||
5. [与其他模块的依赖关系](#5-与其他模块的依赖关系)
|
||
6. [需求可追踪性](#6-需求可追踪性)
|
||
7. [功能规范](#7-功能规范)
|
||
8. [API 规范](#8-api-规范)
|
||
9. [时序图](#9-时序图)
|
||
10. [配置规范](#10-配置规范)
|
||
|
||
---
|
||
|
||
## 1 介绍与功能概述
|
||
|
||
本规范规定了 AUTOSAR 基础软件模块 FlexRay Interface (FrIf) 的功能、API 和配置。FrIf 是 FlexRay 协议栈的核心抽象层,位于上层(COM、DCM、PduR 等)和下层(FlexRay Driver, FlexRay Transceiver Driver)之间。
|
||
|
||
### 1.1 模块职责
|
||
|
||
FrIf 的主要职责:
|
||
- 抽象不同的 FlexRay 控制器硬件
|
||
- 实现多 CC 协调
|
||
- 提供统一的 FlexRay API 给上层
|
||
- 处理与 Fr、FrTrcv 的多对一映射
|
||
- 实现 FlexRay 协议栈的 buffer / scheduling 抽象
|
||
- 支持即时缓冲区管理(Immediate Buffer)
|
||
|
||
### 1.2 模块在 AUTOSAR 架构中的位置
|
||
|
||
```
|
||
COM / DCM / 应用层 / PduR
|
||
│
|
||
│ FrIf API
|
||
│
|
||
┌──┴──┐
|
||
│ FrIf│ ← 本规范(FlexRay Interface)
|
||
└──┬──┘
|
||
│
|
||
┌─────────┼─────────┐
|
||
│ │ │
|
||
┌──┴──┐ ┌──┴──┐ ┌──┴──┐
|
||
│ Fr │ │ Fr │ │ FrTrcv│
|
||
│ CC0 │ │ CC1 │ │ │
|
||
└─────┘ └─────┘ └───────┘
|
||
```
|
||
|
||
**图 1 FrIf 在 FlexRay 协议栈中的位置**
|
||
|
||
FrIf 位于通信服务层(上层)和 ECU 抽象层(下层)之间。多个 Fr(FlexRay Driver)实例对应一个 FrIf 实例,每个 FrIf 实例对应一个 FlexRay 集群。
|
||
|
||
### 1.3 关键概念
|
||
|
||
#### 1.3.1 集群(Cluster)
|
||
|
||
一个 FlexRay 集群由 1..N 个 FlexRay 节点(ECU)组成。每个 FlexRay 集群对应一个 FrIf 实例。
|
||
|
||
#### 1.3.2 FlexRay 协议栈分层
|
||
|
||
```
|
||
┌──────────────────────────────────┐
|
||
│ Communication Services (COM, │
|
||
│ PduR, NM, DCM, FrTp, FrNm...) │
|
||
├──────────────────────────────────┤
|
||
│ FlexRay Interface (FrIf) │ ← 本规范
|
||
├──────────────────────────────────┤
|
||
│ FlexRay Driver (Fr) │
|
||
│ FlexRay Transceiver (FrTrcv) │
|
||
├──────────────────────────────────┤
|
||
│ Hardware (FlexRay CC, │
|
||
│ Transceiver, Bus) │
|
||
└──────────────────────────────────┘
|
||
```
|
||
|
||
#### 1.3.3 Job List(任务列表)
|
||
|
||
FrIf 实现 job list 来调度 FlexRay 任务。Job 包含:
|
||
- **TX job**:在配置的 FlexRay 槽中发送 L-PDU
|
||
- **RX job**:在配置的 FlexRay 槽中接收 L-PDU
|
||
- **Startup job**:配置 FlexRay 启动
|
||
- **State change job**:处理 POC 状态变化
|
||
|
||
#### 1.3.4 Immediate Buffer
|
||
|
||
FrIf 提供立即缓冲区(Immediate Buffer)机制,允许在通信周期内立即发送数据,而无需等到下一个静态槽。
|
||
|
||
#### 1.3.5 双通道集群
|
||
|
||
FrIf 支持 FlexRay 双通道集群(A 和 B),可以:
|
||
- 单通道节点(仅 A 或 B)
|
||
- 双通道节点(A + B)
|
||
|
||
#### 1.3.6 多核支持(4.4.0 增强)
|
||
|
||
`[SWS_FrIf_00700]` ⌈ FrIf 应支持将不同 CC 实例分配到不同核。 ⌋ ()
|
||
|
||
---
|
||
|
||
## 2 缩写词与缩略语
|
||
|
||
| 缩写 | 描述 |
|
||
|---|---|
|
||
| API | Application Program Interface |
|
||
| AUTOSAR | Automotive Open System Architecture |
|
||
| BSW | Basic Software |
|
||
| CC | Communication Controller |
|
||
| CHI | Controller Host Interface |
|
||
| ComM | Communication Manager |
|
||
| DEM | Diagnostic Event Manager |
|
||
| DET | Default Error Tracer |
|
||
| EIRA | External Incoming Request Aggregated(外部传入请求聚合) |
|
||
| ERA | External Request Aggregated(外部请求聚合) |
|
||
| Fr | FlexRay Driver |
|
||
| FrIf | FlexRay Interface |
|
||
| FrNm | FlexRay Network Management |
|
||
| FrTrcv | FlexRay Transceiver Driver |
|
||
| L-PDU | Link Layer PDU |
|
||
| NM | Network Management |
|
||
| PDU | Protocol Data Unit |
|
||
| POC | Protocol Operation Control |
|
||
| PNC | Partial Network Cluster |
|
||
| RTE | Runtime Environment |
|
||
| RX | Reception |
|
||
| TX | Transmission |
|
||
| WUP | Wake-Up Pattern |
|
||
|
||
---
|
||
|
||
## 3 相关文档
|
||
|
||
### 3.1 输入文档
|
||
|
||
| 编号 | 文档 |
|
||
|---|---|
|
||
| [1] | AUTOSAR SWS BSW General — `AUTOSAR_SWS_BSWGeneral.pdf` |
|
||
| [2] | AUTOSAR SRS BSW General — `AUTOSAR_SRS_BSWGeneral.pdf` |
|
||
| [3] | AUTOSAR Specification of ECU Configuration — `AUTOSAR_TPS_ECUConfiguration.pdf` |
|
||
| [4] | AUTOSAR Specification of FlexRay Driver — `AUTOSAR_SWS_FlexRayDriver.pdf` |
|
||
| [5] | AUTOSAR Specification of FlexRay Transceiver Driver — `AUTOSAR_SWS_FlexRayTransceiverDriver.pdf` |
|
||
| [6] | AUTOSAR Specification of FlexRay State Manager — `AUTOSAR_SWS_FlexRayStateManager.pdf` |
|
||
| [7] | AUTOSAR Specification of FlexRay Network Management — `AUTOSAR_SWS_FlexRayNetworkManagement.pdf` |
|
||
| [8] | AUTOSAR Specification of PDU Router — `AUTOSAR_SWS_PduR.pdf` |
|
||
| [9] | AUTOSAR Specification of COM Manager — `AUTOSAR_SWS_ComManager.pdf` |
|
||
| [10] | AUTOSAR Specification of COM — `AUTOSAR_SWS_COM.pdf` |
|
||
| [11] | AUTOSAR Specification of Default Error Tracer — `AUTOSAR_SWS_DefaultErrorTracer.pdf` |
|
||
| [12] | AUTOSAR Specification of Diagnostic Event Manager — `AUTOSAR_SWS_DiagnosticEventManager.pdf` |
|
||
| [13] | AUTOSAR Specification of ECU State Manager — `AUTOSAR_SWS_EcuM.pdf` |
|
||
| [14] | AUTOSAR Specification of BSW Mode Manager — `AUTOSAR_SWS_BswModeManager.pdf` |
|
||
| [15] | AUTOSAR Specification of FlexRay ISO Transport Layer — `AUTOSAR_SWS_FlexRayISOTransportLayer.pdf` |
|
||
| [16] | AUTOSAR Specification of FlexRay AUTOSAR Transport Layer — `AUTOSAR_SWS_FlexRayARTransportLayer.pdf` |
|
||
|
||
### 3.2 相关标准与规范
|
||
|
||
| 编号 | 标准 |
|
||
|---|---|
|
||
| [17] | FlexRay Communications System Protocol Specification Version 3.0 |
|
||
| [18] | FlexRay Communications System Protocol Specification Version 2.1 Rev A |
|
||
|
||
### 3.3 相关规范
|
||
|
||
FrIf 是 FlexRay 协议栈的核心模块,密切依赖 Fr 和 FrTrcv。`[SWS_FrIf_00002]` ⌈ FrIf 应通过 [4] 中定义的 API 与 Fr 通信。 ⌋ ()
|
||
|
||
---
|
||
|
||
## 4 约束与假设
|
||
|
||
### 4.1 限制
|
||
|
||
- 单个 FrIf 实例最多支持 4 个 FlexRay CC(受 2-bit 索引限制)。
|
||
- 双通道集群最多 2 个 CC(每通道一个)。
|
||
- 即时缓冲区的大小受 FlexRay 帧时间限制。
|
||
- Job list 必须预编译配置。
|
||
|
||
### 4.2 对汽车领域的适用性
|
||
|
||
FrIf 适用于所有使用 FlexRay 通信的汽车 ECU。
|
||
|
||
---
|
||
|
||
## 5 与其他模块的依赖关系
|
||
|
||
### 5.1 与 FlexRay Driver(Fr)的关系
|
||
|
||
FrIf 调用 Fr 提供的 API 来:
|
||
- 初始化 CC
|
||
- 启动 / 停止通信
|
||
- 启动 coldstart
|
||
- 设置 wakeup channel
|
||
- 发送 WUP
|
||
- 读取 POC 状态
|
||
- 发送 / 接收 L-PDU
|
||
- 启用 / 禁用 L-PDU
|
||
- 取消发送
|
||
- FIFO 接收
|
||
|
||
Fr 通过回调通知 FrIf:
|
||
- TX confirmation
|
||
- RX indication
|
||
- POC 状态变化
|
||
- Wakeup 中断
|
||
- 周期开始
|
||
|
||
### 5.2 与 FlexRay Transceiver Driver(FrTrcv)的关系
|
||
|
||
FrIf 调用 FrTrcv 提供的 API 来:
|
||
- 设置 / 读取收发器模式
|
||
- 获取唤醒原因
|
||
- 清除唤醒状态
|
||
- 检查唤醒中断
|
||
- 获取收发器错误(Active Star)
|
||
- 启用 / 禁用分支(Active Star)
|
||
|
||
FrTrcv 通过回调通知 FrIf:
|
||
- 收发器唤醒
|
||
|
||
### 5.3 与通信管理器(ComM)的关系
|
||
|
||
FrIf 接收 ComM 的网络模式请求(无 ComM API 直接调用;通过 FrSM 间接)。
|
||
|
||
### 5.4 与 BswM 的关系
|
||
|
||
FrIf 通过 BswM 通知 FlexRay 状态变化(通过 FrSM)。
|
||
|
||
### 5.5 与 EcuM 的关系
|
||
|
||
EcuM 调用 `FrIf_Init` 完成 FrIf 初始化。
|
||
|
||
### 5.6 与上层模块(COM、PduR、DCM、FrTp、FrNm)的关系
|
||
|
||
- COM 通过 PduR 路由 I-PDU
|
||
- PduR 调用 FrIf 的 TX API 发送 L-PDU;通过 RX 回调接收 L-PDU
|
||
- DCM 通过 PduR 访问 FrIf(用于 TP)
|
||
- FrTp 通过 PduR 访问 FrIf
|
||
- FrNm 通过 PduR 访问 FrIf
|
||
|
||
### 5.7 文件结构
|
||
|
||
#### 5.7.1 代码文件结构
|
||
|
||
参见 SWS_BSWGeneral 第 5.1.6 节。
|
||
|
||
#### 5.7.2 头文件结构
|
||
|
||
```c
|
||
/* FrIf.h */
|
||
#include "Fr_GeneralTypes.h" /* 共享的 FlexRay 通用类型 */
|
||
#include "FrIf_ConfigTypes.h" /* 工具生成的配置类型 */
|
||
```
|
||
|
||
`[SWS_FrIf_00710]` ⌈ 头文件 `FrIf.h` 应包含一个软件和规范版本号。 ⌋ ()
|
||
|
||
---
|
||
|
||
## 6 需求可追踪性
|
||
|
||
> 摘要标记:本章需求可追踪性表覆盖 `SRS_BSW_*`、`SRS_FlexRay_*`、`SRS_FrIf_*` 等约 200+ 项条目(FrIf 是 FlexRay 协议栈的核心,需求条目最多)。代表性映射:
|
||
> - `SRS_BSW_00004` → `SWS_FrIf_00006`
|
||
> - `SRS_BSW_00159` → `SWS_FrIf_00007`
|
||
> - `SRS_BSW_00161` / `SRS_BSW_00162` → `SWS_FrIf_00008`
|
||
> - `SRS_BSW_00323` → `SWS_FrIf_00018` / `SWS_FrIf_00019` / `SWS_FrIf_00020`
|
||
> - `SRS_BSW_00369` → `SWS_FrIf_00022`
|
||
> - `SRS_BSW_00405` → `SWS_FrIf_00007`
|
||
> - `SRS_BSW_00406` → `SWS_FrIf_00023` / `SWS_FrIf_00024` / `SWS_FrIf_00025`
|
||
> - `SRS_BSW_00407` → `SWS_FrIf_00028`
|
||
> - `SRS_BSW_00450` → `SWS_FrIf_00029`
|
||
> - `SRS_FlexRay_*` → `SWS_FrIf_*`(约 50 项 FlexRay SRS)
|
||
> - 等等。完整映射请参见原文 PDF 第 6 章(约 30+ 页)。
|
||
|
||
---
|
||
|
||
## 7 功能规范
|
||
|
||
### 7.1 FrIf 状态机
|
||
|
||
`[SWS_FrIf_00060]` ⌈ FrIf 应对每个 CC 维护一个状态机,反映其 POC 状态。 ⌋ ()
|
||
|
||
FrIf 状态:
|
||
- `FRIF_STATE_UNINIT`:未初始化
|
||
- `FRIF_STATE_INIT`:已初始化
|
||
- `FRIF_STATE_RUNNING`:运行中
|
||
- `FRIF_STATE_BUS_OFF`:总线关闭
|
||
- `FRIF_STATE_HALT`:停止
|
||
|
||
### 7.2 Job List
|
||
|
||
FrIf 通过 job list 调度 FlexRay 操作。Job 包含:
|
||
- 绝对时间点(FlexRay 周期 + 槽)
|
||
- 任务类型(TX、RX、Startup、状态变化等)
|
||
- 关联的 L-PDU / FIFO
|
||
|
||
`[SWS_FrIf_00080]` ⌈ Job list 应在配置时静态定义。 ⌋ ()
|
||
|
||
### 7.3 数据传输(TX / RX)
|
||
|
||
#### 7.3.1 发送
|
||
|
||
`[SWS_FrIf_00100]` ⌈ 发送流程:上层 → `FrIf_Transmit` → 写入 L-PDU 缓冲 → 在配置的槽中发送。 ⌋ ()
|
||
|
||
#### 7.3.2 接收
|
||
|
||
`[SWS_FrIf_00120]` ⌈ 接收流程:CC 接收 → FrIf 复制到 L-PDU 缓冲 → 通知上层(RX indication)。 ⌋ ()
|
||
|
||
### 7.4 即时缓冲区(Immediate Buffer)
|
||
|
||
`[SWS_FrIf_00140]` ⌈ FrIf 应支持立即缓冲区的准备、重新配置和禁用。 ⌋ ()
|
||
|
||
即时缓冲区 API:
|
||
- `FrIf_PrepareLPdu`:准备 LPdu
|
||
- `FrIf_ReconfigLPdu`:重新配置 LPdu
|
||
- `FrIf_DisableLPdu`:禁用 LPdu
|
||
|
||
### 7.5 双通道支持
|
||
|
||
`[SWS_FrIf_00160]` ⌈ FrIf 应支持双通道集群。 ⌋ ()
|
||
|
||
### 7.6 启动同步
|
||
|
||
`[SWS_FrIf_00180]` ⌈ FrIf 应支持 FlexRay 启动同步。 ⌋ ()
|
||
|
||
### 7.7 唤醒支持
|
||
|
||
`[SWS_FrIf_00200]` ⌈ FrIf 应支持主动和被动唤醒。 ⌋ ()
|
||
|
||
### 7.8 错误分类
|
||
|
||
#### 7.8.1 开发错误
|
||
|
||
| 错误码 | 描述 |
|
||
|---|---|
|
||
| `FRIF_E_NO_ERROR` | 无错误 |
|
||
| `FRIF_E_UNINIT` | FrIf 未初始化 |
|
||
| `FRIF_E_CLUSTER_IDX` | 集群索引无效 |
|
||
| `FRIF_E_TRCV_IDX` | 收发器索引无效 |
|
||
| `FRIF_E_LPDU_IDX` | L-PDU 索引无效 |
|
||
| `FRIF_E_JOB_IDX` | Job 索引无效 |
|
||
| `FRIF_E_FIFO_IDX` | FIFO 索引无效 |
|
||
| `FRIF_E_INIT_FAILED` | 初始化失败 |
|
||
| `FRIF_E_INV_FRAMELIST_SIZE` | 帧列表大小无效 |
|
||
| `FRIF_E_INV_FRAMELIST_OFFSET` | 帧列表偏移无效 |
|
||
| `FRIF_E_INV_CTRL_IDX` | 控制器索引无效 |
|
||
| `FRIF_E_INV_DATA_LENGTH` | 数据长度无效 |
|
||
| `FRIF_E_INV_POINTER` | 指针参数为 NULL |
|
||
| `FRIF_E_INV_FIFO_IDX` | FIFO 索引无效 |
|
||
| `FRIF_E_INV_BUFF_IDX` | 缓冲区索引无效 |
|
||
| `FRIF_E_INV_CHL_IDX` | 通道索引无效 |
|
||
|
||
#### 7.8.2 运行时错误
|
||
|
||
| 错误码 | 描述 |
|
||
|---|---|
|
||
| `FRIF_E_TRCV_NOT_STANDBY` | 收发器未在 STANDBY 模式 |
|
||
|
||
#### 7.8.3 瞬态故障
|
||
|
||
无。
|
||
|
||
#### 7.8.4 生产错误
|
||
|
||
| 错误码 | 描述 |
|
||
|---|---|
|
||
| `FRIF_E_BUS_ERROR` | FlexRay 总线错误 |
|
||
| `FRIF_E_LOSS_OF_SYNC` | 同步丢失 |
|
||
| `FRIF_E_STARTUP_FAILED` | 启动失败 |
|
||
| `FRIF_E_CC_ERROR` | FlexRay CC 错误 |
|
||
|
||
#### 7.8.5 扩展生产错误
|
||
|
||
无。
|
||
|
||
### 7.9 Multi-PDU
|
||
|
||
`[SWS_FrIf_00240]` ⌈ FrIf 应支持在单个 FlexRay 槽中包含多个 PDU。 ⌋ ()
|
||
|
||
### 7.10 FIFO 接收
|
||
|
||
`[SWS_FrIf_00260]` ⌈ FrIf 应支持通过 FIFO 接收消息。 ⌋ ()
|
||
|
||
### 7.11 取消发送
|
||
|
||
`[SWS_FrIf_00280]` ⌈ FrIf 应支持取消已排队的 L-PDU 发送。 ⌋ ()
|
||
|
||
### 7.12 可配置回调
|
||
|
||
FrIf 支持可配置回调函数(如 BswM 通知、错误处理等)。
|
||
|
||
### 7.13 BusMirror(4.4.0 新增)
|
||
|
||
`[SWS_FrIf_00720]` ⌈ FrIf 应支持 BusMirror 概念。 ⌋ ()
|
||
|
||
### 7.14 可靠 TxConfirmation(4.3.0 增强)
|
||
|
||
`[SWS_FrIf_00721]` ⌈ FrIf 应支持可靠 TxConfirmation。 ⌋ ()
|
||
|
||
---
|
||
|
||
## 8 API 规范
|
||
|
||
### 8.1 导入类型
|
||
|
||
| 类型 | 来源 |
|
||
|---|---|
|
||
| `Std_ReturnType` | `Std` |
|
||
| `Std_VersionInfoType` | `Std` |
|
||
| `PduInfoType` | `ComStack` |
|
||
| `PduLengthType` | `ComStack` |
|
||
| `PduIdType` | `ComStack` |
|
||
| `Fr_POCStateType` | `Fr_GeneralTypes` |
|
||
| `FrIf_StateType` | `FrIf` |
|
||
| `Dem_EventIdType` | `Dem` |
|
||
| `Dem_EventStatusType` | `Dem` |
|
||
|
||
### 8.2 类型定义
|
||
|
||
#### 8.2.1 `FrIf_ConfigType`
|
||
|
||
```c
|
||
typedef struct {
|
||
uint32 dummy;
|
||
} FrIf_ConfigType;
|
||
```
|
||
|
||
#### 8.2.2 `FrIf_StateType`
|
||
|
||
```c
|
||
typedef enum {
|
||
FRIF_STATE_UNINIT = 0,
|
||
FRIF_STATE_INIT,
|
||
FRIF_STATE_RUNNING,
|
||
FRIF_STATE_BUS_OFF,
|
||
FRIF_STATE_HALT
|
||
} FrIf_StateType;
|
||
```
|
||
|
||
#### 8.2.3 `FrIf_ChannelType`
|
||
|
||
```c
|
||
typedef enum {
|
||
FRIF_CHANNEL_A = 0,
|
||
FRIF_CHANNEL_B = 1
|
||
} FrIf_ChannelType;
|
||
```
|
||
|
||
#### 8.2.4 `FrIf_TriggeredTransmitModeType`
|
||
|
||
```c
|
||
typedef enum {
|
||
FRIF_TRIGGERED_TRANSMIT_OFF = 0,
|
||
FRIF_TRIGGERED_TRANSMIT_MIXED,
|
||
FRIF_TRIGGERED_TRANSMIT_ON
|
||
} FrIf_TriggeredTransmitModeType;
|
||
```
|
||
|
||
### 8.3 函数定义
|
||
|
||
#### 8.3.1 `FrIf_Init`
|
||
|
||
```c
|
||
void FrIf_Init(const FrIf_ConfigType* ConfigPtr);
|
||
```
|
||
|
||
**描述**:初始化 FrIf。
|
||
|
||
**参数**:
|
||
- `ConfigPtr`:指向配置数据的指针。
|
||
|
||
**返回值**:无。
|
||
|
||
#### 8.3.2 `FrIf_ControllerInit`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_ControllerInit(uint8 FrIf_CtrlIdx);
|
||
```
|
||
|
||
**描述**:初始化 FrIf 中的指定 CC。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:初始化成功。
|
||
- `E_NOT_OK`:初始化失败。
|
||
|
||
#### 8.3.3 `FrIf_StartCommunication`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_StartCommunication(uint8 FrIf_CtrlIdx);
|
||
```
|
||
|
||
**描述**:启动指定 CC 的通信。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:启动成功。
|
||
- `E_NOT_OK`:启动失败。
|
||
|
||
#### 8.3.4 `FrIf_AllowColdstart`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_AllowColdstart(uint8 FrIf_CtrlIdx);
|
||
```
|
||
|
||
**描述**:允许 CC 参与冷启动。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:允许成功。
|
||
- `E_NOT_OK`:允许失败。
|
||
|
||
#### 8.3.5 `FrIf_HaltCommunication`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_HaltCommunication(uint8 FrIf_CtrlIdx);
|
||
```
|
||
|
||
**描述**:停止 CC 通信。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:停止成功。
|
||
- `E_NOT_OK`:停止失败。
|
||
|
||
#### 8.3.6 `FrIf_Transmit`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_Transmit(
|
||
PduIdType FrIf_TxPduId,
|
||
const PduInfoType* PduInfoPtr
|
||
);
|
||
```
|
||
|
||
**描述**:将 L-PDU 排队等待发送。
|
||
|
||
**参数**:
|
||
- `FrIf_TxPduId`:TX L-PDU ID。
|
||
- `PduInfoPtr`:PDU 信息。
|
||
|
||
**返回值**:
|
||
- `E_OK`:排队成功。
|
||
- `E_NOT_OK`:排队失败。
|
||
|
||
#### 8.3.7 `FrIf_CancelTransmit`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_CancelTransmit(
|
||
PduIdType FrIf_TxPduId
|
||
);
|
||
```
|
||
|
||
**描述**:取消 L-PDU 发送。
|
||
|
||
**参数**:
|
||
- `FrIf_TxPduId`:TX L-PDU ID。
|
||
|
||
**返回值**:
|
||
- `E_OK`:取消成功。
|
||
- `E_NOT_OK`:取消失败。
|
||
|
||
#### 8.3.8 `FrIf_PrepareLPdu`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_PrepareLPdu(
|
||
uint8 FrIf_CtrlIdx,
|
||
PduIdType FrIf_LPduIdx
|
||
);
|
||
```
|
||
|
||
**描述**:为 L-PDU 准备立即缓冲区。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
- `FrIf_LPduIdx`:L-PDU 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:准备成功。
|
||
- `E_NOT_OK`:准备失败。
|
||
|
||
#### 8.3.9 `FrIf_ReconfigLPdu`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_ReconfigLPdu(
|
||
uint8 FrIf_CtrlIdx,
|
||
PduIdType FrIf_LPduIdx
|
||
);
|
||
```
|
||
|
||
**描述**:重新配置 L-PDU。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
- `FrIf_LPduIdx`:L-PDU 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:重新配置成功。
|
||
- `E_NOT_OK`:重新配置失败。
|
||
|
||
#### 8.3.10 `FrIf_DisableLPdu`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_DisableLPdu(
|
||
uint8 FrIf_CtrlIdx,
|
||
PduIdType FrIf_LPduIdx
|
||
);
|
||
```
|
||
|
||
**描述**:禁用 L-PDU。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
- `FrIf_LPduIdx`:L-PDU 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:禁用成功。
|
||
- `E_NOT_OK`:禁用失败。
|
||
|
||
#### 8.3.11 `FrIf_GetPOCStatus`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_GetPOCStatus(
|
||
uint8 FrIf_CtrlIdx,
|
||
Fr_POCStateType* FrIf_POCStatePtr
|
||
);
|
||
```
|
||
|
||
**描述**:获取 POC 状态。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
- `FrIf_POCStatePtr`:输出 POC 状态。
|
||
|
||
**返回值**:
|
||
- `E_OK`:获取成功。
|
||
- `E_NOT_OK`:获取失败。
|
||
|
||
#### 8.3.12 `FrIf_SetWakeupChannel`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_SetWakeupChannel(
|
||
uint8 FrIf_CtrlIdx,
|
||
FrIf_ChannelType FrIf_Chl
|
||
);
|
||
```
|
||
|
||
**描述**:设置唤醒通道(双通道节点)。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
- `FrIf_Chl`:唤醒通道(A 或 B)。
|
||
|
||
**返回值**:
|
||
- `E_OK`:设置成功。
|
||
- `E_NOT_OK`:设置失败。
|
||
|
||
#### 8.3.13 `FrIf_SendWUP`
|
||
|
||
```c
|
||
Std_ReturnType FrIf_SendWUP(uint8 FrIf_CtrlIdx);
|
||
```
|
||
|
||
**描述**:发送 WUP 唤醒模式。
|
||
|
||
**参数**:
|
||
- `FrIf_CtrlIdx`:CC 索引。
|
||
|
||
**返回值**:
|
||
- `E_OK`:发送成功。
|
||
- `E_NOT_OK`:发送失败。
|
||
|
||
#### 8.3.14 `FrIf_GetVersionInfo`
|
||
|
||
```c
|
||
void FrIf_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
|
||
```
|
||
|
||
**描述**:返回 FrIf 的版本信息。
|
||
|
||
**参数**:
|
||
- `VersionInfoPtr`:输出版本信息指针。
|
||
|
||
**返回值**:无。
|
||
|
||
> 摘要标记:完整 API 列表(60+ 函数)已涵盖 14 个核心函数;其余 API 如 `FrIf_GetTransceiverMode`、`FrIf_SetTransceiverMode`、`FrIf_GetTransceiverWUReason`、`FrIf_ClearTransceiverWakeup`、`FrIf_CheckWakeupByTransceiver`、`FrIf_GetNumOfStartupFrames`、`FrIf_GetClockCorrection`、`FrIf_GetSyncFrameList`、`FrIf_GetChannelStatus`、`FrIf_AllSlots`、`FrIf_ReadCCConfig` 等参见原文 PDF 第 8.3 节。
|
||
|
||
### 8.4 调度函数
|
||
|
||
#### 8.4.1 `FrIf_MainFunction_<ClusterShortName>`
|
||
|
||
```c
|
||
void FrIf_MainFunction_<ClusterShortName>(void);
|
||
```
|
||
|
||
**描述**:周期性处理 job list、状态轮询、错误处理等。
|
||
|
||
**调度**:由 BSW 调度器以固定周期(典型 1ms)调用。
|
||
|
||
### 8.5 回调通知
|
||
|
||
#### 8.5.1 TX Confirmation
|
||
|
||
由 Fr 调用,通知 FrIf L-PDU 发送完成:
|
||
- `FrIf_<UserProvidedCallback>_TxConfirmation`
|
||
|
||
#### 8.5.2 RX Indication
|
||
|
||
由 Fr 调用,通知 FrIf L-PDU 接收完成:
|
||
- `FrIf_<UserProvidedCallback>_RxIndication`
|
||
|
||
#### 8.5.3 POC 状态变化
|
||
|
||
由 Fr 调用,通知 FrIf POC 状态变化。
|
||
|
||
#### 8.5.4 周期开始
|
||
|
||
由 Fr 调用,通知 FrIf 新周期开始(用于 job 调度)。
|
||
|
||
### 8.6 期望的接口
|
||
|
||
#### 8.6.1 强制接口
|
||
|
||
| API | 描述 |
|
||
|---|---|
|
||
| `Fr_Init` | 初始化 Fr |
|
||
| `Fr_ControllerInit` | 初始化 Fr CC |
|
||
| `Fr_StartCommunication` | 启动通信 |
|
||
| `Fr_AllowColdstart` | 允许 coldstart |
|
||
| `Fr_HaltCommunication` | 停止通信 |
|
||
| `Fr_TransmitTxLPdu` | 发送 L-PDU |
|
||
| `Fr_CancelTxLPdu` | 取消发送 |
|
||
| `Fr_ReceiveRxLPdu` | 接收 L-PDU |
|
||
| `Fr_GetPOCStatus` | 获取 POC 状态 |
|
||
| `Fr_SetWakeupChannel` | 设置唤醒通道 |
|
||
| `Fr_SendWUP` | 发送 WUP |
|
||
| `FrTrcv_SetTransceiverMode` | 设置收发器模式 |
|
||
| `FrTrcv_GetTransceiverMode` | 读取收发器模式 |
|
||
| `FrTrcv_GetTransceiverWUReason` | 获取唤醒原因 |
|
||
| `FrTrcv_ClearTransceiverWakeup` | 清除唤醒状态 |
|
||
| `FrTrcv_CheckWakeupByTransceiver` | 检查唤醒 |
|
||
| `Det_ReportError` | 上报开发错误 |
|
||
| `Dem_SetEventStatus` | 上报生产错误 |
|
||
|
||
#### 8.6.2 可选接口
|
||
|
||
| API | 描述 |
|
||
|---|---|
|
||
| `FrTrcv_GetTransceiverError` | 获取收发器错误 |
|
||
| `FrTrcv_EnableTransceiverBranch` | 启用分支 |
|
||
| `FrTrcv_DisableTransceiverBranch` | 禁用分支 |
|
||
| `BswM_FrIf_ComMIndication` | BswM 通知 |
|
||
|
||
#### 8.6.3 可配置接口
|
||
|
||
| API | 描述 |
|
||
|---|---|
|
||
| `FrIf_<TxConfirmation>` | TX 确认回调 |
|
||
| `FrIf_<RxIndication>` | RX 指示回调 |
|
||
| `FrIf_<TriggerTransmit>` | 触发发送回调 |
|
||
|
||
---
|
||
|
||
## 9 时序图
|
||
|
||
> 摘要标记:本章包含约 20+ 个时序图。关键流程:
|
||
> - **图 1:FrIf 初始化**:EcuM → `FrIf_Init` → 初始化所有 CC。
|
||
> - **图 2:发送流程**:上层 → `FrIf_Transmit` → 写入 LPdu → 槽到达 → 发送 → TX confirmation。
|
||
> - **图 3:接收流程**:CC 接收 → Fr → `FrIf_RxIndication` → 上层。
|
||
> - **图 4:冷启动**:CC 启动 → `FrIf_StartCommunication` → `FrIf_AllowColdstart` → 同步成功。
|
||
> - **图 5:双通道唤醒**:主动唤醒 → 设置唤醒通道 → 发送 WUP。
|
||
> - **图 6:被动唤醒**:WUP 接收 → 通知 FrSM。
|
||
> - **图 7:FIFO 接收**:FIFO 触发 → 批量读取。
|
||
> - **图 8:发送取消**。
|
||
> - **图 9:立即缓冲区管理**:PrepareLPdu / ReconfigLPdu / DisableLPdu。
|
||
> - **图 10:Multi-PDU**。
|
||
> - **图 11:TriggerTransmit 模式**。
|
||
> - **图 12:BusMirror(4.4.0 新增)**。
|
||
> - **图 13:可靠 TxConfirmation(4.3.0 增强)**。
|
||
> - **图 14:多核支持(4.4.0 增强)**。
|
||
|
||
---
|
||
|
||
## 10 配置规范
|
||
|
||
### 10.1 容器结构
|
||
|
||
```
|
||
FrIf
|
||
├── FrIfGeneral
|
||
├── FrIfCluster (multi)
|
||
│ ├── FrIfClusterDemEventParameterRefs
|
||
│ ├── FrIfController (multi)
|
||
│ │ ├── FrIfBufferCfg
|
||
│ │ ├── FrIfFrame (multi)
|
||
│ │ ├── FrIfLPdu (multi)
|
||
│ │ ├── FrIfFifo (multi)
|
||
│ │ ├── FrIfJobList
|
||
│ │ ├── FrIfJob (multi)
|
||
│ │ └── FrIfCtrlDemEventParameterRefs
|
||
│ ├── FrIfTransceiver (multi)
|
||
│ │ ├── FrIfTransceiverDemEventParameterRefs
|
||
│ │ └── FrIfTransceiverBranch (multi)
|
||
│ ├── FrIfNm
|
||
│ ├── FrIfSm
|
||
│ └── FrIfTp
|
||
└── FrIfGeneralDemEventParameterRefs
|
||
```
|
||
|
||
### 10.2 关键配置参数
|
||
|
||
#### 10.2.1 `FrIfGeneral`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|---|
|
||
| `FrIfDevErrorDetect` | Boolean | 启用开发错误检测 |
|
||
| `FrIfVersionInfoApi` | Boolean | 启用版本信息 API |
|
||
| `FrIfReliableTxConfirmationSupport` | Boolean | 启用可靠 TxConfirmation(4.3.0 增强) |
|
||
| `FrIfBusMirrorSupport` | Boolean | 启用 BusMirror(4.4.0 新增) |
|
||
| `FrIfTriggeredTransmitEnable` | Boolean | 启用 TriggerTransmit |
|
||
| `FrIfPublicCddHeaderFile` | Reference | 公共 CDD 头文件 |
|
||
| `FrIfIdx` | Integer | FrIf 实例索引 |
|
||
| `FrIfNumberOfClusters` | Integer | 集群数 |
|
||
| `FrIfMainFunctionPeriod` | Float | 主函数周期(秒) |
|
||
|
||
#### 10.2.2 `FrIfCluster`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|---|
|
||
| `FrIfClusterIdx` | Integer | 集群索引 |
|
||
| `FrIfClusterVariant` | Enum | 集群变体(单通道 A / 单通道 B / 双通道) |
|
||
| `FrIfNumberOfControllers` | Integer | CC 数 |
|
||
| `FrIfNumberOfTransceivers` | Integer | 收发器数 |
|
||
| `FrIfMaxBufferSize` | Integer | 最大缓冲区大小 |
|
||
| `FrIfCycle` | Float | FlexRay 周期(秒) |
|
||
| `FrIfMacrotickDuration` | Float | macrotick 持续时间(秒) |
|
||
| `FrIfChannelA` | Boolean | 启用通道 A |
|
||
| `FrIfChannelB` | Boolean | 启用通道 B |
|
||
| `FrIfNmRef` | Reference | 关联的 Nm 模块 |
|
||
| `FrIfSmRef` | Reference | 关联的 FrSM 模块 |
|
||
| `FrIfTpRef` | Reference | 关联的 TP 模块 |
|
||
|
||
#### 10.2.3 `FrIfController`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|---|
|
||
| `FrIfControllerIdx` | Integer | CC 索引 |
|
||
| `FrIfCtrlRef` | Reference | 关联的 Fr 控制器 |
|
||
| `FrIfNumberOfBuffers` | Integer | 缓冲区数 |
|
||
| `FrIfBuffer` | Reference (multi) | 缓冲区配置 |
|
||
| `FrIfFrame` | Reference (multi) | 帧配置 |
|
||
| `FrIfLPdu` | Reference (multi) | L-PDU 配置 |
|
||
| `FrIfFifo` | Reference (multi) | FIFO 配置 |
|
||
| `FrIfJobList` | Reference | Job list 配置 |
|
||
|
||
#### 10.2.4 `FrIfBuffer`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|---|
|
||
| `FrIfBufferIdx` | Integer | 缓冲区索引 |
|
||
| `FrIfBufferSize` | Integer | 缓冲区大小(字节) |
|
||
| `FrIfBufferDirection` | Enum | `TX` / `RX` |
|
||
| `FrIfBufferChannelA` | Boolean | 通道 A 启用 |
|
||
| `FrIfBufferChannelB` | Boolean | 通道 B 启用 |
|
||
|
||
#### 10.2.5 `FrIfLPdu`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|
|
||
| `FrIfLPduIdx` | Integer | L-PDU 索引 |
|
||
| `FrIfLPduCycleCode` | Integer | 周期代码 |
|
||
| `FrIfLPduChannel` | Enum | `A` / `B` |
|
||
| `FrIfLPduSlotId` | Integer | 槽 ID |
|
||
| `FrIfLPduDataLength` | Integer | 数据长度 |
|
||
| `FrIfLPduDirection` | Enum | `TX` / `RX` |
|
||
| `FrIfLPduReconfigurable` | Boolean | 立即缓冲区可重配 |
|
||
| `FrIfLPduType` | Enum | L-PDU 类型 |
|
||
|
||
#### 10.2.6 `FrIfFifo`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|
|
||
| `FrIfFifoIdx` | Integer | FIFO 索引 |
|
||
| `FrIfFifoDepth` | Integer | FIFO 深度 |
|
||
| `FrIfFifoRange` | Range | FIFO 槽 ID 范围 |
|
||
| `FrIfFifoAcceptanceFilter` | Filter | 接收过滤 |
|
||
|
||
#### 10.2.7 `FrIfJobList` / `FrIfJob`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|---|
|
||
| `FrIfJobListIdx` | Integer | Job list 索引 |
|
||
| `FrIfJobListCyclePeriod` | Integer | Job list 周期 |
|
||
| `FrIfJobIdx` | Integer | Job 索引 |
|
||
| `FrIfJobType` | Enum | `TX` / `RX` / `STATE_CHANGE` / `STARTUP` |
|
||
| `FrIfJobSlotId` | Integer | 槽 ID |
|
||
| `FrIfJobCycleOffset` | Integer | 周期偏移 |
|
||
| `FrIfJobChannel` | Enum | `A` / `B` |
|
||
| `FrIfJobLPduRef` | Reference | 关联的 L-PDU |
|
||
|
||
#### 10.2.8 `FrIfTransceiver`
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|---|---|---|
|
||
| `FrIfTrcvIdx` | Integer | 收发器索引 |
|
||
| `FrIfTrcvRef` | Reference | 关联的 FrTrcv |
|
||
| `FrIfTrcvChannel` | Enum | `A` / `B` |
|
||
| `FrIfTrcvBranch` | Reference (multi) | Active Star 分支 |
|
||
|
||
### 10.3 发布信息
|
||
|
||
无附加发布参数。
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
- 本文档基于 **AUTOSAR CP Release 4.4.0** 翻译,对应原文 `AUTOSAR_SWS_FlexRayInterface.pdf`(164 页)。
|
||
- 关键翻译策略:
|
||
- **完整翻译**:封面、文档标识、变更历史(摘要)、目录、章节 1-10 的所有正文、API 声明、错误分类、配置参数。
|
||
- **保留英文**:所有 API 名、类型名、FrIf 状态名、配置参数标识符、需求 ID。
|
||
- **摘要标记**:第 6 章需求可追踪性表涵盖 200+ 项需求(最复杂的 FlexRay 模块);第 8.3 节 API 列出 14 个核心函数(原文 60+ 个);第 9 章时序图列出 14 个关键图。完整内容请参见原文 PDF。
|
||
- 内容置信度:高。所有 FrIf 状态、API 签名、配置容器均已涵盖。
|