Autosar存储入门系列03_Autosar中NVM状态机及存储调用逻辑

本文框架

  • 0.前言
  • 1. NVM状态机介绍
  • 2. NVM读/写基本逻辑
    • 2.1 NVM读操作
    • 2.2 NVM写操作
      • 2.2.1 实时写
      • 2.2.2 下电写
    • 2.3 NVM写入注意事项

0.前言

本系列是Autosar存储入门系列,希望能从学习者的角度把存储相关的知识点梳理一遍,这个过程中如果大家觉得有讲得不对或者不够清晰的地方,还请一定指出来,一起探讨,加深学习。

另外根据本人多年的开发经验,做了一些AutosarMCAL配置,通信,诊断,模式管理等实战总结,如果您有需求可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读

本篇介绍一下Autosar中NVM状态机及读写调用逻辑,基本框架如下:
在这里插入图片描述

1. NVM状态机介绍

在NvM模块中,通过异步请求接口NvM_GetErrorStatus()获取Block的状态,可能状态如下:

NVM_REQ_OK:表明对应的异步请求操作成功完成,该状态对应的编号为0,为NvM的初始状态;

NVM_REQ_NOT_OK:表明上一次的异步读写请求操作未成功完成;

NVM_REQ_PENDING:表明当前异步请求读写操作正在进行中;

NVM_REQ_INTEGRITY_FAILED:表明最后一个次的异步请求NvM_ReadBlock或NvM_Read All结果的数据完整性失败,如在NvM_ReadBlock的情况下,RAM块的内容已更改,但已变为无效;

NVM_REQ_BLOCK_SKIPPED:在执行NvM_ReadAll或NvM_WriteAll期间跳过了引用的块,如全部Block都被NvM_ReadAll或NvM_WriteAll期间操作完成则该状态会被设置为NVM_REQ_OK状态;

NVM_REQ_NV_INVALIDATED:需要操作的对应Block是无效的;

NVM_REQ_CANCELED:通过调用NvM_CancelWriteAll取消了多块的请求NvM_WriteAll,或者通过调用NvM_CancelJobs取消了任何单个块作业请求(NvM_ReadBlock、NvM_WriteBlock、NvM_EraseNvBlock、NvM_InvalidateNvBlock和NvM_RestoreBlockDefaults)。

NVM_REQ_RESTORED_FROM_ROM:The referenced NV block had the default values copied to the RAM image.

以上状态的NvM操作过程中都可能会遇到,在一般正常的写操作请求中会遇到最多的状态就是:NVM_REQ_PENDING,NVM_REQ_OK及NVM_REQ_NOT_OK。

2. NVM读/写基本逻辑

接下来,进一步看一下NVM读及写的基本逻辑。

2.1 NVM读操作

在AUTOSAR中有不同的策略来将RAM Block恢复到ECU上次休眠前保存的结果:
1)可以使用NvM_ReadBlock/NvM_ReadPRAMBlock在Rte_Init()期间逐个显式读取单个Block;
2)另一种更好的方法是使用单个NvM请求NvM_ReadAll读取所有Block的结果,在NvM_ReadAll期间要读取的任何块都必须具有显式同步或具有永久RAM块。

一般项目开发中会在EcuM_StartupTwo()期间调用NvM_ReadAll接口实现NvM数据读取。

2.2 NVM写操作

在NVM写操作中按根据存储数据写入时机的不同可分为实时写及下电写,例如对于某些重要的数据,发现其发送改变如一些2E相关的DID存储,但对于一些下线相关的参数可能只需要在下电前存一次即可就没必要实时写,下电前存一次即可。

2.2.1 实时写

在SWC实际运行中,通过调用NvM_WriteBlock()来对单个Block执行写操作,对应的时序操作如下:
在这里插入图片描述
需要注意的是,虽然是实时写,但对于NvM的操作仍然是异步的,需要在NvM_MainFunction()中周期性的去判断Block状态是否为Pending,如选择了CRC校验的话NVM还会根据当前CRC与Block中的CRC值对比是否有变化,如CRC不同并对并执行对应的操作。

在NvM_MainFunction()中会继续调用MemIf及底层接口对Block进行操作,例如当选Fls做模拟EEPROM时的调度逻辑。
在这里插入图片描述

2.2.2 下电写

在NvM的Block属性配置中,有一个WriteAll的选项,该选项配置与否意味着该Block在NvM_WriteAll()接口调用时是否写该Block。
在这里插入图片描述
一般NvM_WriteAll()接口是在下电前,在BswM执行下电逻辑的时候,调用NvM_WriteAll进行所有数据的下电存储,存储完成后ECU进入Shutdown或Sleep状态。
在这里插入图片描述

2.3 NVM写入注意事项

如有不同SWC操作同一Block进行存储的情况,需要注意在Block操作前需要调用NvM_GetErrorStatus()判断接口状态,如Block为Pending状态时不能直接写,否则程序会出问题(进Det等导致程序跑飞)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/53576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue indexedDB 取指定数据库指定表 全部key用request.onsuccess

