当前位置: 首页 > news >正文

AUTOSAR进阶图解==>AUTOSAR_SRS_FlashTest

AUTOSAR 闪存测试模块详解

基于AUTOSAR 4.4.0标准 - Flash Test模块需求分析

目录

  1. 概述
  2. 模块架构
    2.1 Flash Test模块架构图
    2.2 组件说明
  3. 测试流程
    3.1 Flash Test测试流程序列图
    3.2 前台测试与后台测试对比
  4. 状态管理
    4.1 Flash Test状态转换图
    4.2 状态详解
  5. API接口
  6. 配置参数
  7. 错误处理
  8. 总结

1. 概述

Flash Test模块是AUTOSAR标准中用于测试不变内存的服务模块。不变内存可以是程序闪存、程序SRAM、锁定缓存和ROM等,这些内存要么嵌入在微控制器中,要么通过内存映射连接到微控制器。

Flash Test服务可以在MCU初始化后的任何时间执行,由用户根据系统安全需求选择合适的测试算法和执行位置。测试服务本身依赖于系统的存储概念,因此测试算法的可用性取决于硬件特性和AUTOSAR ECU的特定需求。


2. 模块架构

2.1 Flash Test模块架构图

在这里插入图片描述

2.2 组件说明

组件 Flash Test
  • 职责: 提供测试不变内存的算法,包括程序闪存、程序SRAM、锁定缓存和ROM
  • 功能点:
    • 提供前台测试和后台测试两种执行模式
    • 支持存储签名计算和验证
    • 根据测试结果向DEM报告诊断事件
    • 在开发阶段检测到错误时向Det报告
组件 应用软件组件
  • 职责: 调用Flash Test模块提供的服务
  • 功能点:
    • 通过RTE请求Flash Test执行测试
    • 获取测试结果和状态
组件 诊断事件管理器 (DEM)
  • 职责: 处理Flash Test报告的诊断事件
  • 功能点:
    • 接收并处理Flash Test检测到的内存错误
    • 存储错误信息供诊断工具访问
组件 开发错误跟踪器 (Det)
  • 职责: 在开发阶段跟踪Flash Test检测到的错误
  • 功能点:
    • 接收并记录API使用错误
    • 帮助开发人员识别问题
组件 Flash驱动
  • 职责: 提供对闪存存储器的访问
  • 功能点:
    • 允许Flash Test读取闪存内容
    • 实现底层的闪存访问操作
组件 MCU驱动
  • 职责: 提供对MCU特性的访问
  • 功能点:
    • 提供硬件相关的功能支持
    • 辅助Flash Test执行特定的硬件操作
组件 内存服务 (MemService)
  • 职责: 提供通用内存操作服务
  • 功能点:
    • 支持存储签名计算
    • 提供内存内容验证功能
组件 运行时环境 (RTE)
  • 职责: 作为应用软件组件和基础软件之间的中间层
  • 功能点:
    • 转发应用软件的调用到Flash Test
    • 提供标准化的接口
关系 应用软件组件–>RTE
  • 应用软件组件通过RTE提供的标准化接口调用Flash Test的服务,RTE作为应用层和基础软件层之间的抽象层
关系 RTE–>Flash Test
  • RTE将应用软件的请求转发给Flash Test模块,并将Flash Test的响应返回给应用软件
关系 Flash Test–>Flash驱动
  • Flash Test需要读取Flash内容进行测试,通过Flash驱动提供的接口实现对Flash的访问
关系 Flash Test–>Det
  • 当Flash Test检测到开发错误(如参数错误、未初始化调用等)时,通过Det模块报告这些错误
关系 Flash Test–>DEM
  • 当Flash Test在测试过程中检测到内存故障或不一致时,向DEM报告诊断事件,用于故障诊断
关系 Flash Test–>MCU
  • Flash Test可能需要使用特定的MCU功能(如存储器保护、时钟控制等),通过MCU驱动实现
关系 Flash Test–>MemService
  • Flash Test利用MemService提供的通用内存服务进行存储签名计算和验证
