AUTOSAR Flash Test模块详解
目录
- 概述
1.1 Flash Test模块的作用
1.2 工作原理 - 架构设计
2.1 整体架构
2.2 依赖关系 - 状态管理
3.1 状态转换图
3.2 前台与后台测试模式 - 配置结构
4.1 配置类图
4.2 关键配置参数 - 交互流程
5.1 序列图
5.2 测试执行流程 - 总结
1. 概述
1.1 Flash Test模块的作用
AUTOSAR Flash Test模块是AUTOSAR基础软件栈中的一个关键组件,主要用于测试不变内存的完整性和正确性。不变内存可以是嵌入在微控制器中或通过存储映射连接到微控制器的数据/程序flash、程序SRAM、锁定缓存等。
Flash Test模块可以在MCU初始化后的任何时间执行,并提供多种测试算法供系统安全需求选择。值得注意的是,Flash测试服务本身依赖于系统的存储概念,需要集成到整体安全概念中,单独使用无法提供足够的诊断覆盖率。
1.2 工作原理
Flash Test模块支持两种主要的测试模式:
- 前台测试模式:通过用户调用直接触发,测试一旦启动会连续执行直到完成,不可中断。
- 后台测试模式:通过调度器周期性触发,可以被中断,测试可以分段执行,跨越多个调度任务。
Flash Test提供多种测试算法,包括签名检查、黑盒测试、GALPAT算法、棋盘格模式、行走路径和遍历测试等。这些算法用于验证Flash内容的正确性和完整性,确保系统运行过程中关键内存区域不被意外修改。
2. 架构设计
2.1 整体架构
下图展示了AUTOSAR Flash Test模块的整体架构及其与其他模块的关系:
2.2 依赖关系
Flash Test模块的主要依赖关系如下:
- BSW调度器:负责周期性触发Flash Test的后台测试模式执行。
- MCU驱动:提供对微控制器Flash存储器和存储映射区域的访问能力。
- DEM(诊断事件管理器):用于报告Flash测试过程中发现的诊断事件。
- DET(默认错误跟踪器):用于报告开发错误,如参数无效或状态错误。
- 应用软件组件:作为Flash Test服务的用户,可以触发测试执行和获取测试结果。
在架构图中可以看到,Flash Test模块内部分为前台测试、后台测试和测试算法三个主要子组件,它们协同工作以完成Flash测试功能。前台和后台测试组件均使用测试算法组件来执行实际的测试操作。
3. 状态管理
3.1 状态转换图
以下状态图展示了Flash Test模块的各种状态及其转换关系:
3.2 前台与后台测试模式
Flash Test模块提供两种测试模式,它们在状态管理上有明显区别:
-
前台测试模式:
- 通过
FlsTst_StartFgnd()
函数启动 - 一旦启动,连续执行直到完成,不被中断
- 测试结果可通过
FlsTst_GetFgndTestResult()
获取 - 适合测试关键但较小的Flash区域
- 通过
-
后台测试模式:
- 通过
FlsTst_StartBgnd()
函数初始化测试状态 - 实际测试由BSW调度器通过周期性调用
FlsTst_MainFunction()
执行 - 测试执行可以被中断和恢复,适合大范围测试
- 可以通过
FlsTst_StopBgnd()
函数中止测试 - 测试结果可通过
FlsTst_GetBgndTestResult()
获取
- 通过
状态图展示了模块从未初始化状态开始,通过初始化进入空闲状态,然后根据调用的不同API进入前台或后台测试状态的流程。测试完成后返回空闲状态,或在测试失败时进入测试失败状态。
4. 配置结构
4.1 配置类图
下图展示了Flash Test模块的配置类结构:
4.2 关键配置参数
Flash Test模块的配置分为三个主要部分:
-
通用配置(FlsTstGeneral):
FlsTstDevErrorDetect
:是否启用开发错误检测FlsTstVersionInfoApi
:是否启用版本信息APIFlsTstMainFunctionPeriod
:主函数周期调用时间FlsTstMaxNumOfBlocksFgnd
:前台测试最大块数FlsTstMaxNumOfBlocksBgnd
:后台测试最大块数
-
前台测试块配置(FlsTstBlockFgndConfigSet):
FlsTstBlockFgnd
:前台测试块配置FlsTstEnableObjectBasedFgndTest
:是否启用基于对象的前台测试FlsTstNumberOfTestedCellsAtomic
:原子操作中测试的单元数
-
后台测试块配置(FlsTstBlockBgndConfigSet):
FlsTstBlockBgnd
:后台测试块配置FlsTstEnableObjectBasedBgndTest
:是否启用基于对象的后台测试FlsTstEnableSuspendResumeInterface
:是否启用挂起恢复接口FlsTstNumberOfCyclesPerInterval
:每个区间内的周期数FlsTstNumberOfTestedCellsPerCycle
:每个周期测试的单元数
每个测试块(无论前台还是后台)都包含以下关键配置参数:
- 块ID
- 块索引
- 块大小
- 起始地址
- 测试算法类型
- 测试签名起始地址
- 块标记地址(可选)
- DEM事件参数引用(可选)
5. 交互流程
5.1 序列图
以下序列图展示了Flash Test模块与其他组件的交互流程:
5.2 测试执行流程
Flash Test模块的测试执行流程可以分为以下几个阶段:
-
初始化阶段:
- 应用软件组件调用
FlsTst_Init()
- Flash Test模块获取Flash配置信息并初始化内部变量和状态
- 应用软件组件调用
-
前台测试执行:
- 应用软件组件调用
FlsTst_StartFgnd(BlockId)
- Flash Test模块验证参数,执行测试算法
- 通过MCU驱动读取Flash区域内容并与预期值比较
- 返回测试结果,如果失败则向DEM报告诊断事件
- 应用软件组件调用
-
后台测试执行:
- 应用软件组件调用
FlsTst_StartBgnd(BlockId, TestIntervalId)
初始化测试状态 - BSW调度器周期性调用
FlsTst_MainFunction()
- Flash Test模块在每次调用中执行部分测试并保存中间状态
- 全部测试完成后设置测试完成标志,如果失败则向DEM报告诊断事件
- 应用软件组件可通过
FlsTst_GetBgndTestResult()
获取结果或通过FlsTst_StopBgnd()
中断测试
- 应用软件组件调用
序列图详细展示了这些阶段中各组件之间的交互过程,包括参数验证、错误处理、测试执行和结果报告等关键步骤。
6. 总结
AUTOSAR Flash Test模块是汽车电子系统中确保不变内存完整性的关键组件。通过本文的分析,我们可以得出以下几点关键认识:
-
双重测试模式:
- 前台模式提供不可中断的完整测试,适合关键区域测试
- 后台模式提供可中断的分段测试,适合大范围测试
-
灵活的配置结构:
- 支持多种测试算法
- 可配置的测试参数和范围
- 与DEM和DET集成实现诊断和错误报告
-
完善的状态管理:
- 清晰的状态转换逻辑
- 错误状态处理
- 测试结果反馈机制
-
集成到安全概念:
- Flash Test模块需要集成到整体安全概念中
- 单独使用无法提供足够的诊断覆盖率
- 与MCU驱动紧密协作
AUTOSAR Flash Test模块通过提供标准化的Flash测试功能,帮助汽车电子系统开发人员确保系统内存完整性,提高系统可靠性和安全性,是现代汽车电子系统中不可或缺的组成部分。