P2 batch translation: 49 PDFs (Memory + Safety + Crypto + ModeManagement + IO)
This commit is contained in:
@@ -0,0 +1,605 @@
|
||||
# Flash 驱动规范
|
||||
|
||||
> **文档标题**: Specification of Flash Driver
|
||||
> **AUTOSAR CP Release**: 4.4.0
|
||||
> **文档编号**: 025
|
||||
> **文档类型**: SWS (Software Specification)
|
||||
|
||||
---
|
||||
|
||||
## 文档标识
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| Document Title | Specification of Flash Driver |
|
||||
| Document Owner | AUTOSAR |
|
||||
| Document Responsibility | AUTOSAR |
|
||||
| Document Identification No | 025 |
|
||||
| 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 | 添加对 MCALMulticoreDistribution 的支持 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 移除 HIS 引用;将"default error"重命名为"development error";引入运行时错误;实例化模块的实例 ID 配置 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 更新追溯信息;澄清内部缓冲区对齐;细化错误处理,新增配置参数 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 调试支持标记为过时;错误分类重做;移除 DEM 引用;澄清 FlsUseInterrupts 配置参数描述 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 需求与特性和 BSW 需求关联 |
|
||||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 移除 Fls_Init 期间 NULL 指针检查需求;小幅格式更改 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 移除模块主函数的时序需求;Fls_GetStatus 在模块未初始化时返回 MEMIF_UNINIT |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 按新的 SWS_BSWGeneral 重做;生产错误改为扩展生产错误 |
|
||||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 更正 HW 特定错误的引用;适配配置参数范围;模块短名变更 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 新增 FlsDefaultMode 配置参数;新增带 SPI 引用的容器;新增 NULL 指针检查 |
|
||||
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 新增 AUTOSAR 标准错误引用;通知例程多重性更正 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律免责声明修订 |
|
||||
| 2008-02-01 | 3.0.2 | AUTOSAR Administration | 表格格式更正 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | Fls_Compare 新增 NULL 指针检查 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 文件包含结构更新;类型使用更正 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 文档结构适配 Release 2.0 SWS 模板;新功能:Read、Compare 和 SetMode 函数;可伸缩性:功能可配置(开/关);适配新 MemHwA 架构 |
|
||||
| 2005-05-31 | 1.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 驱动(FLS)的功能和 API。本规范同时适用于内部和外部 Flash 驱动。
|
||||
|
||||
Flash 驱动提供对 Flash 存储器进行读、写、擦除和比较的服务。
|
||||
|
||||
服务行为是异步的(写、擦、读、比较)。
|
||||
|
||||
内部 Flash 驱动直接访问微控制器硬件,位于微控制器抽象层(MCAL)。外部 Flash 驱动使用处理程序(如 SPI Handler/Driver)或驱动访问外部 Flash 设备,位于 ECU 抽象层。
|
||||
|
||||
两种类型驱动的功能需求和功能范围相同。
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|--------|------|
|
||||
| Flash sector | 一次可擦除的最小 Flash 内存量 |
|
||||
| Flash page | 一次可写入的最小 Flash 内存量 |
|
||||
| FLS | Flash 驱动模块缩写 |
|
||||
| FEE | Flash EEPROM Emulation |
|
||||
| Fls | 模块名 |
|
||||
| MemIf | Memory Abstraction Interface |
|
||||
| NvM | NVRAM Manager |
|
||||
| EcuM | ECU State Manager |
|
||||
| DEM | Diagnostic Event Manager |
|
||||
| DET | Default Error Tracer |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档
|
||||
|
||||
### 3.1 AUTOSAR 交付物
|
||||
|
||||
- Layered Software Architecture
|
||||
- General Requirements on Basic Software Modules
|
||||
- Specification of Memory Abstraction Interface
|
||||
- Specification of SPI Handler/Driver
|
||||
- Requirements on Flash Driver — AUTOSAR_SRS_FlashDriver.pdf
|
||||
- Specification of Default Error Tracer
|
||||
- Specification of MCU Driver
|
||||
- List of Basic Software Modules
|
||||
- General Specification of Basic Software Modules
|
||||
|
||||
### 3.2 相关规范
|
||||
|
||||
AUTOSAR 提供基础软件模块通用规范(SWS BSW General),也适用于 Flash 驱动。
|
||||
|
||||
---
|
||||
|
||||
## 4 约束与假设
|
||||
|
||||
### 4.1 限制
|
||||
|
||||
Flash 驱动不提供数据完整性机制(如校验和、冗余存储等)。
|
||||
|
||||
### 4.2 适用车型领域
|
||||
|
||||
无限制。
|
||||
|
||||
---
|
||||
|
||||
## 5 模块依赖
|
||||
|
||||
### 5.1 系统时钟
|
||||
|
||||
内部 Flash 可能依赖系统时钟、预分频器和 PLL。
|
||||
|
||||
### 5.2 通信或 I/O 驱动
|
||||
|
||||
外部 Flash 驱动依赖所使用板载通信处理程序(如 SPI Handler/Driver)的 API 和能力。
|
||||
|
||||
Flash 驱动是内存抽象架构的一部分,因此某些类型依赖 Memory Interface (MemIf) 模块。
|
||||
|
||||
---
|
||||
|
||||
## 6 需求追溯
|
||||
|
||||
(主要追溯,完整表见原文 PDF)
|
||||
|
||||
| 需求 | 满足者 |
|
||||
|------|--------|
|
||||
| SRS_BSW_00101 | SWS_Fls_00014 |
|
||||
| SRS_BSW_00323 | SWS_Fls_00015, 00020, 00021, 00026, 00027 等多个参数检查需求 |
|
||||
| SRS_BSW_00337 | SWS_Fls_00310, 00312-00319 |
|
||||
| SRS_BSW_00406 | SWS_Fls_00065, 00066, 00268 等 |
|
||||
| SRS_Fls_12107 (Flash 类型检查) | SWS_Fls_00144 |
|
||||
| SRS_Fls_12132 (静态配置) | SWS_Fls_00048, 00208, 00209, 00216, 00217 |
|
||||
| SRS_Fls_12134 (异步读) | SWS_Fls_00001, 00035, 00097, 00098 等 |
|
||||
| SRS_Fls_12135 (异步写) | SWS_Fls_00001, 00026, 00027, 00035 等 |
|
||||
| SRS_Fls_12136 (异步擦除) | SWS_Fls_00001, 00020, 00021, 00035 等 |
|
||||
| SRS_Fls_12137 (同步取消) | SWS_Fls_00033, 00035, 00183, 00229 等 |
|
||||
| SRS_Fls_12138 (同步状态) | SWS_Fls_00034, 00184, 00253 |
|
||||
| SRS_Fls_12141 (数据验证) | SWS_Fls_00056, 00200 |
|
||||
| SRS_Fls_12143 (单作业) | SWS_Fls_00002, 00003, 00023, 00030, 00033, 00036 等 |
|
||||
| SRS_Fls_12144 (作业处理函数) | SWS_Fls_00037, 00038, 00039 等 |
|
||||
| SRS_Fls_12158 (写前擦除检查) | SWS_Fls_00055 |
|
||||
| SRS_Fls_12159 (地址参数检查) | SWS_Fls_00020, 00021, 00026, 00027 等 |
|
||||
| SRS_Fls_12160 (擦后验证) | SWS_Fls_00022 |
|
||||
| SRS_Fls_12193 (代码加载到 RAM) | SWS_Fls_00137, 00140, 00141, 00214 |
|
||||
| SRS_Fls_12194 (从 RAM 执行) | SWS_Fls_00211, 00212, 00213, 00215 |
|
||||
| SRS_Fls_13300 (从 RAM 卸载) | SWS_Fls_00143 |
|
||||
| SRS_Fls_13301 (异步比较) | SWS_Fls_00001, 00150-00153, 00186 等 |
|
||||
| SRS_Fls_13302 (同步选择/模式) | SWS_Fls_00155, 00156, 00187, 00258 |
|
||||
|
||||
完整追溯表见原文 PDF。
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范
|
||||
|
||||
### 7.1 通用设计规则
|
||||
|
||||
[SWS_Fls_00001] ⌈FLS 模块应为 Flash 存储器操作(读/擦/写)提供异步服务。⌋ (SRS_Fls_12134, SRS_Fls_12135, SRS_Fls_12136, SRS_Fls_13301)
|
||||
|
||||
[SWS_Fls_00002] ⌈FLS 模块不应缓存数据。FLS 模块应使用通过 API 传递指针引用的应用数据缓冲区。⌋
|
||||
|
||||
[SWS_Fls_00003] ⌈FLS 模块不应保证给定应用缓冲区的数据一致性。⌋
|
||||
|
||||
[SWS_Fls_00205] ⌈FLS 模块应静态(最晚在编译时)检查静态配置参数的正确性。⌋
|
||||
|
||||
[SWS_Fls_00208] ⌈FLS 模块应将所有可用 Flash 内存区域组合为一个线性地址空间(由 `FlsBaseAddress` 和 `FlsTotalSize` 参数表示)。⌋
|
||||
|
||||
[SWS_Fls_00209] ⌈FLS 模块应根据 Flash 内存区域的物理结构将读、写、擦除和比较函数的地址和长度参数作为"虚拟"地址映射到物理地址。⌋
|
||||
|
||||
[SWS_Fls_00389] ⌈FLS 模块应在内部处理数据缓冲区对齐,将传入指针视为按字节对齐。⌋
|
||||
|
||||
[SWS_Fls_00390] ⌈如果在 ECU 中使用 Flash 驱动的多个实例,每个实例必须有唯一的实例 ID。该实例 ID 应配置为参数 `FlsDriverIndex`。如果 ECU 中只使用一个实例,该实例的 `FlsDriverIndex` 应配置为 0。⌋
|
||||
|
||||
### 7.2 错误处理
|
||||
|
||||
#### 7.2.1 开发错误
|
||||
|
||||
[SWS_Fls_00004] ⌈
|
||||
|
||||
| 错误类型 | 相关错误代码 | 值[hex] |
|
||||
|----------|--------------|---------|
|
||||
| 用错误参数调用 API 服务 | FLS_E_PARAM_CONFIG | 0x01 |
|
||||
| | FLS_E_PARAM_ADDRESS | 0x02 |
|
||||
| | FLS_E_PARAM_LENGTH | 0x03 |
|
||||
| | FLS_E_PARAM_DATA | 0x04 |
|
||||
| 模块未初始化调用 API 服务 | FLS_E_UNINIT | 0x05 |
|
||||
| 驱动繁忙时调用 API 服务 | FLS_E_BUSY | 0x06 |
|
||||
| 用 NULL 指针调用 API 服务 | FLS_E_PARAM_POINTER | 0x0a |
|
||||
⌋
|
||||
|
||||
#### 7.2.2 运行时错误
|
||||
|
||||
| 错误类型 | 相关错误代码 | 值[hex] |
|
||||
|----------|--------------|---------|
|
||||
| 擦除验证(空白检查)失败 | FLS_E_VERIFY_ERASE_FAILED | 0x07 |
|
||||
| 写验证(比较)失败 | FLS_E_VERIFY_WRITE_FAILED | 0x08 |
|
||||
| 超时 | FLS_E_TIMEOUT | 0x09 |
|
||||
|
||||
#### 7.2.3 瞬态故障
|
||||
|
||||
| 错误类型 | 相关错误代码 | 值[hex] |
|
||||
|----------|--------------|---------|
|
||||
| Flash 擦除失败(HW) | FLS_E_ERASE_FAILED | 0x01 |
|
||||
| Flash 写失败(HW) | FLS_E_WRITE_FAILED | 0x02 |
|
||||
| Flash 读失败(HW) | FLS_E_READ_FAILED | 0x03 |
|
||||
| Flash 比较失败(HW) | FLS_E_COMPARE_FAILED | 0x04 |
|
||||
| 期望硬件 ID 不匹配 | FLS_E_UNEXPECTED_FLASH_ID | 0x05 |
|
||||
|
||||
#### 7.2.4 扩展生产错误与生产错误
|
||||
|
||||
本模块未规定任何生产错误。
|
||||
|
||||
### 7.3 外部 Flash 驱动
|
||||
|
||||
[SWS_Fls_00144] ⌈外部 Flash 驱动初始化期间,FLS 模块应将外部 Flash 设备的硬件 ID 与相应已发布参数对比。如硬件 ID 不匹配,FLS 模块应将错误代码 `FLS_E_UNEXPECTED_FLASH_ID` 报告给 Default Error Tracer (DET),将 FLS 模块状态设为 `FLS_E_UNINIT`,且不应初始化自身。⌋
|
||||
|
||||
### 7.4 Flash 访问代码的加载、执行和移除
|
||||
|
||||
技术背景:Flash 技术或 Flash 内存分段可能要求访问 Flash 硬件的例程(内部擦除和写入例程)从 RAM 执行,因为在编程 Flash 时无法读取 Flash(用于代码执行所需的指令获取)。
|
||||
|
||||
[SWS_Fls_00137] ⌈FLS 模块的实现者应将 Flash 访问例程的代码放在单独的 C 模块 Fls_ac.c 中。⌋
|
||||
|
||||
[SWS_Fls_00215] ⌈FLS 模块的 Flash 访问例程应仅在必要时禁用中断并等待擦除/写命令完成。⌋
|
||||
|
||||
[SWS_Fls_00140] [SWS_Fls_00141] ⌈如果 FLS 模块配置为在作业启动时将 Flash 访问代码加载到 RAM,Flash 擦除/写入例程应将相应 Flash 访问代码加载到由配置集中函数指针指向的 RAM 位置。⌋
|
||||
|
||||
[SWS_Fls_00143] ⌈擦除或写入作业完成或取消后,如 Flash 驱动已将 Flash 访问代码加载到 RAM,FLS 模块的主处理例程应从 RAM 卸载(即覆盖)Flash 访问代码。⌋
|
||||
|
||||
[SWS_Fls_00214] ⌈FLS 模块仅在 Flash ROM 中无法执行访问代码时才应将访问代码加载到 RAM。⌋
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范
|
||||
|
||||
### 8.1 导入的类型
|
||||
|
||||
[SWS_Fls_00248] ⌈
|
||||
|
||||
| 模块 | 头文件 | 导入类型 |
|
||||
|------|--------|----------|
|
||||
| MemIf | MemIf.h | MemIf_JobResultType, MemIf_ModeType, MemIf_StatusType |
|
||||
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
|
||||
⌋
|
||||
|
||||
### 8.2 类型定义
|
||||
|
||||
#### 8.2.1 Fls_ConfigType
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Name | Fls_ConfigType |
|
||||
| Type | Structure |
|
||||
| Range | Hardware dependend structure — 初始化数据结构内容为 Flash 内存硬件特定 |
|
||||
| Description | 保存 Flash 驱动配置集的结构。指向此结构的指针提供给 Flash 驱动初始化例程。 |
|
||||
| Available via | Fls.h |
|
||||
|
||||
#### 8.2.2 Fls_AddressType
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Name | Fls_AddressType |
|
||||
| Type | uint(8/16/32 位,取决于目标平台和 Flash 设备) |
|
||||
| Description | 用作从已配置 Flash 基地址访问特定 Flash 内存区域的地址偏移。 |
|
||||
|
||||
[SWS_Fls_00216] ⌈`Fls_AddressType` 的下限应为 0。⌋
|
||||
[SWS_Fls_00217] ⌈如有必要,FLS 模块应添加设备特定基地址。⌋
|
||||
|
||||
#### 8.2.3 Fls_LengthType
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Name | Fls_LengthType |
|
||||
| Type | 与 Fls_AddressType 相同 |
|
||||
| Description | 指定要读/写/擦/比较的字节数。 |
|
||||
|
||||
### 8.3 函数定义
|
||||
|
||||
#### 8.3.1 Fls_Init
|
||||
|
||||
```c
|
||||
void Fls_Init(const Fls_ConfigType* ConfigPtr)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x00 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 初始化 Flash 驱动。 |
|
||||
|
||||
[SWS_Fls_00014] ⌈`Fls_Init` 函数应使用给定配置集中的参数初始化 FLS 模块(软件)和所有 Flash 内存相关寄存器(硬件)。⌋
|
||||
|
||||
[SWS_Fls_00323] ⌈完成初始化后,应将 FLS 模块状态设为 MEMIF_IDLE。⌋
|
||||
[SWS_Fls_00324] ⌈完成初始化后,应将 Flash 作业结果设为 MEMIF_JOB_OK。⌋
|
||||
[SWS_Fls_00048] ⌈如硬件支持,应按配置集设置 Flash 内存擦除/写保护。⌋
|
||||
|
||||
#### 8.3.2 Fls_Erase
|
||||
|
||||
```c
|
||||
Std_ReturnType Fls_Erase(
|
||||
Fls_AddressType TargetAddress,
|
||||
Fls_LengthType Length
|
||||
)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x01 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Description | 擦除 Flash 扇区。 |
|
||||
| Return | E_OK: 擦除命令已接受;E_NOT_OK: 未接受 |
|
||||
|
||||
[SWS_Fls_00218] ⌈`Fls_Erase` 作业应擦除一个或多个完整 Flash 扇区。⌋
|
||||
[SWS_Fls_00220] [SWS_Fls_00221] ⌈应在 FLS 模块主函数内异步执行,从 `FlsBaseAddress + TargetAddress` 起擦除大小为 `Length` 的 Flash 内存块。Length 将四舍五入到下一个完整扇区边界。⌋
|
||||
|
||||
参数检查:
|
||||
- [SWS_Fls_00020] 擦除起始地址必须对齐到 Flash 扇区边界,在指定地址边界内,否则报 FLS_E_PARAM_ADDRESS
|
||||
- [SWS_Fls_00021] 擦除长度必须大于 0,擦除结束地址对齐到 Flash 扇区边界,在上边界内,否则报 FLS_E_PARAM_LENGTH
|
||||
|
||||
#### 8.3.3 Fls_Write
|
||||
|
||||
```c
|
||||
Std_ReturnType Fls_Write(
|
||||
Fls_AddressType TargetAddress,
|
||||
const uint8* SourceAddressPtr,
|
||||
Fls_LengthType Length
|
||||
)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x02 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Description | 写入一个或多个完整 Flash 页。 |
|
||||
|
||||
[SWS_Fls_00223] ⌈`Fls_Write` 作业应向 Flash 设备写入一个或多个完整 Flash 页。⌋
|
||||
[SWS_Fls_00226] ⌈从 `FlsBaseAddress + TargetAddress` 起,使用 `SourceAddressPtr` 提供的数据编程大小为 `Length` 的 Flash 内存块。⌋
|
||||
|
||||
参数检查:
|
||||
- [SWS_Fls_00026] 写起始地址对齐到 Flash 页边界,否则报 FLS_E_PARAM_ADDRESS
|
||||
- [SWS_Fls_00027] 写长度 > 0,结束地址对齐到 Flash 页边界,否则报 FLS_E_PARAM_LENGTH
|
||||
- [SWS_Fls_00157] 检查 DataBuffer 指针非 NULL,否则报 FLS_E_PARAM_DATA
|
||||
|
||||
#### 8.3.4 Fls_Cancel
|
||||
|
||||
```c
|
||||
void Fls_Cancel(void)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x03 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Description | 取消正在进行的作业。 |
|
||||
|
||||
[SWS_Fls_00229] ⌈应取消正在进行的 Flash 读、写、擦除或比较作业。⌋
|
||||
[SWS_Fls_00033] / [SWS_Fls_00335] ⌈同步中止作业,将模块状态设为 MEMIF_IDLE。⌋
|
||||
[SWS_Fls_00336] ⌈如作业结果为 MEMIF_JOB_PENDING,设为 MEMIF_JOB_CANCELED。⌋
|
||||
|
||||
#### 8.3.5 Fls_GetStatus
|
||||
|
||||
```c
|
||||
MemIf_StatusType Fls_GetStatus(void)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x04 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant |
|
||||
| Description | 同步返回 Flash 状态。 |
|
||||
|
||||
#### 8.3.6 Fls_GetJobResult
|
||||
|
||||
```c
|
||||
MemIf_JobResultType Fls_GetJobResult(void)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x05 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant |
|
||||
| Description | 同步返回上次作业的结果。 |
|
||||
|
||||
#### 8.3.7 Fls_Read
|
||||
|
||||
```c
|
||||
Std_ReturnType Fls_Read(
|
||||
Fls_AddressType SourceAddress,
|
||||
uint8* TargetAddressPtr,
|
||||
Fls_LengthType Length
|
||||
)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x07 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Description | 从 Flash 内存读取一个或多个字节。 |
|
||||
|
||||
#### 8.3.8 Fls_Compare
|
||||
|
||||
```c
|
||||
Std_ReturnType Fls_Compare(
|
||||
Fls_AddressType SourceAddress,
|
||||
const uint8* TargetAddressPtr,
|
||||
Fls_LengthType Length
|
||||
)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x08 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Description | 将 Flash 中数据与给定数据缓冲区进行比较。 |
|
||||
|
||||
#### 8.3.9 Fls_SetMode
|
||||
|
||||
```c
|
||||
void Fls_SetMode(MemIf_ModeType Mode)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x09 |
|
||||
| Description | 设置 Flash 操作模式。 |
|
||||
|
||||
#### 8.3.10 Fls_GetVersionInfo
|
||||
|
||||
```c
|
||||
void Fls_GetVersionInfo(Std_VersionInfoType* VersioninfoPtr)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x10 |
|
||||
| Reentrancy | Reentrant |
|
||||
|
||||
### 8.4 回调通知
|
||||
|
||||
无,FLS 是基础模块。
|
||||
|
||||
### 8.5 调度函数
|
||||
|
||||
#### 8.5.1 Fls_MainFunction
|
||||
|
||||
```c
|
||||
void Fls_MainFunction(void)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| Service ID[hex] | 0x06 |
|
||||
| Description | 执行 Flash 作业(读/写/擦/比较)的处理。 |
|
||||
| Available via | SchM_Fls.h |
|
||||
|
||||
执行作业处理、超时监视、报告硬件错误(FLS_E_ERASE/WRITE/READ/COMPARE_FAILED)。
|
||||
|
||||
### 8.6 期望接口
|
||||
|
||||
#### 8.6.1 强制接口
|
||||
|
||||
| API 函数 | 头文件 | 描述 |
|
||||
|----------|--------|------|
|
||||
| Det_ReportRuntimeError | Det.h | 报告运行时错误 |
|
||||
|
||||
#### 8.6.2 可选接口
|
||||
|
||||
| API 函数 | 头文件 | 描述 |
|
||||
|----------|--------|------|
|
||||
| Det_ReportError | Det.h | 报告开发错误 |
|
||||
| Dem_ReportErrorStatus | Dem.h | 报告 DEM 状态(如硬件错误) |
|
||||
|
||||
#### 8.6.3 可配置接口
|
||||
|
||||
##### 作业结束通知
|
||||
|
||||
```c
|
||||
void Fls_JobEndNotification(void)
|
||||
```
|
||||
|
||||
作业成功完成时调用。
|
||||
|
||||
##### 作业错误通知
|
||||
|
||||
```c
|
||||
void Fls_JobErrorNotification(void)
|
||||
```
|
||||
|
||||
作业被取消或以负结果结束时调用。
|
||||
|
||||
---
|
||||
|
||||
## 9 时序图
|
||||
|
||||
类似 EEPROM 驱动:
|
||||
- 初始化:EcuM → Fls:`Fls_Init`
|
||||
- 读/写/擦/比较:NvM → Fee → Fls → 周期 `Fls_MainFunction` → JobEndNotification 回调
|
||||
- 取消运行中作业:`Fls_Cancel` 同步,状态变为 MEMIF_IDLE,作业结果 MEMIF_JOB_CANCELED
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范
|
||||
|
||||
### 10.1 容器与配置参数
|
||||
|
||||
#### 10.1.1 Fls
|
||||
|
||||
| 项 | 内容 |
|
||||
|-----|------|
|
||||
| SWS Item | ECUC_Fls_00200 |
|
||||
| Module Name | Fls |
|
||||
| Module Description | Flash 驱动配置 |
|
||||
| Post-Build Variant Support | true |
|
||||
| Supported Config Variants | VARIANT-POST-BUILD, VARIANT-PRE-COMPILE |
|
||||
|
||||
#### 10.1.2 FlsGeneral
|
||||
|
||||
| 参数 | 描述 |
|
||||
|------|------|
|
||||
| FlsDevErrorDetect | 开发错误检测开关 |
|
||||
| FlsVersionInfoApi | 版本信息 API 启用开关 |
|
||||
| FlsCancelApi | Cancel API 启用 |
|
||||
| FlsCompareApi | Compare API 启用 |
|
||||
| FlsGetJobResultApi | GetJobResult API 启用 |
|
||||
| FlsGetStatusApi | GetStatus API 启用 |
|
||||
| FlsSetModeApi | SetMode API 启用 |
|
||||
| FlsUseInterrupts | 中断/轮询作业处理选择 |
|
||||
| FlsEraseVerificationEnabled | 擦除验证启用 |
|
||||
| FlsWriteVerificationEnabled | 写验证启用 |
|
||||
| FlsTimeoutSupervisionEnabled | 超时监视启用 |
|
||||
| FlsDriverIndex | 驱动实例 ID(多实例时唯一) |
|
||||
|
||||
#### 10.1.3 FlsConfigSet
|
||||
|
||||
| 参数 | 描述 |
|
||||
|------|------|
|
||||
| FlsBaseAddress | Flash 基地址 |
|
||||
| FlsTotalSize | Flash 总大小 |
|
||||
| FlsDefaultMode | 默认模式 |
|
||||
| FlsMaxReadFastMode | 快速模式最大读块大小 |
|
||||
| FlsMaxReadNormalMode | 普通模式最大读块大小 |
|
||||
| FlsMaxWriteFastMode | 快速模式最大写块大小 |
|
||||
| FlsMaxWriteNormalMode | 普通模式最大写块大小 |
|
||||
| FlsCallCycle | 作业调用周期 |
|
||||
| FlsAcLoadOnJobStart | 作业启动时加载访问代码到 RAM 开关 |
|
||||
| FlsAcErase | 擦除访问代码函数指针 |
|
||||
| FlsAcWrite | 写访问代码函数指针 |
|
||||
| FlsJobEndNotification | 作业结束通知回调 |
|
||||
| FlsJobErrorNotification | 作业错误通知回调 |
|
||||
|
||||
#### 10.1.4 FlsSectorList / FlsSector
|
||||
|
||||
每个 Flash 扇区配置:
|
||||
- FlsNumberOfSectors
|
||||
- FlsPageSize
|
||||
- FlsSectorSize
|
||||
- FlsSectorStartaddress
|
||||
|
||||
#### 10.1.5 FlsPublishedInformation
|
||||
|
||||
已发布参数:
|
||||
- 已擦除 Flash 单元值
|
||||
- Flash 单元大小
|
||||
|
||||
### 10.2 SPI 特定扩展(外部 Flash)
|
||||
|
||||
引用 SPI 配置参数。
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用需求
|
||||
|
||||
[SWS_Fls_00366] ⌈这些需求不适用于本规范。⌋ 涉及多个 SRS_BSW_* 和 SRS_SPAL_* 需求,详见原文 PDF。
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
- 本文档完整翻译自 AUTOSAR_SWS_FlashDriver v4.4.0(Document ID 025,67 页)。
|
||||
- 保留所有需求 ID(SWS_Fls_xxxxx、SRS_Fls_xxxxx、ECUC_Fls_xxxxx)。
|
||||
- 保留 AUTOSAR 方框符 ⌈⌋。
|
||||
- 模块缩写(Fls、Fee、Ea、NvM、MemIf、SPI、DEM、DET、EcuM 等)和 API 函数名保持英文。
|
||||
- 完整配置参数详细描述请参考原文 PDF 第 10 章。
|
||||
Reference in New Issue
Block a user