P2 batch translation: 49 PDFs (Memory + Safety + Crypto + ModeManagement + IO)

This commit is contained in:
opencode-translator
2026-06-13 10:04:28 +08:00
parent 6f293acbf7
commit 784f11ab73
50 changed files with 36262 additions and 57 deletions
+563
View File
@@ -0,0 +1,563 @@
# Flash EEPROM 仿真规范
> **文档标题**: Specification of Flash EEPROM Emulation
> **AUTOSAR CP Release**: 4.4.0
> **文档编号**: 286
> **文档类型**: SWS (Software Specification)
---
## 文档标识
| 项目 | 内容 |
|------|------|
| Document Title | Specification of Flash EEPROM Emulation |
| Document Owner | AUTOSAR |
| Document Responsibility | AUTOSAR |
| Document Identification No | 286 |
| Document Status | Final |
| Part of AUTOSAR Standard | Classic Platform |
| Part of Standard Release | 4.4.0 |
---
## 文档变更历史
| 日期 | 版本 | 变更者 | 变更描述 |
|------|------|--------|----------|
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 修正时序图中的笔误 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 引入运行时错误;调整引用 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 更新追溯信息;MEMIF_BUSY_INTERNAL 期间行为重做;主函数范围适配 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | FEE_BUSY_INTERNAL 期间行为重做;错误分类重做;调试支持标记为过时;请求块无法找到时澄清作业结果 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 新增空白检查需求;需求与特性、通用和模块特定需求关联 |
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 编辑性修订 |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 移除主函数时序需求;Fee_Write 函数原型增加 const 限定符;新增 FeeMainFunctionPeriod 配置参数 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 按新的 SWS_BSWGeneral 重做;已发布参数 FeeMaximumBlockingTime 弃用;配置参数 FeeIndex 弃用 |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | DET 错误增减;细化内部管理操作处理;模块短名变更;一致性检查重新表述 |
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 澄清模块间检查;细化内部管理操作处理;调整 FeeBlockNumber 和 FeeBlockSize 范围;状态机适配支持初始化可能不在 Fee_Init 内完成 |
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 澄清配置变体;重新表述作业结果处理;配置参数范围限制 |
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律免责声明修订 |
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 表格格式生成;文档元信息扩充 |
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 文件包含结构更新;初始化函数 API 适配;FEE 块编号范围适配 |
| 2006-05-16 | 2.0 | 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 介绍与功能概述
本规范描述 Flash EEPROM Emulation 模块的功能、API 和配置。
```
NVRAM Manager
Memory Hardware Abstraction
├── Memory Abstraction Interface (MemIf)
│ │
│ ▼
├── Flash EEPROM Emulation (FEE) ←── 本文档
│ │
│ ▼
└── Flash Driver
```
Flash EEPROM Emulation (FEE) 模块仿真 EEPROM Abstraction Layer 在 Flash 内存技术上的行为。它提供:
- 32 位虚拟线性地址空间
- 统一的(虚拟)分段方案
- 虚拟无限的擦/写周期数
它使上层(NVRAM 管理器)与底层 Flash 驱动和器件解耦。
---
## 2 缩略语
| 缩略语 | 描述 |
|--------|------|
| FEE | Flash EEPROM Emulation |
| Fee | 模块名 |
| Fls | Flash 驱动模块 |
| EA | EEPROM Abstraction |
| NV | 非易失 |
| NvM | NVRAM Manager |
| MemIf | Memory Abstraction Interface |
| Logical Block(逻辑块) | 模块用户可单独寻址的内存区域 |
| Page(页) | Flash 一次可写最小单元 |
| Sector(扇区) | Flash 一次可擦最小单元 |
| Virtual Page(虚拟页) | FEE 模块用于内部地址计算的可配置最小寻址单元 |
| Memory swap area(内存交换区) | FEE 使用的备用 Flash 区域,用于在重组期间存储数据 |
| DEM | Diagnostic Event Manager |
| DET | Default Error Tracer |
---
## 3 相关文档
### 3.1 输入文档
- List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
- Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
- General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
- Requirements on Memory Hardware Abstraction Layer — AUTOSAR_SRS_MemoryHWAbstractionLayer.pdf
- Specification of Flash Driver — AUTOSAR_SWS_FlashDriver.pdf
- Specification of Memory Abstraction Interface — AUTOSAR_SWS_MemoryAbstractionInterface.pdf
- Specification of NVRAM Manager — AUTOSAR_SWS_NVRAMManager.pdf
- Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
- General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf
### 3.2 相关规范
AUTOSAR 提供基础软件模块通用规范(SWS BSW General),也适用于 Flash EEPROM Emulation。
---
## 4 约束与假设
### 4.1 限制
无限制。
### 4.2 适用车型领域
无限制。
---
## 5 模块依赖
FEE 模块依赖于底层 Flash 驱动。
---
## 6 需求追溯
(主要追溯关系,完整表见原文 PDF)
| 需求 | 满足者 |
|------|--------|
| SRS_MemHwAb_14001 (起止地址对齐) | SWS_Fee_00005, 00068, 00075, 00137 |
| SRS_MemHwAb_14002 (写周期配置) | SWS_Fee_00080 |
| SRS_MemHwAb_14005 (32 位虚拟地址) | SWS_Fee_00066, 00075 |
| SRS_MemHwAb_14006 (64K 边界对齐) | SWS_Fee_00024 |
| SRS_MemHwAb_14007 (读对齐限制) | SWS_Fee_00021 |
| SRS_MemHwAb_14009 (地址转换) | SWS_Fee_00007, 00021, 00024, 00036, 00063 |
| SRS_MemHwAb_14010 (完整块写) | SWS_Fee_00087, 00151, 00159, 00181 |
| SRS_MemHwAb_14012 (写访问分散) | SWS_Fee_00079 |
| SRS_MemHwAb_14013 (立即数据不延迟) | SWS_Fee_00025 |
| SRS_MemHwAb_14014 (数据不一致检测) | SWS_Fee_00046, 00047 |
| SRS_MemHwAb_14015 (报告不一致) | SWS_Fee_00104 |
| SRS_MemHwAb_14016 (不返回不一致数据) | SWS_Fee_00104 |
| SRS_MemHwAb_14018 (FEE 扩展 Flash 驱动) | SWS_Fee_00150 |
| SRS_MemHwAb_14026 (不使用 0x0000/0xFFFF) | SWS_Fee_00006 |
| SRS_MemHwAb_14028 (无效化块) | SWS_Fee_00037, 00074, 00091 |
| SRS_MemHwAb_14029 (部分读取) | SWS_Fee_00022, 00086, 00158, 00179 |
| SRS_MemHwAb_14031 (取消异步操作) | SWS_Fee_00077, 00078, 00088 |
| SRS_MemHwAb_14032 (擦除立即数据) | SWS_Fee_00063, 00064, 00065 |
完整追溯表见原文 PDF。
---
## 7 功能规范
### 7.1 总体行为
FEE 模块的设计与 EA 模块极为相似。
[SWS_Fee_00137] ⌈Flash EEPROM Emulation (FEE) 一次只接受一个作业,即模块不应为待处理作业提供队列(这是 NVRAM 管理器的职责)。⌋
#### 7.1.1 寻址方案与分段
FEE 提供 32 位虚拟线性地址空间和统一的分段方案。32 位虚拟地址由:
- **16 位块编号** — 允许(理论上)65536 个逻辑块
- **16 位块偏移** — 允许每块 64 KB
组成。
[SWS_Fee_00075] ⌈虚拟页大小(`FEE_VIRTUAL_PAGE_SIZE`)应为物理页大小的整数倍。⌋
[SWS_Fee_00005] ⌈每个已配置逻辑块应占用虚拟页大小的整数倍。⌋
[SWS_Fee_00068] ⌈逻辑块不应相互重叠或包含。⌋
[SWS_Fee_00006] ⌈块编号 0x0000 和 0xFFFF 不应配置为逻辑块。⌋
#### 7.1.2 地址计算
[SWS_Fee_00007] ⌈FEE 模块函数应将 16 位块编号和 16 位块偏移组合,以派生底层 Flash 驱动所需的物理 Flash 地址。⌋
[SWS_Fee_00066] ⌈仅 16 位块编号中不表示特定数据集或冗余副本的位应用于地址计算。⌋
#### 7.1.3 擦除周期限制
[SWS_Fee_00079] ⌈Fee 模块配置应在配置参数 `FeeNumberOfWriteCycles` 中定义每个逻辑块预期的擦/写周期数。⌋
[SWS_Fee_00080] ⌈如底层 Flash 器件或驱动不提供至少已配置的擦/写周期数,FEE 模块应提供机制以分散擦/写访问。⌋
**FEE 特殊机制 — 块漫游**:
- FEE 使用"漫游"算法管理多个 Flash 扇区
- 通过将新写入的数据放到不同位置,延长 Flash 寿命
- 必须存在备用 Flash 空间用于重组
#### 7.1.4 "立即"数据处理
包含立即数据的块必须瞬时写入。
[SWS_Fee_00025] ⌈立即数据写入不应因内部管理操作或被写入内存区域的擦除而延迟。FEE 必须始终保留预擦除区域用于立即数据。⌋
#### 7.1.5 管理块正确性信息
[SWS_Fee_00046] ⌈FEE 模块应为每个块管理一致性信息。⌋
[SWS_Fee_00047] ⌈块写入开始时标记为不一致,成功完成后标记为一致。⌋
### 7.2 错误分类
#### 7.2.1 开发错误
| 错误类型 | 相关错误代码 | 值[hex] |
|----------|--------------|---------|
| 模块未初始化即调用 API 服务 | FEE_E_UNINIT | 0x01 |
| 以无效块编号调用 API 服务 | FEE_E_INVALID_BLOCK_NO | 0x02 |
| 以无效块偏移调用 API 服务 | FEE_E_INVALID_BLOCK_OFS | 0x03 |
| 以 NULL 指针调用 API 服务 | FEE_E_PARAM_POINTER | 0x04 |
| 以无效块长度调用 API 服务 | FEE_E_INVALID_BLOCK_LEN | 0x05 |
| Fee_Init 失败 | FEE_E_INIT_FAILED | 0x09 |
#### 7.2.2 运行时错误
| 错误类型 | 相关错误代码 | 值[hex] |
|----------|--------------|---------|
| 模块忙时调用 API 服务 | FEE_E_BUSY | 0x06 |
| Fee_Cancel 调用时无待处理作业 | FEE_E_INVALID_CANCEL | 0x08 |
#### 7.2.3 瞬态故障
无瞬态故障。
#### 7.2.4 生产错误
无生产错误。
#### 7.2.5 扩展生产错误
无扩展生产错误。
---
## 8 API 规范
### 8.1 导入的类型
| 模块 | 头文件 | 导入类型 |
|------|--------|----------|
| Fls | Fls.h | Fls_AddressType, Fls_LengthType |
| MemIf | MemIf.h | MemIf_JobResultType, MemIf_ModeType, MemIf_StatusType |
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
### 8.2 类型定义
#### Fee_ConfigType
| 项 | 内容 |
|-----|------|
| Name | Fee_ConfigType |
| Type | Structure |
| Range | 实现特定 |
| Description | FEE 模块的配置数据结构。 |
| Available via | Fee.h |
### 8.3 函数定义
#### 8.3.1 Fee_Init
```c
void Fee_Init(const Fee_ConfigType* ConfigPtr)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x00 |
| Sync/Async | Synchronous |
| Description | 初始化 FEE 模块。 |
[SWS_Fee_00191] ⌈`ConfigPtr` 应为 NULL_PTR 值。⌋
[SWS_Fee_00017] ⌈应将模块状态从 MEMIF_UNINIT 设为 MEMIF_BUSY_INTERNAL。⌋
[SWS_Fee_00120] [SWS_Fee_00168] [SWS_Fee_00169] ⌈如初始化在 Fee_Init 内未完成,可在主函数中继续。完成后将状态设为 MEMIF_IDLE。⌋
#### 8.3.2 Fee_SetMode
```c
void Fee_SetMode(MemIf_ModeType Mode)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x01 |
| Description | 切换底层 Flash 驱动的模式。 |
调用底层 `Fls_SetMode`
#### 8.3.3 Fee_Read
```c
Std_ReturnType Fee_Read(
uint16 BlockNumber,
uint16 BlockOffset,
uint8* DataBufferPtr,
uint16 Length
)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x02 |
| Sync/Async | Asynchronous |
| Description | 从 `BlockNumber` 块的 `BlockOffset` 偏移读取 `Length` 字节到 `DataBufferPtr`。 |
参数检查:
- 模块已初始化
- BlockNumber 有效
- BlockOffset 在块范围内
- Length 大于 0 且不超过块大小
#### 8.3.4 Fee_Write
```c
Std_ReturnType Fee_Write(
uint16 BlockNumber,
const uint8* DataBufferPtr
)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x03 |
| Sync/Async | Asynchronous |
| Description | 将 `DataBufferPtr` 内容写入 `BlockNumber` 块。 |
[SWS_Fee_00087] [SWS_Fee_00151] ⌈写整个块。⌋
#### 8.3.5 Fee_Cancel
```c
void Fee_Cancel(void)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x04 |
| Sync/Async | Synchronous |
| Description | 取消正在进行的异步操作。 |
[SWS_Fee_00077] [SWS_Fee_00078] ⌈同步取消并调用底层 `Fls_Cancel`。⌋
[SWS_Fee_00088] ⌈状态设为 MEMIF_IDLE,作业结果设为 MEMIF_JOB_CANCELED。⌋
#### 8.3.6 Fee_GetStatus
```c
MemIf_StatusType Fee_GetStatus(void)
```
可能值:
- MEMIF_UNINIT
- MEMIF_IDLE
- MEMIF_BUSY
- MEMIF_BUSY_INTERNAL — FEE 模块正忙于内部管理操作(如块漫游、扇区擦除)
#### 8.3.7 Fee_GetJobResult
```c
MemIf_JobResultType Fee_GetJobResult(void)
```
可能值:MEMIF_JOB_OK、MEMIF_JOB_FAILED、MEMIF_JOB_PENDING、MEMIF_JOB_CANCELED、MEMIF_BLOCK_INCONSISTENT、MEMIF_BLOCK_INVALID。
#### 8.3.8 Fee_InvalidateBlock
```c
Std_ReturnType Fee_InvalidateBlock(uint16 BlockNumber)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x07 |
| Sync/Async | Asynchronous |
| Description | 使逻辑块无效。 |
#### 8.3.9 Fee_GetVersionInfo
```c
void Fee_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)
```
#### 8.3.10 Fee_EraseImmediateBlock
```c
Std_ReturnType Fee_EraseImmediateBlock(uint16 BlockNumber)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x09 |
| Sync/Async | Asynchronous |
| Description | 仅对包含立即数据的块进行擦除。 |
### 8.4 回调通知
#### 8.4.1 Fee_JobEndNotification
```c
void Fee_JobEndNotification(void)
```
| 项 | 内容 |
|-----|------|
| Description | 由底层 Flash 驱动调用,通知 FEE 作业成功完成。 |
#### 8.4.2 Fee_JobErrorNotification
```c
void Fee_JobErrorNotification(void)
```
| 项 | 内容 |
|-----|------|
| Description | 由底层 Flash 驱动调用,通知 FEE 作业出错。 |
### 8.5 调度函数
#### Fee_MainFunction
```c
void Fee_MainFunction(void)
```
| 项 | 内容 |
|-----|------|
| Service ID[hex] | 0x0a |
| Description | 执行 FEE 模块作业处理的服务。 |
| Available via | SchM_Fee.h |
处理读、写、擦除作业,执行内部管理操作(如块漫游、扇区重组、空白检查)。
### 8.6 期望接口
#### 8.6.1 强制接口
| API 函数 | 头文件 | 描述 |
|----------|--------|------|
| Fls_Cancel | Fls.h | 取消正在进行的 Flash 作业 |
| Fls_Compare | Fls.h | 比较 Flash 中数据 |
| Fls_Erase | Fls.h | 擦除 Flash 扇区 |
| Fls_GetJobResult | Fls.h | 返回 Flash 作业结果 |
| Fls_GetStatus | Fls.h | 返回 Flash 状态 |
| Fls_Read | Fls.h | 从 Flash 读取 |
| Fls_SetMode | Fls.h | 切换 Flash 驱动模式 |
| Fls_Write | Fls.h | 写入 Flash |
#### 8.6.2 可选接口
| API 函数 | 头文件 | 描述 |
|----------|--------|------|
| Det_ReportError | Det.h | 报告开发错误 |
| Det_ReportRuntimeError | Det.h | 报告运行时错误 |
#### 8.6.3 可配置接口
NvM 提供的回调:
- `NvM_JobEndNotification`
- `NvM_JobErrorNotification`
---
## 9 时序图
### 9.1 Fee_Init
EcuM → Fee → Fls 链路上的初始化序列。可能涉及多次主函数调用以完成内部 Flash 扫描。
### 9.2 Fee_Write
NvM → Fee → Fls 链路:写请求传播,异步 Flash 写入(可能包括擦除前操作),完成后回调通知。
### 9.3 Fee_Cancel
NvM → Fee → Fls:同步取消。
---
## 10 配置规范
### 10.1 容器与配置参数
#### 10.1.1 Fee
| 项 | 内容 |
|-----|------|
| SWS Item | ECUC_Fee_00100 |
| Module Name | Fee |
| Module Description | FEE 模块配置 |
#### 10.1.2 FeeGeneral
| 参数 | 描述 |
|------|------|
| FeeDevErrorDetect | 开发错误检测开关 |
| FeeVersionInfoApi | 版本信息 API 启用 |
| FeeSetModeApi | SetMode API 启用 |
| FeeMainFunctionPeriod | 主函数周期 |
| FeeVirtualPageSize | 虚拟页大小 |
| FeeNvmJobEndNotification | NvM 作业结束通知回调函数名 |
| FeeNvmJobErrorNotification | NvM 作业错误通知回调函数名 |
| FeePollingMode | 轮询模式开关 |
#### 10.1.3 FeeBlockConfiguration
每个逻辑块配置:
| 参数 | 描述 |
|------|------|
| FeeBlockNumber | 块编号(不可为 0x0000 或 0xFFFF) |
| FeeBlockSize | 块大小 |
| FeeDeviceIndex | 设备索引 |
| FeeImmediateData | 是否为立即数据 |
| FeeNumberOfWriteCycles | 期望写周期数 |
### 10.2 已发布信息
#### FeePublishedInformation
已发布参数包括:
- 物理写块大小
- 物理可擦除块大小
---
## 11 不适用需求
[SWS_Fee_00999] ⌈这些需求不适用于本规范。⌋ 涉及多个 SRS_BSW_* 和 SRS_SPAL_* 需求,详见原文 PDF。
---
## 翻译说明
- 本文档完整翻译自 AUTOSAR_SWS_FlashEEPROMEmulation v4.4.0(Document ID 286,56 页)。
- 保留所有需求 ID(SWS_Fee_xxxxx、SRS_MemHwAb_xxxxx、ECUC_Fee_xxxxx)。
- 保留 AUTOSAR 方框符 ⌈⌋。
- 模块缩写(Fee、Fls、NvM、MemIf、EA 等)和 API 函数名保持英文。
- 详细配置参数和示例请参考原文 PDF 第 10 章。