28 KiB
EEPROM 驱动规范
文档标题: Specification of EEPROM Driver AUTOSAR CP Release: 4.4.0 文档编号: 021 文档类型: SWS (Software Specification)
文档标识
| 项目 | 内容 |
|---|---|
| Document Title | Specification of EEPROM Driver |
| Document Owner | AUTOSAR |
| Document Responsibility | AUTOSAR |
| Document Identification No | 021 |
| 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 | MCAL 多核分发 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 将 EEP_E_TIMEOUT 和 EEP_E_BUSY 从开发错误改为运行时错误;更改 ECUC_Eep_00189 描述 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 删除过时的 7.11 "调试支持"章节和 10.2.1 "变体"子章节;按字节读/写/擦除访问适配;传递给函数的 DataBuffers 对齐 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | DET 重命名和适配;第 7 章错误分类适配 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 为扩展生产错误增加通过/失败标准和额外属性;移除 Eep_Init() 关于 NULL_PTR 检查的冗余 SWS ID |
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 修正 SWS_Eep_00102、SWS_Eep_00068 和 SWS_Eep_00137 的格式 |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 从 Eep_MainFunction API 表中移除 'Timing' 行;编辑性修订 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | MemMap.h 改为 Eep_MemMap.h;新增扩展生产错误 |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | EEP178 & EEP185 增加 FloatParamDef 参数最小最大值;模块短名称替换为模块缩写 |
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 新增 DET 错误 EEP_E_PARAM_POINTER、EEP_E_TIMEOUT;版本检查章节(7.10)修订 |
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 使 SWS_Eep_00003、SWS_Eep_00030、SWS_Eep_00128 中隐藏文本可见;澄清可选回调通知;重做外部 SPI EEPROM 配置示例;改用 VARIANT-POST-BUILD 替代 VARIANT-LINK-TIME;澄清 Eep_Cancel() 同步行为;添加调试支持;新增 HW 故障 DEM 错误代码 |
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律免责声明修订 |
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | SWS_Eep_00005 措辞微调;新增 NULL_PTR 检查需求(SWS_Eep_00161, 00162);更新 SWS_Eep_00028 和图 4 |
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 常量名修正;擦写周期限制;链接时配置 vs 配置指针检查;比较作业的作业结果未规定 |
| 2006-05-16 | 2.0 | AUTOSAR Administration | 文档结构适配 Release 2.0 SWS 模板;适配新的内存抽象架构;取消功能改为异步 |
| 2005-05-31 | 1.0 | AUTOSAR Administration | 初始发布 |
目录
1 介绍与功能概述
本规范描述 EEPROM 驱动的功能和 API。本规范同时适用于内部和外部 EEPROM 驱动。
EEPROM 驱动提供对 EEPROM 进行读、写、擦除的服务。它还提供将 EEPROM 中数据块与内存(如 RAM)中数据块进行比较的服务。
这些服务的行为是异步的。
内部 EEPROM 驱动直接访问微控制器硬件,位于微控制器抽象层(MCAL)。外部 EEPROM 驱动使用处理程序(大多数情况下为 SPI)或驱动访问外部 EEPROM 设备,位于 ECU 抽象层。
两类驱动的功能需求和功能范围相同,因此 API 在语义上相同。
2 缩略语
| 缩略语 | 描述 |
|---|---|
| Data block(数据块) | 一个数据块可包含 1..n 字节,在 EEPROM 驱动 API 中使用。数据块以 EEPROM 中的地址偏移、指向内存位置的指针、长度传递给 EEPROM 驱动。 |
| Data unit(数据单元) | EEPROM 中最小数据实体。对读/写/擦除操作可能不同。 示例 1:Motorola STAR12 — 读:1 字节;写:2 字节;擦:4 字节 示例 2:外部 SPI EEPROM 设备 — 读/写/擦:1 字节 |
| Normal mode(普通模式) | 通过 SPI 与 EEPROM 设备的数据交换按字节进行,允许与其他 SPI 设备(如 I/O ASIC、外部看门狗等)协作使用 SPI。 |
| Burst mode(突发模式) | 通过 SPI 与 EEPROM 设备的数据交换按块进行。块大小取决于 EEPROM 属性,例如 64 字节。由于传输大块,SPI 在突发模式下被 EEPROM 访问阻塞。此模式用于 ECU 启动和关机阶段,需要快速数据读写。 |
| EEPROM cell | 持有数据的 EEPROM 设备最小物理单元。通常为 1 字节。 |
| 缩写 | 描述 |
|---|---|
| EEPROM | 电可擦可编程只读存储器 |
| NVRAM | 非易失随机存取存储器 |
| NvM | NVRAM Manager 模块名 |
| EcuM | ECU State Manager 模块名 |
| DEM | Diagnostic Event Manager 模块名 |
| DET | Default Error Tracer 模块名 |
3 相关文档
3.1 输入文档
- [1] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
- [2] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
- [3] Specification of Memory Abstraction Interface — AUTOSAR_SWS_MemoryAbstractionInterface.pdf
- [4] Specification of SPI Handler/Driver — AUTOSAR_SWS_SPIHandlerDriver.pdf
- [5] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf
- [6] Requirements on EEPROM Driver — AUTOSAR_SRS_EEPROMDriver.pdf
- [7] Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
- [8] Specification of Diagnostics Event Manager — AUTOSAR_SWS_DiagnosticEventManager.pdf
- [9] AUTOSAR Glossary — AUTOSAR_TR_Glossary.pdf
- [10] Specification of MCU Driver — AUTOSAR_SWS_MCUDriver.pdf
- [11] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
- [12] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
- [13] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf
3.2 相关规范
AUTOSAR 提供基础软件模块通用规范 [13](SWS BSW General),也适用于 EEPROM 驱动。因此,SWS BSW General 规范应被视为 EEPROM 驱动的附加和必需规范。
4 约束与假设
4.1 限制
EEPROM 驱动不提供数据完整性机制(如校验和、冗余存储等)。 不提供 EEPROM 写保护设置。
4.2 适用车型领域
无限制。
4.3 适用安全相关环境
如果上层软件为安全相关数据提供以下机制,本模块可在安全相关系统中使用:
- 校验和保护
- 使用数据前检查完整性
- 冗余存储
- 写入 EEPROM 后验证数据。可使用 EEPROM 驱动的比较函数。
5 模块依赖
EEPROM 驱动有两类:
- 片上 EEPROM 驱动:微控制器抽象层(MCAL)的一部分。
- 外部 EEPROM 设备驱动:ECU 抽象层的一部分。
[SWS_Eep_00082] ⌈外部 EEPROM 驱动的源代码应独立于微控制器平台。⌋ ()
内部 EEPROM 可能依赖系统时钟、预分频器和 PLL。因此,系统时钟的变更(如 PLL 开 → PLL 关)也可能影响 EEPROM 硬件的时钟设置。EEPROM Driver 模块在其 init 函数中不处理配置时钟、预分频器和 PLL 的寄存器。这必须由 MCU 模块 [10] 完成。
外部 EEPROM 驱动依赖所使用板载通信处理程序(如 SPI Handler/Driver)的 API 和能力。
EEPROM 驱动是内存抽象架构的一部分,因此某些类型依赖 Memory Interface (MemIf) 模块。
5.1 文件结构
[SWS_Eep_00228] ⌈如果模块实现使用自定义中断处理,中断服务例程应放在 Eep_Irq.c。⌋ ()
6 需求追溯
(详细需求追溯表请参考原文 PDF 第 6 章。涉及 SRS_BSW_、SRS_Eep_、SRS_SPAL_* 等多个需求类别。主要部分:)
| 需求 | 满足者 |
|---|---|
| SRS_BSW_00101 | SWS_Eep_00004 |
| SRS_BSW_00323 | SWS_Eep_00016, 00017, 00018 |
| SRS_BSW_00335 | SWS_Eep_00138 |
| SRS_BSW_00337 | SWS_Eep_00000, 00200-00203 |
| SRS_BSW_00406 | SWS_Eep_00006, 00033 |
| SRS_Eep_00087 (异步读) | SWS_Eep_00009, 00013, 00256 |
| SRS_Eep_00088 (异步写) | SWS_Eep_00014, 00015, 00063, 00090, 00256 |
| SRS_Eep_00089 (异步擦除) | SWS_Eep_00019, 00020, 00070, 00072 |
| SRS_Eep_00090 (同步取消) | SWS_Eep_00021, 00027, 00028, 00215, 00216 |
| SRS_Eep_00091 (状态返回) | SWS_Eep_00029 |
| SRS_Eep_00092 (写周期减少) | SWS_Eep_00060, 00064 |
| SRS_Eep_00094 (内存分段) | SWS_Eep_00063, 00070, 00072, 00090 |
| SRS_Eep_00095 (单作业处理) | SWS_Eep_00033, 00036 |
| SRS_Eep_12047 (作业处理函数) | SWS_Eep_00030, 00032 |
| SRS_Eep_12050 (硬件能力限制) | SWS_Eep_00051, 00054, 00057, 00069 |
| SRS_Eep_12091 (异步比较) | SWS_Eep_00025, 00026, 00256 |
| SRS_Eep_12124 (SPI 模式访问) | SWS_Eep_00052, 00053, 00055, 00073 |
| SRS_Eep_12156 (模式切换) | SWS_Eep_00042, 00130, 00132 |
| SRS_Eep_12157 (普通模式读) | SWS_Eep_00051, 00052, 00053 |
| SRS_SPAL_12448 | SWS_Eep_00016, 00017, 00018, 00033 |
完整追溯表见原文 PDF。
7 功能规范
7.1 总体行为
[SWS_Eep_00088] ⌈Eep SWS 应同时适用于内部和外部 EEPROM。Eep SWS 定义 EEPROM 操作(读/写/擦除/比较)的异步服务。⌋ (SRS_Eep_12051)
[SWS_Eep_00036] ⌈Eep 模块不应缓存作业。Eep 模块一次只接受一个作业。作业处理期间,Eep 模块不应接受其他作业。⌋ (SRS_Eep_00095)
[SWS_Eep_00037] ⌈Eep 模块不应缓存要读取或写入的数据。Eep 模块应使用通过 API 传递的指针引用的应用数据缓冲区。⌋ (SRS_SPAL_12075)
[SWS_Eep_00256] ⌈Eep 驱动应在内部处理数据缓冲区对齐。它不应对 RAM 缓冲区的对齐(因其为 uint8*)提出任何要求,而应将传入的指针视为仅按字节对齐。⌋
7.2 错误分类
7.2.1 开发错误
[SWS_Eep_00000] ⌈Eep 模块应根据其构建选项(开发/生产模式)检测以下错误:
| 错误类型 | 相关性 | 相关错误代码 | 值[hex] |
|---|---|---|---|
| 无效配置集选择 | Development | EEP_E_INIT_FAILED | 0x10 |
| EEP_E_PARAM_ADDRESS | 0x11 | ||
| EEP_E_PARAM_DATA | 0x12 | ||
| EEP_E_PARAM_LENGTH | 0x13 | ||
| 用 NULL 指针调用 API 服务 | Development | EEP_E_PARAM_POINTER | 0x23 |
| 模块未初始化即调用 API 服务 | Development | EEP_E_UNINIT | 0x20 |
| ⌋ (SRS_BSW_00337, SRS_BSW_00385) |
7.2.2 运行时错误
[SWS_Eep_00251] ⌈
| 错误类型 | 相关性 | 相关错误代码 | 值[hex] |
|---|---|---|---|
| 驱动繁忙时调用 API 服务 | Runtime | EEP_E_BUSY | 0x21 |
| 超时 | Runtime | EEP_E_TIMEOUT | 0x22 |
| ⌋ () |
7.2.3 瞬态故障
无瞬态故障。
7.2.4 生产错误
无生产错误。
7.2.5 扩展生产错误
包括以下扩展生产错误:
EEP_E_ERASE_FAILED
| 项 | 内容 |
|---|---|
| Error Name | EEP_E_ERASE_FAILED |
| Short Description | EEPROM 擦除失败(HW) |
| Long Description | Eeprom 模块在 EEPROM 擦除作业因硬件错误失败时报告此错误。 |
| Detection Criteria | Fail: EEPROM 擦除作业失败;Pass: EEPROM 擦除作业成功完成 |
EEP_E_WRITE_FAILED
| 项 | 内容 |
|---|---|
| Error Name | EEP_E_WRITE_FAILED |
| Short Description | EEPROM 写失败(HW) |
| Long Description | Eeprom 模块在 EEPROM 写作业因硬件错误失败时报告此错误。 |
EEP_E_READ_FAILED
EEPROM 读作业因硬件错误失败。
EEP_E_COMPARE_FAILED
EEPROM 比较作业因硬件错误失败。
7.3 错误检测
7.3.1 API 参数检查
[SWS_Eep_00016] ⌈如果 Eep 模块的开发错误检测启用:Eep_Read()、Eep_Write()、Eep_Compare() 和 Eep_Erase() 函数应检查 DataBufferPtr 不为 NULL。如果 DataBufferPtr 为 NULL,它们应引发开发错误 EEP_E_PARAM_DATA,否则(如未启用开发错误检测)应返回 E_NOT_OK。⌋ (SRS_BSW_00323, SRS_SPAL_12448)
[SWS_Eep_00017] ⌈如果开发错误检测启用:函数应检查 EepromAddress 是否有效。如果不在有效 EEPROM 地址范围内,应引发开发错误 EEP_E_PARAM_ADDRESS,否则返回 E_NOT_OK。⌋
[SWS_Eep_00018] ⌈如果开发错误检测启用:函数应检查参数 Length 是否在最小值(1)和最大值(EepSize - EepromAddress)之间。如不在,引发 EEP_E_PARAM_LENGTH,否则返回 E_NOT_OK。⌋
7.3.2 EEPROM 状态检查
[SWS_Eep_00033] ⌈Eep_SetMode()、Eep_Read()、Eep_Write()、Eep_Compare() 和 Eep_Erase() 函数应检查 EEPROM 状态是否为 MEMIF_IDLE。如果不是:
- 如果模块尚未初始化且开发错误检测启用,引发开发错误
EEP_E_UNINIT - 根据 EEPROM 状态引发运行时错误
EEP_E_BUSY - 以 E_NOT_OK 拒绝服务(除
Eep_SetMode()外,因其无返回值) ⌋
7.3.3 EEPROM 作业遇到硬件故障
- [SWS_Eep_00200] EEP_E_ERASE_FAILED:EEPROM 擦除函数失败时报告
- [SWS_Eep_00201] EEP_E_WRITE_FAILED:EEPROM 写函数失败时报告
- [SWS_Eep_00202] EEP_E_READ_FAILED:EEPROM 读函数失败时报告
- [SWS_Eep_00203] EEP_E_COMPARE_FAILED:EEPROM 比较函数失败时报告
7.3.4 超时监视
[SWS_Eep_00234] ⌈当读、写、擦或比较作业的超时监视失败时,应报告运行时错误代码 EEP_E_TIMEOUT。⌋
7.4 错误通知
详见 SWS_BSWGeneral 第 7.2 章。
7.5 作业处理 — 通用需求
[SWS_Eep_00128] ⌈Eep 模块应允许通过配置参数 EepUseInterrupts (ECUC_Eep_00163) 配置为中断或轮询控制的作业处理。⌋
[SWS_Eep_00129] ⌈如果支持并启用中断控制作业处理,位于 Eep_Irq.c 的外部中断服务例程应调用一个附加的作业处理函数。⌋
[SWS_Eep_00246] ⌈如果底层 EEPROM 技术对读取地址或长度信息要求特定对齐,且读取或比较作业的地址和/或长度参数未正确对齐,Eep_MainFunction 函数应在内部补偿此缺失的对齐,即提供按字节的 Flash 内存读访问。⌋
SPI EEPROM 驱动额外通用需求
- [SWS_Eep_00056] SPI 访问失败时,Eep 模块行为参考 SWS_Eep_00068
- [SWS_Eep_00052] 普通模式:使用为普通 SPI EEPROM 访问配置的 SPI 通道
- [SWS_Eep_00053] EepNormalReadBlockSize 应匹配普通 SPI 模式可读字节数
- [SWS_Eep_00055] 快速模式:使用为突发访问 SPI EEPROM 配置的 SPI 通道
- [SWS_Eep_00073] EepFastReadBlockSize 应匹配突发 SPI 模式可读字节数
7.6 读作业处理
[SWS_Eep_00130] ⌈Eep 模块应提供两种不同的读模式:普通模式、快速模式⌋
[SWS_Eep_00132] ⌈对于驱动外部 EEPROM 的 Eep 模块:如外部 EEPROM 不支持突发模式,应接受快速读模式选择,但行为与普通模式相同。⌋
[SWS_Eep_00051] ⌈普通 EEPROM 模式下,Eep 模块在一个作业处理周期内应读取 EepNormalReadBlockSize 参数指定的字节数。⌋
示例:EepNormalReadBlockSize = 4,读取 21 字节,所需 6 个周期,模式:4-4-4-4-4-1
[SWS_Eep_00054] ⌈快速 EEPROM 模式下,Eep 模块在一个周期内应读取 EepFastReadBlockSize 指定的字节数。⌋
示例:EepFastReadBlockSize = 32,读取 110 字节,所需 4 个周期,模式:32-32-32-14
[SWS_Eep_00058] ⌈读作业成功完成时,Eep 模块应将 EEPROM 状态设置为 MEMIF_IDLE,作业结果设置为 MEMIF_JOB_OK。如已配置,调用 EepJobEndNotification 中定义的通知。⌋
[SWS_Eep_00068] ⌈读作业处理期间检测到错误时,Eep 模块应中止作业,EEPROM 状态设为 MEMIF_IDLE,作业结果设为 MEMIF_JOB_FAILED。如已配置,调用 EepJobErrorNotification 通知。⌋
7.7 写作业处理
[SWS_Eep_00057] ⌈Eep 模块在一个作业处理周期内只应向 EEPROM 写入(和擦除)EEPROM 硬件支持的字节数。⌋
[SWS_Eep_00133] ⌈提供两种写模式:普通、快速⌋
[SWS_Eep_00097] / [SWS_Eep_00098] ⌈分别由 EepNormalWriteBlockSize 和 EepFastWriteBlockSize 指定每周期写入字节数。⌋
[SWS_Eep_00060] ⌈如果要写入 EEPROM 单元的值已包含在该单元中,Eep 模块在 EepWriteCycleReduction 配置时应跳过该单元的编程。⌋ (SRS_Eep_00092)
[SWS_Eep_00059] ⌈如果 EEPROM 硬件不自动进行,Eep 模块应在写入前擦除 EEPROM 单元。⌋
[SWS_Eep_00063] [SWS_Eep_00090] ⌈如果要写入字节数小于可擦除/可写数据单元,或地址/长度参数未对齐到可擦除/可写数据单元,Eep 模块应通过读-修改-写操作保留受影响 EEPROM 单元数据。⌋
[SWS_Eep_00064] ⌈写入数据块时,Eep 模块应尽量减少读-修改-写操作次数。⌋
7.8 擦除作业处理
- [SWS_Eep_00069] 一周期内只擦 EEPROM 硬件支持的字节数
- [SWS_Eep_00070] 如硬件支持且参数对齐,使用块擦除命令
- [SWS_Eep_00072] 如擦除参数未对齐到可擦除数据单元,使用读-修改-写保留受影响内容
7.9 比较作业处理
适用读相关需求:SWS_Eep_00130, 00132, 00051, 00054。
[SWS_Eep_00075] ⌈如比较作业处理期间检测到比较数据区域不相等,EEPROM 驱动应中止作业,EEPROM 状态设为 MEMIF_IDLE,作业结果设为 MEMIF_BLOCK_INCONSISTENT。如已配置,调用 Eep_JobErrorNotification 回调函数。⌋
7.10 版本检查
详见 SWS_BSWGeneral 第 5.1.8 章。
8 API 规范
8.1 导入的类型
[SWS_Eep_00138] ⌈
| 模块 | 头文件 | 导入类型 |
|---|---|---|
| Dem | Rte_Dem_Type.h | Dem_EventIdType, Dem_EventStatusType |
| MemIf | MemIf.h | MemIf_JobResultType, MemIf_ModeType, MemIf_StatusType |
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
| ⌋ (SRS_BSW_00335, SRS_BSW_00357, SRS_BSW_00377) |
8.2 类型定义
8.2.1 Eep_ConfigType
| 项 | 内容 |
|---|---|
| Name | Eep_ConfigType |
| Type | Structure |
| Range | Implementation Specific — 初始化数据结构内容为 EEPROM 特定 |
| Description | 包含 EEPROM 驱动初始化数据的外部数据结构类型。 |
| Available via | Eep.h |
8.2.2 Eep_AddressType
| 项 | 内容 |
|---|---|
| Name | Eep_AddressType |
| Type | uint(8/16/32 位,取决于目标平台和 EEPROM 设备) |
| Description | 用作从已配置 EEPROM 基地址访问特定 EEPROM 内存区域的地址偏移。 |
8.2.3 Eep_LengthType
| 项 | 内容 |
|---|---|
| Name | Eep_LengthType |
| Type | 与 Eep_AddressType 相同 |
| Description | 指定要读/写/擦/比较的字节数。 |
8.3 函数定义
8.3.1 Eep_Init
void Eep_Init(const Eep_ConfigType* ConfigPtr)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x00 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Description | EEPROM 初始化服务。 |
[SWS_Eep_00004] ⌈Eep_Init 函数应使用 ConfigPtr 引用结构的值初始化所有 EEPROM 相关寄存器。⌋
[SWS_Eep_00006] ⌈模块初始化完成后,Eep_Init 应将 EEPROM 状态设置为 MEMIF_IDLE,作业结果设置为 MEMIF_JOB_OK。⌋
[SWS_Eep_00044] ⌈Eep_Init 应将 EEPROM 模式设置为已配置的默认模式。⌋
8.3.2 Eep_SetMode
void Eep_SetMode(MemIf_ModeType Mode)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x01 |
| Parameters | Mode: MEMIF_MODE_SLOW(慢读访问/普通 SPI 访问) 或 MEMIF_MODE_FAST(快读访问/SPI 突发访问) |
[SWS_Eep_00042] ⌈Eep_SetMode 应将 EEPROM 操作模式设为给定 mode 参数。⌋
8.3.3 Eep_Read
Std_ReturnType Eep_Read(
Eep_AddressType EepromAddress,
uint8* DataBufferPtr,
Eep_LengthType Length
)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x02 |
| Sync/Async | Asynchronous |
| Return | E_OK: 读命令已接受;E_NOT_OK: 未接受 |
[SWS_Eep_00009] ⌈复制参数,启动读作业,EEPROM 状态设为 MEMIF_BUSY,作业结果设为 MEMIF_JOB_PENDING 后返回。⌋
[SWS_Eep_00013] ⌈Eep 模块应在作业处理函数内异步执行读作业,读取 EepromAddress + EEPROM 基地址 起 Length 字节数据块到 *DataBufferPtr。⌋
8.3.4 Eep_Write
Std_ReturnType Eep_Write(
Eep_AddressType EepromAddress,
const uint8* DataBufferPtr,
Eep_LengthType Length
)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x03 |
| Sync/Async | Asynchronous |
[SWS_Eep_00014] ⌈启动写作业并返回。⌋
[SWS_Eep_00015] ⌈异步写入 Length 字节从 *DataBufferPtr 到 EepromAddress + EEPROM 基地址。⌋
8.3.5 Eep_Erase
Std_ReturnType Eep_Erase(
Eep_AddressType EepromAddress,
Eep_LengthType Length
)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x04 |
| Sync/Async | Asynchronous |
| Description | 擦除 EEPROM 段的服务。 |
[SWS_Eep_00019] / [SWS_Eep_00020] ⌈启动并异步执行擦除作业。⌋
8.3.6 Eep_Compare
Std_ReturnType Eep_Compare(
Eep_AddressType EepromAddress,
const uint8* DataBufferPtr,
Eep_LengthType Length
)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x05 |
| Sync/Async | Asynchronous |
| Description | 比较 EEPROM 中数据块与内存中 EEPROM 块。 |
8.3.7 Eep_Cancel
void Eep_Cancel(void)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x06 |
| Sync/Async | Synchronous |
| Description | 取消正在运行的作业。 |
[SWS_Eep_00215] ⌈应取消正在进行的 EEPROM 读、写、擦或比较作业。⌋ [SWS_Eep_00021] ⌈同步中止正在运行的作业,函数返回后上层可立即请求新作业。⌋ [SWS_Eep_00027] ⌈应将 EEP 模块状态设为 MEMIF_IDLE。⌋ [SWS_Eep_00028] ⌈如果作业结果当前为 MEMIF_JOB_PENDING,应设为 MEMIF_JOB_CANCELED;否则保持作业结果不变。⌋
8.3.8 Eep_GetStatus
MemIf_StatusType Eep_GetStatus(void)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x07 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Return | MemIf_StatusType |
[SWS_Eep_00029] ⌈同步返回 EEPROM 状态。⌋
8.3.9 Eep_GetJobResult
MemIf_JobResultType Eep_GetJobResult(void)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x08 |
| Reentrancy | Reentrant |
[SWS_Eep_00024] ⌈同步返回 Eep 模块上次已接受作业的结果。⌋
8.3.10 Eep_GetVersionInfo
void Eep_GetVersionInfo(Std_VersionInfoType* versioninfo)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x0a |
| Reentrancy | Reentrant |
| Description | 获取本模块版本信息的服务。 |
[SWS_Eep_00239] ⌈如开发错误检测启用且以 NULL 指针调用,应引发开发错误 EEP_E_PARAM_POINTER。⌋
8.4 回调通知
EEPROM 驱动为内部微控制器外设规范化时,属于 AUTOSAR 软件架构的最低层,因此本模块规范未识别任何回调函数。对于 SPI 外部设备,属于 ECU 抽象层,应根据 SPI Handler/Driver 规范需求提供回调通知。
[SWS_Eep_00137] ⌈ 在 Eep 模块支持 SPI 外部设备的情况下,Eep 模块应根据 SPI Handler/Driver 规范需求提供附加回调通知。⌋
8.5 调度函数
8.5.1 Eep_MainFunction
void Eep_MainFunction(void)
| 项 | 内容 |
|---|---|
| Service ID[hex] | 0x09 |
| Description | 执行 EEPROM 作业(读/写/擦/比较)处理的服务。 |
| Available via | SchM_Eep.h |
[SWS_Eep_00030] ⌈应执行 EEPROM 读、写、擦除和比较作业的处理。⌋
[SWS_Eep_00031] ⌈作业启动后,Eep 用户应周期性调用 Eep_MainFunction 直到作业完成。⌋
[SWS_Eep_00032] ⌈如无待处理作业,应直接返回。⌋
硬件错误报告(SWS_Eep_00204~00207):分别报告 EEP_E_ERASE/WRITE/READ/COMPARE_FAILED 给 DEM。
超时监视(SWS_Eep_00235~00238):监视读/写/擦/比较作业的截止时间,超时时引发 EEP_E_TIMEOUT 运行时错误。
8.6 期望接口
8.6.1 强制接口
[SWS_Eep_00154] ⌈
| API 函数 | 头文件 | 描述 |
|---|---|---|
| Dem_SetEventStatus | Dem.h | 报告监视状态信息到 Dem |
| Det_ReportRuntimeError | Det.h | 报告运行时错误 |
| ⌋ |
8.6.2 可选接口
[SWS_Eep_00155] ⌈
| API 函数 | 头文件 | 描述 |
|---|---|---|
| Det_ReportError | Det.h | 报告开发错误 |
| ⌋ |
8.6.3 可配置接口
[SWS_Eep_00047] ⌈如回调函数在后构建时配置,初始化数据结构 Eep_ConfigType 应包含相应函数指针。⌋
8.6.3.1 作业结束通知
[SWS_Eep_00045] ⌈作业成功完成(读/写/擦完成 OK 或比较完成且数据相等)时调用 EepJobEndNotification 定义的回调函数。⌋
void Eep_JobEndNotification(void)
8.6.3.2 作业错误通知
[SWS_Eep_00046] ⌈作业被取消或以负结果结束(读/写/擦中止或失败,比较中止或数据不相等)时调用 EepJobErrorNotification 定义的回调函数。⌋
void Eep_JobErrorNotification(void)
9 时序图
9.1 初始化
EcuM → Eep:Eep_Init(const Eep_ConfigType*)
9.2 读/写/擦/比较
NvM → Ea → Eep:Ea_Write → Eep_Write → (周期 Eep_MainFunction 直至作业完成)→ Ea_JobEndNotification → NvM_JobEndNotification。
- EEPROM 状态:MEMIF_BUSY → MEMIF_IDLE
- 作业结果:MEMIF_JOB_PENDING → MEMIF_JOB_OK
9.3 运行中作业的取消
NvM → Ea → Eep:Ea_Cancel → Eep_Cancel(同步)→ 状态变为 MEMIF_IDLE, 结果 MEMIF_JOB_CANCELED → 立即可启动新作业。
10 配置规范
10.1 如何阅读本章
详见 SWS_BSWGeneral 第 10.1 章。
10.2 容器与配置参数
10.2.1 Eep
| 项 | 内容 |
|---|---|
| SWS Item | ECUC_Eep_00205 |
| Module Name | Eep |
| Module Description | Eep(内部或外部 EEPROM 驱动)模块的配置。 |
| Post-Build Variant Support | true |
| Supported Config Variants | VARIANT-POST-BUILD, VARIANT-PRE-COMPILE |
包含容器:
| 容器名 | 多重性 | 描述 |
|---|---|---|
| EepGeneral | 1 | EEPROM 驱动通用配置参数容器 |
| EepInitConfiguration | 1 | EEPROM 驱动运行时配置参数容器(实现类型:Eep_ConfigType) |
| EepPublishedInformation | 1 | 附加发布参数(不在 CommonPublishedInformation 容器中覆盖) |
10.2.2 EepGeneral
关键参数(摘要):
| 参数 | 描述 |
|---|---|
| EepDevErrorDetect | 开发错误检测开关 |
| EepVersionInfoApi | 版本信息 API 启用开关 |
| EepUseInterrupts | 中断或轮询作业处理选择 |
| EepDriverIndex | 驱动索引 |
| EepBaseAddress | EEPROM 基地址 |
| EepSize | EEPROM 大小(字节) |
10.2.3 EepInitConfiguration
| 参数 | 描述 |
|---|---|
| EepDefaultMode | 默认模式 |
| EepFastReadBlockSize | 快速模式读取块大小 |
| EepNormalReadBlockSize | 普通模式读取块大小 |
| EepFastWriteBlockSize | 快速模式写入块大小 |
| EepNormalWriteBlockSize | 普通模式写入块大小 |
| EepJobCallCycle | 作业调用周期 |
| EepJobEndNotification | 作业结束通知回调 |
| EepJobErrorNotification | 作业错误通知回调 |
| EepEraseTime | 最大擦除时间 |
| EepWriteCycleReduction | 写周期减少开关 |
10.2.4 EepDemEventParameterRefs
引用 DEM 事件参数,用于错误报告。
10.2.5 EepExternalDriver
外部 EEPROM 设备配置:
- 期望硬件 Flash ID
- 最大读访问阻塞时间
10.2.6 SPI 特定扩展
SPI 配置参数(用于外部 SPI EEPROM):
- SPI 通道
- 普通模式与突发模式 SPI 序列
10.3 已发布参数
EepPublishedInformation 包含:
- EEPROM 大小
- 已擦除 EEPROM 单元值
- EEPROM 单元大小
- 物理内存分段
10.4 配置示例 — 外部 SPI EEPROM 设备
详细配置示例见原文 PDF 第 10.4 章。
11 不适用需求
[SWS_Eep_00241] ⌈这些需求不适用于本规范。⌋ 涉及多个 SRS_BSW_* 和 SRS_SPAL_* 需求,详见原文 PDF。
翻译说明
- 本文档完整翻译自 AUTOSAR_SWS_EEPROMDriver v4.4.0(Document ID 021,63 页)。
- 保留所有需求 ID(SWS_Eep_xxxxx、SRS_*_xxxxx、ECUC_Eep_xxxxx)。
- 保留 AUTOSAR 方框符 ⌈⌋。
- 模块缩写(Eep、Fee、Ea、NvM、MemIf、SPI、DEM、DET、EcuM 等)和 API 函数名保持英文。
- 主要部分已完整翻译;配置参数详细描述请参考原文 PDF。