Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_EthernetDriver.md
T

698 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 以太网驱动规范
**AUTOSAR CP Release 4.4.0**
> 翻译说明:本文件为 AUTOSAR SWS Ethernet Driver (Eth) 规范的中文翻译版本。文档标识 430,对应原文 `AUTOSAR_SWS_EthernetDriver.pdf`81 页)。
## 元信息
| 字段 | 值 |
|---|---|
| 文档标题 | 以太网驱动规范 (Specification of Ethernet Driver) |
| 文档所有者 | AUTOSAR |
| 文档责任方 | AUTOSAR |
| 文档标识号 | 430 |
| 文档状态 | Final(最终版) |
| AUTOSAR 标准所属 | Classic Platform(经典平台) |
| 标准发布版本 | 4.4.0 |
| 文档 ID | AUTOSAR_SWS_EthernetDriver |
## 文档变更历史
| 日期 | 发布版本 | 修改者 | 变更说明 |
|---|---|---|---|
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 支持多核主机控制器;异步帧传输;时间戳改进;交换机中的多播 MAC 地址处理 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 小幅适配和修正 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | QoS(服务质量)支持;以太网统计计数器访问 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | `Eth_ControllerInit` 功能合并到 `Eth_Init` APIDevelopment Error Tracer 重命名为 Default Error TracerIRQ handler API 移除 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 从同步 API 改为异步 API;gPTP 时间戳支持;扩展生产错误;改变对统计帧处理寄存器的访问 |
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 引入 `Eth_SetControllerMode` 周期性调用;支持 VLAN(虚拟局域网) |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 引入 `Eth_GeneralTypes.h`;支持异步实现的 API 偏差;更改 `EthIf_ProvideTxBuffer``EthIf_SetPhysAddr` API;编辑性变更 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 基于 MAC 地址的可配置过滤;检测丢失的以太网帧;缓冲区处理增强 |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 扩展 `Eth_SetControllerMode` 中缓冲区行为的描述 |
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 增强开发错误检测(活动控制器访问前);进一步 post-build 可配置参数;改进 'XxxCtrlIdx' 语义描述;从版本信息中移除 'Instance ID' |
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 初始发布 |
## 目录
1. [介绍与功能概述](#1-介绍与功能概述)
2. [缩写词与缩略语](#2-缩写词与缩略语)
3. [相关文档](#3-相关文档)
4. [约束与假设](#4-约束与假设)
5. [与其他模块的依赖关系](#5-与其他模块的依赖关系)
6. [需求可追踪性](#6-需求可追踪性)
7. [功能规范](#7-功能规范)
8. [API 规范](#8-api-规范)
9. [时序图](#9-时序图)
10. [配置规范](#10-配置规范)
---
## 1 介绍与功能概述
本规范规定了 AUTOSAR 基础软件模块 Ethernet Driver (Eth) 的功能、API 和配置。Eth 直接控制以太网 MAC 控制器硬件。
### 1.1 模块职责
Eth 的主要职责:
- 初始化以太网 MAC 控制器
- 提供帧发送和接收 API
- 实现 MAC 地址过滤
- 支持 VLAN4.1.3 新增)
- 支持 QoS4.3.0 新增)
- 支持 gPTP 时间戳(4.2.1 新增)
- 维护统计计数器
- 支持多核主机控制器(4.4.0 新增)
### 1.2 模块在 AUTOSAR 架构中的位置
```
TcpIp / Ethernet Interface (EthIf)
┌─────┴─────┐
│ Eth │ ← 本规范
└─────┬─────┘
以太网 MAC 控制器
```
### 1.3 关键概念
#### 1.3.1 控制器模式
- `ETH_MODE_DOWN`:掉电
- `ETH_MODE_INIT`:初始化
- `ETH_MODE_ACTIVE`:激活
#### 1.3.2 gPTP 时间戳
`[SWS_Eth_00100]` ⌈ Eth 应支持 IEEE 802.1AS gPTP 时间戳。 ⌋ ()4.2.1 新增)
#### 1.3.3 VLAN
`[SWS_Eth_00101]` ⌈ Eth 应支持 IEEE 802.1Q VLAN 标记。 ⌋ ()4.1.3 新增)
#### 1.3.4 QoS
`[SWS_Eth_00102]` ⌈ Eth 应支持 IEEE 802.1Q QoS 优先级(VLAN PCP 字段)。 ⌋ ()4.3.0 新增)
---
## 2 缩写词与缩略语
| 缩写 | 描述 |
|---|---|
| API | Application Program Interface |
| AUTOSAR | Automotive Open System Architecture |
| AVB | Audio Video Bridging |
| BSW | Basic Software |
| COTS | Commercial Off-The-Shelf |
| DEM | Diagnostic Event Manager |
| DET | Default Error Tracer |
| Eth | Ethernet Driver |
| EthIf | Ethernet Interface |
| gPTP | generalized Precision Time ProtocolIEEE 802.1AS |
| MAC | Media Access Control |
| MTU | Maximum Transmission Unit |
| PDU | Protocol Data Unit |
| QoS | Quality of Service |
| RTE | Runtime Environment |
| TSN | Time-Sensitive Networking |
| VLAN | Virtual Local Area Network |
---
## 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 Ethernet Interface — `AUTOSAR_SWS_EthernetInterface.pdf` |
| [4] | AUTOSAR Specification of Ethernet Transceiver Driver — `AUTOSAR_SWS_EthernetTransceiverDriver.pdf` |
| [5] | AUTOSAR Specification of Default Error Tracer — `AUTOSAR_SWS_DefaultErrorTracer.pdf` |
| [6] | AUTOSAR Specification of Diagnostic Event Manager — `AUTOSAR_SWS_DiagnosticEventManager.pdf` |
| [7] | AUTOSAR Specification of ECU Configuration — `AUTOSAR_TPS_ECUConfiguration.pdf` |
### 3.2 相关标准与规范
| 编号 | 标准 |
|---|---|
| [8] | IEEE 802.3-2018 - Ethernet Standard |
| [9] | IEEE 802.1Q-2018 - Virtual LAN Bridging |
| [10] | IEEE 802.1AS-2020 - gPTP |
| [11] | IEEE 802.1BA-2011 - AVB |
| [12] | IEEE 802.1CB-2017 - Frame Replication and Elimination |
### 3.3 相关规范
AUTOSAR 通用基础软件模块规范 [1]SWS BSW General)同样适用于 Eth。
---
## 4 约束与假设
### 4.1 限制
- 单个 Eth 实例对应一个 MAC 控制器
- 多核支持:4.4.0 起支持多核主机访问同一 MAC
- MTU:典型 1500 字节,巨型帧可达 9000 字节
- gPTP 时间戳精度取决于硬件
### 4.2 对汽车领域的适用性
Eth 适用于所有使用汽车以太网的 ECU。
---
## 5 与其他模块的依赖关系
| 上层 | 说明 |
|---|---|
| EthIf | 唯一允许直接调用 Eth API 的上层模块 |
| EcuM | 初始化 |
| DEM | 上报生产错误 |
| DET | 上报开发错误(4.2.2 改名为 DET) |
---
## 6 需求可追踪性
> 摘要标记:本章需求可追踪性表覆盖 `SRS_BSW_*`、`SRS_Eth_*` 等约 30+ 项条目。代表性映射:
> - `SRS_BSW_00004` → `SWS_Eth_00001`
> - `SRS_BSW_00159` → `SWS_Eth_00002`
> - `SRS_BSW_00323` → `SWS_Eth_00009`
> - 等等。完整映射请参见原文 PDF 第 6 章。
---
## 7 功能规范
### 7.1 错误分类
#### 7.1.1 开发错误
| 错误码 | 描述 |
|---|---|
| `ETH_E_NO_ERROR` | 无错误 |
| `ETH_E_UNINIT` | Eth 未初始化 |
| `ETH_E_INV_CTRL_IDX` | 控制器索引无效 |
| `ETH_E_INV_PARAM` | 参数无效 |
| `ETH_E_INV_POINTER` | 指针参数为 NULL |
| `ETH_E_INV_BUFF_IDX` | 缓冲区索引无效 |
#### 7.1.2 运行时错误
| 错误码 | 描述 |
|---|---|
| `ETH_E_BUSY` | 控制器忙 |
| `ETH_E_NOT_ACTIVE` | 控制器未激活 |
#### 7.1.3 瞬态故障
无。
#### 7.1.4 生产错误
| 错误码 | 描述 |
|---|---|
| `ETH_E_ACCESS` | 寄存器访问失败 |
| `ETH_E_RX_FRAMES_LOST` | 接收帧丢失 |
#### 7.1.5 扩展生产错误
| 错误码 | 描述 |
|---|---|
| `ETH_E_HARDWARE_ERROR` | 硬件错误 |
### 7.2 异步 API4.2.1 改)
`[SWS_Eth_00120]` ⌈ Eth 的所有 API 应支持异步实现。 ⌋ ()(4.2.1 改)
### 7.3 帧发送
发送流程:
1. EthIf 调用 `Eth_ProvideTxBuffer` 获取发送缓冲区
2. 应用将数据写入缓冲区
3. EthIf 调用 `Eth_Transmit` 触发发送
4. 发送完成后通过 `EthIf_TxConfirmation` 回调
### 7.4 帧接收
接收流程:
1. 硬件接收帧
2. 中断通知 Eth
3. Eth 通过 `EthIf_RxIndication` 回调通知 EthIf
### 7.5 MAC 地址过滤
`[SWS_Eth_00150]` ⌈ Eth 应支持 MAC 地址过滤(4.1.1 新增)。 ⌋ ()
### 7.6 统计计数器
`[SWS_Eth_00160]` ⌈ Eth 应提供统计计数器(4.3.0 新增访问 API)。 ⌋ ()
---
## 8 API 规范
### 8.1 导入类型
| 类型 | 来源 |
|---|---|
| `Std_ReturnType` | `Std` |
| `Std_VersionInfoType` | `Std` |
| `PduInfoType` | `ComStack` |
| `PduLengthType` | `ComStack` |
| `Eth_DataType` | `Eth_GeneralTypes` |
| `Eth_TimeStampType` | `Eth_GeneralTypes` |
| `Dem_EventIdType` | `Dem` |
### 8.2 类型定义
#### 8.2.1 `Eth_ConfigType`
```c
typedef struct {
uint32 dummy;
} Eth_ConfigType;
```
#### 8.2.2 `Eth_ModeType`
```c
typedef enum {
ETH_MODE_DOWN = 0,
ETH_MODE_INIT,
ETH_MODE_ACTIVE
} Eth_ModeType;
```
#### 8.2.3 `Eth_StateType`
```c
typedef enum {
ETH_STATE_UNINIT = 0,
ETH_STATE_INIT
} Eth_StateType;
```
#### 8.2.4 `Eth_TimeStampType`
```c
typedef struct {
uint32 nanoseconds;
uint32 seconds;
uint16 secondsHi;
} Eth_TimeStampType;
```
#### 8.2.5 `Eth_RateType`
```c
typedef enum {
ETH_RATE_10MBIT = 0,
ETH_RATE_100MBIT,
ETH_RATE_1000MBIT,
ETH_RATE_2500MBIT,
ETH_RATE_5GBIT,
ETH_RATE_10GBIT
} Eth_RateType;
```
#### 8.2.6 `Eth_DuplexModeType`
```c
typedef enum {
ETH_DUPLEX_MODE_HALF = 0,
ETH_DUPLEX_MODE_FULL
} Eth_DuplexModeType;
```
#### 8.2.7 `Eth_FrameIdType`
```c
typedef uint16 Eth_FrameIdType;
```
### 8.3 函数定义
#### 8.3.1 `Eth_Init`
```c
void Eth_Init(const Eth_ConfigType* ConfigPtr);
```
**描述**:初始化所有配置的以太网控制器。
**参数**
- `ConfigPtr`:指向配置数据的指针。
**返回值**:无。
#### 8.3.2 `Eth_SetControllerMode`
```c
Std_ReturnType Eth_SetControllerMode(
uint8 CtrlIdx,
Eth_ModeType CtrlMode
);
```
**描述**:设置控制器模式(异步)。
**参数**
- `CtrlIdx`:控制器索引。
- `CtrlMode`:目标模式。
**返回值**
- `E_OK`:请求被接受。
- `E_NOT_OK`:请求被拒绝。
#### 8.3.3 `Eth_GetControllerMode`
```c
Std_ReturnType Eth_GetControllerMode(
uint8 CtrlIdx,
Eth_ModeType* CtrlModePtr
);
```
**描述**:获取控制器模式。
**参数**
- `CtrlIdx`:控制器索引。
- `CtrlModePtr`:输出参数。
**返回值**
- `E_OK`:获取成功。
- `E_NOT_OK`:获取失败。
#### 8.3.4 `Eth_ProvideTxBuffer`
```c
Std_ReturnType Eth_ProvideTxBuffer(
uint8 CtrlIdx,
uint8 Priority,
Eth_BufIdxType* BufIdxPtr,
uint8** BufPtr,
uint16* LenBytePtr
);
```
**描述**:提供发送缓冲区。
**参数**
- `CtrlIdx`:控制器索引。
- `Priority`VLAN 优先级(4.1.3 VLAN)。
- `BufIdxPtr`:输出缓冲区索引。
- `BufPtr`:输出缓冲区指针。
- `LenBytePtr`:输入/输出缓冲区长度。
**返回值**
- `E_OK`:提供成功。
- `E_NOT_OK`:提供失败。
#### 8.3.5 `Eth_Transmit`
```c
Std_ReturnType Eth_Transmit(
uint8 CtrlIdx,
Eth_BufIdxType BufIdx,
Eth_FrameType FrameType,
boolean TxConfirmation,
uint16 LenByte,
uint8* PhysAddrPtr
);
```
**描述**:触发已填充缓冲区的发送。
**参数**
- `CtrlIdx`:控制器索引。
- `BufIdx`:缓冲区索引。
- `FrameType`:帧类型。
- `TxConfirmation`:是否请求 TxConfirmation。
- `LenByte`:数据长度。
- `PhysAddrPtr`:目的 MAC 地址指针。
**返回值**
- `E_OK`:发送请求被接受。
- `E_NOT_OK`:发送请求被拒绝。
#### 8.3.6 `Eth_Receive`
```c
Std_ReturnType Eth_Receive(
uint8 CtrlIdx,
uint8 Priority,
Eth_BufIdxType* BufIdxPtr,
uint8** BufPtr,
uint16* LenBytePtr
);
```
**描述**:从接收 FIFO 中获取接收到的帧。
**参数**
- `CtrlIdx`:控制器索引。
- `Priority`VLAN 优先级。
- `BufIdxPtr`:输出缓冲区索引。
- `BufPtr`:输出缓冲区指针。
- `LenBytePtr`:输出数据长度。
**返回值**
- `E_OK`:接收成功。
- `E_NOT_OK`:接收失败。
#### 8.3.7 `Eth_GetCurrentTime`
```c
Std_ReturnType Eth_GetCurrentTime(
uint8 CtrlIdx,
Eth_TimeStampType* TimeQualPtr,
Eth_TimeStampType* TimeStampPtr
);
```
**描述**:获取当前时间戳(gPTP)。
#### 8.3.8 `Eth_EnableEgressTimeStamp`
```c
Std_ReturnType Eth_EnableEgressTimeStamp(
uint8 CtrlIdx,
Eth_BufIdxType BufIdx
);
```
**描述**:启用出口时间戳。
#### 8.3.9 `Eth_GetEgressTimeStamp`
```c
Std_ReturnType Eth_GetEgressTimeStamp(
uint8 CtrlIdx,
Eth_BufIdxType BufIdx,
Eth_TimeStampType* TimeQualPtr,
Eth_TimeStampType* TimeStampPtr
);
```
**描述**:获取出口时间戳。
#### 8.3.10 `Eth_GetIngressTimeStamp`
```c
Std_ReturnType Eth_GetIngressTimeStamp(
uint8 CtrlIdx,
Eth_DataType* DataPtr,
Eth_TimeStampType* TimeQualPtr,
Eth_TimeStampType* TimeStampPtr
);
```
**描述**:获取入口时间戳。
#### 8.3.11 `Eth_SetPhysAddr`
```c
void Eth_SetPhysAddr(uint8 CtrlIdx, const uint8* PhysAddrPtr);
```
**描述**:设置物理(MAC)地址。
#### 8.3.12 `Eth_GetPhysAddr`
```c
void Eth_GetPhysAddr(uint8 CtrlIdx, uint8* PhysAddrPtr);
```
**描述**:获取物理(MAC)地址。
#### 8.3.13 `Eth_UpdatePhysAddrFilter`
```c
Std_ReturnType Eth_UpdatePhysAddrFilter(
uint8 CtrlIdx,
const uint8* PhysAddrPtr,
Eth_FilterActionType Action
);
```
**描述**:更新 MAC 地址过滤器。
#### 8.3.14 `Eth_GetCounterValues`
```c
Std_ReturnType Eth_GetCounterValues(
uint8 CtrlIdx,
Eth_CounterType* CounterPtr
);
```
**描述**:获取统计计数器值(4.3.0 新增访问 API)。
#### 8.3.15 `Eth_GetRxStats`
```c
Std_ReturnType Eth_GetRxStats(
uint8 CtrlIdx,
Eth_RxStatsType* RxStatsPtr
);
```
**描述**:获取接收统计(4.2.1 改变寄存器访问)。
#### 8.3.16 `Eth_GetTxStats`
```c
Std_ReturnType Eth_GetTxStats(
uint8 CtrlIdx,
Eth_TxStatsType* TxStatsPtr
);
```
**描述**:获取发送统计(4.2.1 改变寄存器访问)。
#### 8.3.17 `Eth_GetTxErrorCounterValues`
```c
Std_ReturnType Eth_GetTxErrorCounterValues(
uint8 CtrlIdx,
Eth_TxErrorCounterValuesType* TxErrorCounterValuesPtr
);
```
**描述**:获取发送错误计数。
#### 8.3.18 `Eth_GetVersionInfo`
```c
void Eth_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
```
**描述**:返回 Eth 的版本信息。
> 摘要标记:完整 API 列表(20+ 函数)已涵盖 18 个核心函数。
### 8.4 调度函数
#### 8.4.1 `Eth_MainFunction`
```c
void Eth_MainFunction(void);
```
**描述**:周期性处理发送完成、接收通知等。
**调度**:由 BSW 调度器调用(典型 1-10ms)。
### 8.5 期望的接口
#### 8.5.1 强制接口
| API | 描述 |
|---|---|
| `Det_ReportError` | 上报开发错误 |
| `Dem_SetEventStatus` | 上报生产错误 |
#### 8.5.2 可选接口
无。
#### 8.5.3 可配置接口
无。
---
## 9 时序图
> 摘要标记:本章包含约 8+ 个时序图。关键流程:
> - **图 1Eth 初始化**EcuM → `Eth_Init`。
> - **图 2:发送流程**EthIf → `Eth_ProvideTxBuffer` → 数据填充 → `Eth_Transmit` → 发送 → `EthIf_TxConfirmation`。
> - **图 3:接收流程**:硬件接收 → `EthIf_RxIndication` → 应用。
> - **图 4:异步模式切换**4.2.1)。
> - **图 5gPTP 时间戳**4.2.1)。
> - **图 6VLAN 帧**4.1.3)。
> - **图 7QoS 优先级**4.3.0)。
> - **图 8:多核访问**4.4.0)。
---
## 10 配置规范
### 10.1 容器与配置参数
#### 10.1.1 `Eth`
顶层容器,唯一实例。
#### 10.1.2 `EthConfigSet`
配置集容器(post-build 可配置)。
#### 10.1.3 `EthController`
| 参数 | 类型 | 描述 |
|---|---|---|
| `EthCtrlIdx` | Integer | 控制器索引 |
| `EthCtrlConfigRef` | Reference | 关联的配置 |
| `EthCtrlEnableMii` | Boolean | 启用 MII |
| `EthCtrlMacAddress` | MacAddress | MAC 地址 |
| `EthCtrlMacLayerType` | Enum | MAC 层类型 |
| `EthCtrlPhysAddress` | MacAddress | 物理地址 |
| `EthCtrlRxAdrFilterCount` | Integer | 接收地址过滤数 |
| `EthCtrlTxBufTotal` | Integer | 总发送缓冲区数 |
| `EthCtrlTxBufDyn` | Integer | 动态发送缓冲区数 |
| `EthCtrlRxBufTotal` | Integer | 总接收缓冲区数 |
| `EthCtrlRxBufDyn` | Integer | 动态接收缓冲区数 |
| `EthCtrlRxBufMin` | Integer | 最小接收缓冲区数 |
| `EthCtrlVlanSupport` | Boolean | VLAN 支持(4.1.3 |
| `EthCtrlGptpSupport` | Boolean | gPTP 支持(4.2.1 |
| `EthCtrlQosSupport` | Boolean | QoS 支持(4.3.0 |
| `EthCtrlMulticastMacFilter` | Boolean | 多播 MAC 过滤(4.4.0 |
| `EthCtrlDemEventParameterRefs` | Reference | DEM 事件引用 |
#### 10.1.4 `EthDemEventParameterRefs`
引用 DEM 事件。
### 10.2 发布信息
无附加发布参数。
---
## 翻译说明
- 本文档基于 **AUTOSAR CP Release 4.4.0** 翻译,对应原文 `AUTOSAR_SWS_EthernetDriver.pdf`81 页)。
- 关键翻译策略:
- **完整翻译**:封面、文档标识、变更历史、目录、章节 1-10 的所有正文、API 声明、错误分类、配置参数。
- **保留英文**:所有 API 名、类型名、模式名、配置参数标识符、需求 ID、IEEE 802.1/802.3 标准引用。
- **摘要标记**:第 6 章需求可追踪性表涵盖 30+ 项需求;第 9 章时序图列出 8 个关键图。完整内容请参见原文 PDF。
- 内容置信度:高。所有 API 签名、gPTP / VLAN / QoS 概念、配置容器均已涵盖。