Files
autosar_standard_spec_v4.4/Memory/AUTOSAR_SWS_FlashEEPROMEmulation.md
T

16 KiB

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. 介绍与功能概述
  2. 缩略语
  3. 相关文档
  4. 约束与假设
  5. 模块依赖
  6. 需求追溯
  7. 功能规范
  8. API 规范
  9. 时序图
  10. 配置规范
  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

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

void Fee_SetMode(MemIf_ModeType Mode)
内容
Service ID[hex] 0x01
Description 切换底层 Flash 驱动的模式。

调用底层 Fls_SetMode

8.3.3 Fee_Read

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

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

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

MemIf_StatusType Fee_GetStatus(void)

可能值:

  • MEMIF_UNINIT
  • MEMIF_IDLE
  • MEMIF_BUSY
  • MEMIF_BUSY_INTERNAL — FEE 模块正忙于内部管理操作(如块漫游、扇区擦除)

8.3.7 Fee_GetJobResult

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

Std_ReturnType Fee_InvalidateBlock(uint16 BlockNumber)
内容
Service ID[hex] 0x07
Sync/Async Asynchronous
Description 使逻辑块无效。

8.3.9 Fee_GetVersionInfo

void Fee_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)

8.3.10 Fee_EraseImmediateBlock

Std_ReturnType Fee_EraseImmediateBlock(uint16 BlockNumber)
内容
Service ID[hex] 0x09
Sync/Async Asynchronous
Description 仅对包含立即数据的块进行擦除。

8.4 回调通知

8.4.1 Fee_JobEndNotification

void Fee_JobEndNotification(void)
内容
Description 由底层 Flash 驱动调用,通知 FEE 作业成功完成。

8.4.2 Fee_JobErrorNotification

void Fee_JobErrorNotification(void)
内容
Description 由底层 Flash 驱动调用,通知 FEE 作业出错。

8.5 调度函数

Fee_MainFunction

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 章。