代码示例
/* Flash Test模块初始化 */
typedef struct {uint8 ConfigId;                    /* 配置ID */uint8 TestAlgorithm;               /* 测试算法类型 */uint16 TestInterval;               /* 后台测试间隔时间 */uint8 ReportFailBehavior;          /* 测试失败时的行为 */uint8 MaxBlockCount;               /* 最大内存块数量 */boolean DemReportingEnabled;       /* 是否启用DEM报告 */uint8 DemEventId;                  /* DEM事件ID */
} FlashTest_ConfigType;/* 内存块配置结构 */
typedef struct {uint32 MemoryStartAddress;         /* 内存块起始地址 */uint32 MemorySize;                 /* 内存块大小(字节) */uint8 MemoryType;                  /* 内存类型(FLASH/SRAM/ROM) */uint32 Signature;                  /* 预期的签名值 */
} FlashTest_MemoryBlockType;/* Flash Test模块初始化函数 */
Std_ReturnType FlashTest_Init(const FlashTest_ConfigType* ConfigPtr)
{Std_ReturnType result = E_OK;/* 参数检查 */if (ConfigPtr == NULL) {Det_ReportError(FLASHTEST_MODULE_ID, FLASHTEST_INSTANCE_ID, FLASHTEST_API_INIT, FLASHTEST_E_PARAM_POINTER);result = E_NOT_OK;}else {/* 初始化模块内部变量 */gFlashTestState = FLASHTEST_STATE_IDLE;gFlashTestConfig = *ConfigPtr;/* 初始化其他模块依赖 */if (gFlashTestConfig.DemReportingEnabled) {/* 初始化DEM事件监控 */Dem_SetEventStatus(gFlashTestConfig.DemEventId, DEM_EVENT_STATUS_PASSED);}}return result;
}

3. 测试流程

3.1 Flash Test测试流程序列图

在这里插入图片描述

3.2 前台测试与后台测试对比

Flash Test模块提供两种测试模式:前台测试和后台测试。这两种模式针对不同的使用场景和安全需求设计。

前台测试流程

前台测试是由用户直接调用的同步测试过程,特点包括:

  • 调用方式: 通过FlashTest_TestBlock()函数直接调用
  • 执行特点: 同步执行,调用方需等待测试完成
  • 测试范围: 针对指定的内存块进行完整测试
  • 不可中断性: 一旦开始测试,不可被中断
  • 适用场景: 关键安全检查、启动自检、重要状态转换前验证

前台测试的主要步骤:

  1. 应用/诊断层调用FlashTest_TestBlock()函数
  2. Flash Test API验证参数并启动测试
  3. Flash Test Core读取指定内存块内容
  4. 应用测试算法验证内存内容
  5. 可选地计算存储块签名并与预期值比较
  6. 根据测试结果返回状态(FLASHTEST_E_OK或FLASHTEST_E_NOT_OK)
  7. 测试失败时向DEM报告诊断事件
后台测试流程

后台测试是由调度器周期性调用的可中断测试过程,特点包括:

  • 调用方式: 通过FlashTest_Init()初始化,然后周期性调用FlashTest_MainFunction()
  • 执行特点: 分步执行,可被中断,测试分散在多个任务中
  • 测试范围: 可以覆盖多个内存块,按照预定义的测试间隔执行
  • 可中断性: 每次执行一个测试片段,保存中间状态
  • 适用场景: 运行时背景检查、大内存区域定期验证、长期内存完整性监控

后台测试的主要步骤:

  1. 应用层首先调用FlashTest_Init()初始化测试参数
  2. 调度器周期性调用FlashTest_MainFunction()
  3. 每次调用时,Flash Test执行一个测试片段
  4. 读取部分Flash内容并应用测试算法
  5. 保存中间状态,等待下次调用继续测试
  6. 全部测试完成后,计算和验证签名
  7. 应用层可通过FlashTest_GetStatus()查询测试状态