1 例子 export async function funcGetKey(dbName, tableName) {return new Promise((resolve, reject) > {// 打开指定的数据库const request indexedDB.open(dbName);request.onerror (event) > {console.error(打开数据库失败: , event.target.error);reject(event…

STM32--SPI通信与W25Q64(1)

文章目录 前言SPI通信硬件电路移位过程 SPI时序起始与终止条件交换一个字节 W25Q64硬件电路框图 FLASH操作注意事项软件SPI读写W25Q64 前言 USART串口链接入口 I2C通信链接入口 SPI通信 SPI(Serial Peripheral Interface)是一种高速的、全双工、同步的串…

vscode远程调试PHP代码

目录 1.安装插件 2.ssh连接 3.Xdebug调试,访问 1.安装插件 1,下载phpDebug和Xdebug插件1 2,下载远程SSH插件 3,点击下面电脑小图标和ssh添加需要连接远程主机,我的vscode会在最上面显示需要连接的操作系统&#xf…

CountDownLatch 和 CyclicBarrier的区别与详解

文章目录 一.CountDownLatch 和 CyclicBarrier的区别二.详解总结用法CountDownLatch 用法CyclicBarrier 用法 一.CountDownLatch 和 CyclicBarrier的区别 CountDownLatch和CyclicBarrier都是线程同步的工具类,都是基于AQS实现的;CountDownLatch 的计数器…

IDEA项目实践——VUE介绍与案例分析

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring集成mybatis、spring当中的事务 IDEA项目实践——Spring当中的切面AOP IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——Spring框架简介,以及IOC注解 I…

如何开发一款唯一艺术平台 区块链 /数字藏品

艺术作品是人类文化的瑰宝,而艺术平台则是连接艺术家与观众的桥梁。如何开发一款独一无二的艺术平台,既要满足专业艺术作品展示的要求,又要提供深度思考的空间,这是我们所面临的挑战。本文将从专业性、思考深度和逻辑性等多个方面…

2023年高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…

ELK高级搜索(二)

文章目录 7.Java api 文档管理7.1 es技术特点7.2 获取数据7.3 文档查询7.4 文档新增7.5 文档修改7.6 文档删除7.7 文档bulk 8.图解es内部机制8.1 es分布式基础8.2 分片shard、副本replica8.3 单node环境创建index8.4 多node环境replica shard8.5 横向扩容…

strstr函数

目录 函数介绍: 函数分析: ​使用案例: 函数介绍: 返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。 匹配过程不包括终止空字符,但它到此为止。 …

【Cortex-M3权威指南】学习笔记2 - 指令集

目录 指令集汇编语言基础UAL 近距离检视指令数据传输数据处理子程呼叫与无条件跳转指令标志位与条件转移指令隔离指令饱和运算 CM3 中新引入指令MRS\MSRIF-THENCBZ/CBNZSDIV/UDIVREV RBITSXTBTBB,TBH 指令集 汇编语言基础 一条简单的汇编指令格式(注释使用一个分号…

界面组件DevExpress Reporting——增强的SQL和实体框架数据源引入

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 本文总结了v23.1中针对DevExpress报表和BI Das…

远程调试环境配置

利用vscode的插件把远程连接调试php转化为本地调试php,通讯从php xdebug通讯变成vscode通讯 1.在vscode中安装插件 2.安装对应PHP版本的xdebug xdebug版本兼容参考https://xdebug.org/docs/compat#versions xdebug安装教程1https://blog.csdn.net/song634/article/…

核辐射对生物的影响

目录 1.什么是核辐射 2.核辐射的危害 3.核辐射对环境造成的影响 4.核辐射的影响会持续多长时间 1.什么是核辐射 核辐射是指自然界或人工产生的高能粒子或电磁波的放射性能量。当原子核不稳定时,会发生放射性衰变,释放出核辐射。 核辐射主要分为三种类…

免费图床配置:PicGo + Github + jsDelivr

免费图床配置:PicGo Github jsDelivr 前言PicGo Github配置过程jsdelivr加速踩坑注意事项参考资料 觉得文章有收获,欢迎关注公众号鼓励一下作者呀~ 在学习的过程中,也搜集了一些量化、技术的视频及书籍资源,欢迎大家关注公众号…

秒杀系统的业务流程以及优化方案(实现异步秒杀)

先看基本的业务流程 那么我们可以看到整个流程都是一个线程来完成的,这样的话耗时还是很长的,那么可不可以采用多线程去实现呢? 首先我们要思考怎么对业务进行拆分,可以想象一个我们去饭店点餐,会有前台接待&#xff…

python高频面试题

在D盘根目录下创建一个文本文件test.txt,并向其中写入字符串hello world # 方法1: file_test open(./output/a.txt,w,encodingutf8) file_test.write(hello world) file_test.close()# 方法2: 该方式会在不需要使用该文件的时候自动关闭, 不需要手动close关闭资源…

Kafka面试

文章内容转自: 华仔聊技术(Kafka 面试连环炮) 目录 一.初级 1.Kafka核心组件图 2.在 Kafka 中 Zookeeper 作用是什么? 3.生产者有哪些发消息的模式? 4.Kafka 如何合理设置分区数,越多越好吗? Kafka 如何合理设置分区数 分区设置越多越好吗? 5.如何保证 Kafka 中的…

【后端】Core框架版本和发布时间以及.net 6.0启动文件的结构

2023年,第35周,第1篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! .NET Core 是一个跨平台的开源框架,用于构建现代化的应用程序。它在不同版本中有一些重要的区别和发布时间 目录 一、Core版本和…

爬虫:绕过5秒盾Cloudflare和DDoS-GUARD

本文章仅供技术研究参考&#xff0c;勿做它用&#xff01; 5秒盾的特点 <title>Just a moment...</title> 返回的页面中不是目标数据&#xff0c;而是包含上面的代码&#xff1a;Just a moment... 或者第一次打开网页的时候&#xff1a; 这几个特征就是被Cloud…

【QT】绘制旋转等待

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 程序中经常会遇到耗时的操作,需要提供等待的窗口,防止用户多次点击造成卡顿等问题。本文分享旋转等待技术,希望对各位小伙伴有所帮助!结果如下: