# RAM 测试规范 > **文档标题**: Specification of RAM Test > **AUTOSAR CP Release**: 4.4.0 > **文档编号**: 076 > **文档类型**: SWS (Software Specification) --- ## 文档标识 | 项目 | 内容 | |------|------| | Document Title | Specification of RAM Test | | Document Owner | AUTOSAR | | Document Responsibility | AUTOSAR | | Document Identification No | 076 | | 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 (CONC_639) DRAFT;头文件清理;小幅更正 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 更新追溯;小幅更正/澄清/编辑性修订 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除 7.5 调试小节;重命名 RamTstGetVersionInfoApi → RamTstVersionInfoApi;移除 SWS_RamTst_00167 和 00168;新增运行时错误和瞬态故障章节 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 更新扩展生产错误的通过/失败标准;调试支持标记为过时 | | 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 | 移除 SWS_RamTst_00110 时序属性;编辑性修订 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 按新的 SWS_BSWGeneral 文档对齐;更新扩展生产错误文档;调整 ISO 26262 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 澄清部分需求;笔误更正;新增 DET 错误报告需求 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 澄清部分配置参数;改进错误报告 | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 新增前台测试;允许每个测试算法多个配置;R4.0 维护 | | 2009-02-04 | 3.1.2 | AUTOSAR CM | 更新文档到新 SWS 宏 | | 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律免责声明修订 | | 2008-02-01 | 3.0.2 | AUTOSAR Administration | 第 1 章和第 9 章图修正 | | 2007-12-21 | 3.0.1 | AUTOSAR Administration | 文档化并包含 RAM 测试概念;更新需求表;措辞/语法变更;时序图变更 | | 2007-07-24 | 2.1.16 | AUTOSAR Technical Office | 表格从 UML 模型生成 | | 2007-01-24 | 2.1.15 | AUTOSAR Administration | "用户须知"修订;增加"版本信息" | | 2006-11-28 | 2.1.1 | AUTOSAR Administration | 文件包含结构更新;移除"改良汉明码"测试;`RamTst_Stop()` & `RamTst_Continue()` 改为"异步" | | 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 介绍与功能概述 本规范描述 RAM Test 模块的功能、API 和配置。 RAM Test 模块的任务是通过软件测试 RAM 内存区域,以检测永久故障。 主要特性: - **后台 RAM 测试**(Background):周期性执行,可中断,异步服务 - **前台 RAM 测试**(Foreground):由用户调用,同步,可执行完整或部分测试 - 支持低、中、高诊断覆盖率的多种测试算法 - 非破坏性和破坏性两种模式 - 可配置的测试单元数 模块阶段: 1. 初始化(Init) 2. 后台测试运行(Run) 3. 暂停(Suspend)/恢复(Resume) 4. 停止(Stop)/允许(Allow) 5. 反初始化(DeInit) --- ## 2 缩略语 | 缩略语 | 描述 | |--------|------| | RamTst | RAM Test 模块名 | | ECU | Electric Control Unit | | EOL | End Of Line | | MCAL | Microcontroller Abstraction Layer | | MCU | Microcontroller Unit | | NMI | Non maskable interrupt | | OS | Operating System | | DEM | Diagnostic Event Manager | | DET | Default Error Tracer | | ECC | Error Correction Code | | CRC | Cyclic Redundancy Check | --- ## 3 相关文档 ### 3.1 输入文档 - List of Basic Software Modules - Layered Software Architecture - General Requirements on Basic Software Modules - Requirements on RAM Test — AUTOSAR_SRS_RAMTest.pdf - Specification of Default Error Tracer - Specification of Diagnostic Event Manager - General Specification of Basic Software Modules ### 3.2 相关标准与规范 - ISO 26262-5:2011 ### 3.3 相关规范 AUTOSAR 提供基础软件模块通用规范(SWS BSW General),也适用于 RAM Test。 --- ## 4 约束与假设 ### 4.1 限制 仅涵盖用于检查 RAM 的软件算法。硬件 RAM 检查(如 ECC 校验)不在范围内。 RAM Test 模块旨在集成于整体安全概念中,本身不提供所需诊断覆盖率。 ### 4.2 完整 RAM 测试 完整 RAM 测试覆盖所有配置的 RAM 块,从开始到结束。 ### 4.3 部分 RAM 测试 部分 RAM 测试仅覆盖配置 RAM 块的一部分。 ### 4.4 适用车型领域 无限制。 --- ## 5 模块依赖 依赖于 DEM 错误报告、DET 开发错误报告。 --- ## 6 需求追溯 (主要追溯关系,完整表见原文 PDF) | 需求 | 满足者 | |------|--------| | SRS_BSW_00323 (参数检查) | SWS_RamTst_00033, 00037, 00039, 00040, 00095, 00097, 00170, 00172, 00210, 00214 | | SRS_BSW_00337 (开发错误分类) | SWS_RamTst_00067 | | SRS_BSW_00339 (生产错误状态报告) | SWS_RamTst_00011, 00067, 00071, 00111, 00213, 00216, 01002, 01005, 01008 | | SRS_BSW_00406 (模块初始化) | SWS_RamTst_00006 | | SRS_BSW_00407 (版本信息) | SWS_RamTst_00109 | | SRS_BSW_00414 (配置结构指针) | SWS_RamTst_00093, 01011, 01012 | | SRS_BSW_00450 (主函数立即返回) | SWS_RamTst_00175 | | SRS_RamTst_13800 (测试单元数运行时可变) | SWS_RamTst_00036, 00107 | | SRS_RamTst_13802 (多 RAM 区域配置) | SWS_RamTst_00026 | | SRS_RamTst_13803 (预编译算法选择) | SWS_RamTst_00026, 00027, 00063, 00224, 00225, 00226 | | SRS_RamTst_13804 (运行时算法选择) | SWS_RamTst_00083, 00105 | | SRS_RamTst_13809 (划分测试为小部分) | SWS_RamTst_00008, 00026, 00059, 00107, 00108 | | SRS_RamTst_13810 (Get status 接口) | SWS_RamTst_00010, 00011, 00019, 00024, 00038, 00104 | | SRS_RamTst_13811 (非破坏性) | SWS_RamTst_00060, 00061, 00200 | | SRS_RamTst_13812 (破坏性) | SWS_RamTst_00061, 00201 | | SRS_RamTst_13816 (指令队列影响) | SWS_RamTst_00062 | | SRS_RamTst_13820 (通知机制) | SWS_RamTst_00043, 00044, 00045, 00046, 00113, 00114 | | SRS_RamTst_13822 (低覆盖算法) | SWS_RamTst_00224 | | SRS_RamTst_13823 (中等覆盖算法) | SWS_RamTst_00225 | | SRS_RamTst_13824 (高覆盖算法) | SWS_RamTst_00226 | | SRS_SPAL_12448 (开发错误检测后行为) | SWS_RamTst_00033, 00037, 00039, 00040, 00084, 00095 | 完整追溯表见原文 PDF。 --- ## 7 功能规范 ### 7.1 需求 [SWS_RamTst_00005] ⌈RAM Test 模块应提供后台 RAM 测试作为异步服务。⌋ [SWS_RamTst_00206] ⌈RAM Test 模块应提供前台 RAM 测试作为同步服务。⌋ [SWS_RamTst_00063] ⌈RAM Test 模块的配置过程应允许在预编译时选择不同 RAM 测试算法的子集。⌋ #### 非破坏性测试 [SWS_RamTst_00060] ⌈如选择非破坏性 RAM 测试,RAM Test 模块应在修改前保存待测试 RAM 区域。整个过程(保存、更改、还原)应不中断地执行。⌋ #### 测试算法 - [SWS_RamTst_00224] ⌈应提供低覆盖率测试算法(ISO 26262-5:2011 表 D.1)⌋ - [SWS_RamTst_00225] ⌈应提供中等覆盖率测试算法⌋ - [SWS_RamTst_00226] ⌈应提供高覆盖率测试算法⌋ - [SWS_RamTst_00204] ⌈可提供额外厂商或硬件特定测试算法,必须明确文档化其故障覆盖率⌋ #### 指令/数据队列处理 [SWS_RamTst_00062] ⌈写入单元后读回前,RAM Test 模块应提供注入指令的可能性,强制控制器清除其 CPU 内部缓存。⌋ #### 中断处理 [SWS_RamTst_00221] ⌈处理器特定测试算法可使用支持数据丢失检测的硬件宏和/或中断(如 CRC、ECC)。实现者必须在 BSW 模块描述中描述任何中断例程。⌋ ### 7.2 错误分类 #### 7.2.1 开发错误 [SWS_RamTst_00067] ⌈ | 错误类型 | 相关性 | 相关错误代码 | 值[hex] | |----------|--------|--------------|---------| | 在意外状态下调用特定 API | Development | RAMTST_E_STATUS_FAILURE | 0x01 | | API 参数超出规定范围 | Development | RAMTST_E_OUT_OF_RANGE | 0x02 | | 模块未初始化调用 API 服务 | Development | RAMTST_E_UNINIT | 0x03 | | NULL 指针参数 | Development | RAMTST_E_PARAM_POINTER | 0x04 | | 初始化失败 | Development | RAMTST_E_INIT_FAILED | 0x05 | ⌋ #### 7.2.2 运行时错误 无运行时错误。 #### 7.2.3 瞬态故障 无瞬态故障。 #### 7.2.4 生产错误 无生产错误。 #### 7.2.5 扩展生产错误 | 错误名 | 描述 | |--------|------| | RAMTST_E_BG_DESTRUCTIVE | 后台破坏性测试错误 | | RAMTST_E_BG_NON_DESTRUCTIVE | 后台非破坏性测试错误 | | RAMTST_E_FG_DESTRUCTIVE | 前台破坏性测试错误 | | RAMTST_E_FG_NON_DESTRUCTIVE | 前台非破坏性测试错误 | 每个具有通过/失败检测标准: - Fail:测试检测到 RAM 故障(块结果为 NOT_OK) - Pass:所有块测试为 OK ### 7.3 错误检测 参考 SWS_BSWGeneral 文档。 ### 7.4 错误通知 通过 DEM 报告生产错误,通过 DET 报告开发错误。 ### 7.5 通用测试行为 [SWS_RamTst_00026] [SWS_RamTst_00027] ⌈RAM Test 模块应支持后构建和预编译配置。⌋ 测试可分为多个小部分,每个 `RamTst_MainFunction` 调用测试指定数量的单元。 --- ## 8 API 规范 ### 8.1 导入的类型 | 模块 | 头文件 | 导入类型 | |------|--------|----------| | Dem | Rte_Dem_Type.h | Dem_EventIdType, Dem_EventStatusType | | Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType | ### 8.2 类型定义 #### 8.2.1 RamTst_ConfigType | 项 | 内容 | |-----|------| | Type | Structure | | Range | 实现特定 | | Description | 包含 RAM Test 模块初始化数据的结构。 | #### 8.2.2 RamTst_ExecutionStatusType | 项 | 内容 | |-----|------| | Type | Enumeration | | Range | RAMTST_NOT_TESTED (0x00); RAMTST_RUNNING (0x01); RAMTST_FINISHED (0x02); RAMTST_SUSPENDED (0x03); RAMTST_STOPPED (0x04) | | Description | RAM 测试执行状态。 | #### 8.2.3 RamTst_TestResultType | 项 | 内容 | |-----|------| | Type | Enumeration | | Range | RAMTST_TEST_NOT_RUN (0x00); RAMTST_TEST_PASSED (0x01); RAMTST_TEST_FAILED (0x02); RAMTST_TEST_UNDEFINED (0x03) | | Description | RAM 测试结果。 | #### 8.2.4 RamTst_AlgParamsIdType | 项 | 内容 | |-----|------| | Type | uint8/uint16 | | Description | 算法参数 ID 类型。 | #### 8.2.5 RamTst_AlgorithmType | 项 | 内容 | |-----|------| | Type | Enumeration | | Range | RAMTST_ALGORITHM_VENDORxxx 等(实现特定) | | Description | 算法类型。 | #### 8.2.6 RamTst_NumberOfTestedCellsType uint8/uint16/uint32 — 被测试单元数。 #### 8.2.7 RamTst_NumberOfBlocksType uint8/uint16/uint32 — 块数量。 ### 8.3 函数定义 #### 8.3.1 RamTst_Init ```c void RamTst_Init(const RamTst_ConfigType* ConfigPtr) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x00 | | Sync/Async | Synchronous | | Description | 初始化 RAM Test 模块。 | #### 8.3.2 RamTst_DeInit ```c void RamTst_DeInit(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x10 | | Description | 反初始化。 | #### 8.3.3 RamTst_Stop ```c Std_ReturnType RamTst_Stop(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x02 | | Sync/Async | Asynchronous | | Description | 停止后台 RAM 测试。 | #### 8.3.4 RamTst_Allow ```c Std_ReturnType RamTst_Allow(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x03 | | Description | 允许后台 RAM 测试。 | #### 8.3.5 RamTst_Suspend ```c Std_ReturnType RamTst_Suspend(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x04 | | Sync/Async | Asynchronous | | Description | 暂停后台 RAM 测试。 | #### 8.3.6 RamTst_Resume ```c Std_ReturnType RamTst_Resume(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x05 | | Description | 恢复后台 RAM 测试。 | #### 8.3.7 RamTst_GetExecutionStatus ```c RamTst_ExecutionStatusType RamTst_GetExecutionStatus(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x06 | | Description | 获取测试执行状态。 | #### 8.3.8 RamTst_GetTestResult ```c RamTst_TestResultType RamTst_GetTestResult(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x07 | | Description | 获取测试结果。 | #### 8.3.9 RamTst_GetTestResultPerBlock ```c Std_ReturnType RamTst_GetTestResultPerBlock( uint8 BlockIndex, RamTst_TestResultType* TestResultPtr ) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x08 | | Description | 获取指定块的测试结果。 | #### 8.3.10 RamTst_GetVersionInfo ```c void RamTst_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x09 | #### 8.3.11 RamTst_GetAlgParams ```c Std_ReturnType RamTst_GetAlgParams(RamTst_AlgParamsIdType* AlgParamsIdPtr) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x0a | | Description | 获取算法参数 ID。 | #### 8.3.12 RamTst_GetTestAlgorithm ```c RamTst_AlgorithmType RamTst_GetTestAlgorithm(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x0b | | Description | 获取当前测试算法。 | #### 8.3.13 RamTst_GetNumberOfTestedCells ```c RamTst_NumberOfTestedCellsType RamTst_GetNumberOfTestedCells(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x0c | | Description | 获取被测单元数。 | #### 8.3.14 RamTst_SelectAlgParams ```c Std_ReturnType RamTst_SelectAlgParams(RamTst_AlgParamsIdType AlgParamsId) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x0d | | Description | 选择算法参数。 | #### 8.3.15 RamTst_ChangeNumberOfTestedCells ```c Std_ReturnType RamTst_ChangeNumberOfTestedCells(RamTst_NumberOfTestedCellsType NumberOfTestedCells) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x0e | | Description | 改变被测单元数。 | #### 8.3.16 RamTst_RunFullTest ```c Std_ReturnType RamTst_RunFullTest(RamTst_NumberOfBlocksType BlockIndex) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x0f | | Sync/Async | Synchronous | | Description | 运行前台完整 RAM 测试。 | #### 8.3.17 RamTst_RunPartialTest ```c Std_ReturnType RamTst_RunPartialTest( RamTst_NumberOfBlocksType BlockIndex, uint32 StartAddress, uint32 EndAddress ) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x11 | | Sync/Async | Synchronous | | Description | 运行前台部分 RAM 测试。 | ### 8.4 回调通知 无。 ### 8.5 调度函数 #### RamTst_MainFunction ```c void RamTst_MainFunction(void) ``` | 项 | 内容 | |-----|------| | Service ID[hex] | 0x01 | | Description | 执行后台 RAM 测试。 | | Available via | SchM_RamTst.h | ### 8.6 期望接口 #### 强制接口 | API 函数 | 头文件 | 描述 | |----------|--------|------| | Dem_SetEventStatus | Dem.h | 报告监视状态信息到 Dem | #### 可选接口 | API 函数 | 头文件 | 描述 | |----------|--------|------| | Det_ReportError | Det.h | 报告开发错误 | #### 可配置接口 ##### RamTst_TestCompletedNotification 测试完成时调用的可配置回调函数。 ##### RamTst_ErrorNotification 错误检测时调用的可配置回调函数。 --- ## 9 时序图 ### 9.1 RamTst_MainFunction (示例) 调度程序周期调用 → RamTst_MainFunction 执行部分测试。 ### 9.2 RamTst_ChangeNumberOfTestedCells 用户运行时改变测试单元数。 ### 9.3-9.9 其他 API 时序 各 API 函数的同步调用与返回。 --- ## 10 配置规范 ### 10.1 如何阅读本章 详见 SWS_BSWGeneral 文档。 ### 10.2 容器与配置参数 #### 10.2.1 变体 支持 VARIANT-POST-BUILD 和 VARIANT-PRE-COMPILE。 #### 10.2.2 RamTst 模块顶层配置容器。 #### 10.2.3 RamTstDemEventParameterRefs 引用 DEM 事件参数: - RAMTST_E_BG_DESTRUCTIVE - RAMTST_E_BG_NON_DESTRUCTIVE - RAMTST_E_FG_DESTRUCTIVE - RAMTST_E_FG_NON_DESTRUCTIVE #### 10.2.4 RamTstCommon 通用配置: | 参数 | 描述 | |------|------| | RamTstDevErrorDetect | 开发错误检测 | | RamTstVersionInfoApi | 版本信息 API | | RamTstAllowApi | Allow API 启用 | | RamTstStopApi | Stop API 启用 | | RamTstSuspendApi | Suspend API 启用 | | RamTstResumeApi | Resume API 启用 | | RamTstSelectAlgParamsApi | SelectAlgParams API 启用 | | RamTstChangeNumberOfTestedCellsApi | ChangeNumberOfTestedCells API 启用 | | RamTstRunFullTestApi | RunFullTest API 启用 | | RamTstRunPartialTestApi | RunPartialTest API 启用 | | RamTstTestCompletedNotification | 测试完成回调 | | RamTstErrorNotification | 错误回调 | | RamTstMainFunctionPeriod | 主函数周期 | #### 10.2.5 RamTstAlgorithms 测试算法配置: | 参数 | 描述 | |------|------| | RamTstLowCoverage | 低覆盖率算法 | | RamTstMediumCoverage | 中覆盖率算法 | | RamTstHighCoverage | 高覆盖率算法 | | RamTstAlgorithmVendorSpecific | 厂商特定算法 | #### 10.2.6 RamTstConfigParams 配置参数: | 参数 | 描述 | |------|------| | RamTstNumberOfTestedCells | 默认被测试单元数 | | RamTstNumberOfBlocks | 块数量 | | RamTstTestMode | 破坏性/非破坏性 | #### 10.2.7 RamTstAlgParams 每算法参数: | 参数 | 描述 | |------|------| | RamTstAlgParamsId | 算法参数 ID | | RamTstAlgorithm | 使用的算法 | | RamTstAlgorithmCoverage | 覆盖率级别 | #### 10.2.8 RamTstBlockParams 每个 RAM 块参数: | 参数 | 描述 | |------|------| | RamTstBlockId | 块 ID | | RamTstStartAddress | 起始地址 | | RamTstEndAddress | 结束地址 | | RamTstTestAlgorithm | 应用的算法 | ### 10.3 已发布参数 #### RamTstPublishedInformation 版本信息等。 ### 10.4 实现特定信息和参数 可由实现者提供额外参数。 --- ## 11 不适用需求 [SWS_RamTst_00999] ⌈这些需求不适用于本规范。⌋ 涉及多个 SRS_BSW_* 和 SRS_SPAL_* 需求,详见原文 PDF。 --- ## 翻译说明 - 本文档完整翻译自 AUTOSAR_SWS_RAMTest v4.4.0(Document ID 076,83 页)。 - 保留所有需求 ID(SWS_RamTst_xxxxx、SRS_RamTst_xxxxx、ECUC_RamTst_xxxxx)。 - 保留 AUTOSAR 方框符 ⌈⌋。 - 模块缩写(RamTst、ECU、DEM、DET、CRC、ECC 等)和 API 函数名保持英文。 - 详细配置参数和示例请参考原文 PDF 第 10 章。