代码示例
/* 前台测试示例 */
Std_ReturnType TestFlashBlock(uint8 blockId)
{Std_ReturnType result;FlashTest_BlockIdType testBlockId = blockId;/* 调用前台测试API直接测试指定内存块 */result = FlashTest_TestBlock(testBlockId);if (result == FLASHTEST_E_OK) {/* 测试通过,可以继续执行依赖于此内存块的操作 */return E_OK;}else {/* 测试失败,执行失败处理 */HandleFlashTestFailure(blockId);return E_NOT_OK;}
}/* 后台测试示例 */
void InitializeBackgroundTest(void)
{/* 配置并初始化Flash Test模块 */FlashTest_ConfigType testConfig;/* 设置测试配置 */testConfig.TestAlgorithm = FLASHTEST_ALGORITHM_CRC;testConfig.TestInterval = 100; /* 测试间隔(ms) */testConfig.DemReportingEnabled = TRUE;/* 初始化模块 */FlashTest_Init(&testConfig);
}/* 周期性测试函数,由调度器调用 */
void PeriodicFlashTest(void)
{FlashTest_StatusType testStatus;/* 执行测试片段 */FlashTest_MainFunction();/* 检查测试状态 */FlashTest_GetStatus(&testStatus);if (testStatus == FLASHTEST_STATUS_COMPLETED) {/* 测试完成且通过 */ResetTestCycle();}else if (testStatus == FLASHTEST_STATUS_FAILED) {/* 测试失败,执行失败处理 */HandleBackgroundTestFailure();}
}

4. 状态管理

4.1 Flash Test状态转换图

在这里插入图片描述

4.2 状态详解

Flash Test模块的状态包括:

  • FLASHTEST_STATE_IDLE: 空闲状态,等待测试命令
  • FLASHTEST_STATE_TESTING: 测试进行中,执行测试算法
  • FLASHTEST_STATE_COMPLETED: 测试完成且通过
  • FLASHTEST_STATE_FAILED: 测试失败

5. API接口

Flash Test模块提供以下API接口:

  • FlashTest_Init(): 初始化Flash Test模块
  • FlashTest_TestBlock(): 执行前台测试
  • FlashTest_MainFunction(): 执行后台测试
  • FlashTest_GetStatus(): 获取测试状态

6. 配置参数

Flash Test模块的配置参数包括:

  • TestAlgorithm: 测试算法类型
  • TestInterval: 后台测试间隔时间
  • ReportFailBehavior: 测试失败时的行为
  • MaxBlockCount: 最大内存块数量
  • DemReportingEnabled: 是否启用DEM报告
  • DemEventId: DEM事件ID

7. 错误处理

Flash Test模块的错误处理包括:

  • HandleFlashTestFailure(): 处理前台测试失败
  • HandleBackgroundTestFailure(): 处理后台测试失败

8. 总结

Flash Test模块是AUTOSAR标准中用于测试不变内存的服务模块。它提供了前台测试和后台测试两种模式,以满足不同的使用场景和安全需求。通过Flash Test模块,可以有效地检测内存的完整性和可靠性,确保系统的安全性和可靠性。


http://www.dtcms.com/a/310089.html

相关文章:

  • EasyGBS的两种录像回看
  • ROS主控和stm32小车底盘通过串口进行通讯
  • 信奥骗分导论
  • 镜像快速部署ollama+python+ai
  • 光储知识积累
  • 全渠道融合:智能引擎重塑鞋服业价值链条
  • 88、【OS】【Nuttx】【启动】栈溢出保护:volatile 关键字(修饰内联汇编)
  • 15day-人工智学习-机器学习-介绍和定义
  • 【Linux】Linux下基本指令
  • 【暑期每日一题】洛谷 P9390 金盏花
  • SketchUp扩展工具分享:Ropefall v1.02插件轻松实现绳索模拟
  • 京东云轻量云服务器与腾讯云域名结合配置网站及申请SSL证书流程详解
  • 【Linux】磁盘存储+文件系统简介
  • android嵌套网页遇到的问题总结
  • mac系统自带终端崩溃修复
  • 使用自定义数据集训练 YOLOv12 以检测道路坑洞严重程度
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(上)
  • 基于Matlab的人眼虹膜识别门禁系统
  • 【Git 分支整合的艺术:岔路与归途的抉择 ——merge 与 rebase 深度解析】
  • Java函数式编程之【Stream终止操作】【下】【三】【收集操作collect()与分组分区和下游收集器】
  • 【MySQL】MySQL事务
  • 低空经济展 | 昂际智航携珑驭®系列产品亮相2025深圳eVTOL展
  • 向日葵软件提权
  • 第一篇:Linux 运维入门:虚拟机部署与基础环境配置
  • 《Java 程序设计》核心知识点梳理与深入探究
  • 工具Cursor(2)使用案例
  • 云函数编排深度解读:从概念到架构的全景指南
  • 计算声子谱
  • 详解K8s集群搭建:从环境准备到成功运行
  • 力扣面试150(46/150)