[4.3]-AutoSAR零基础学习-Bsw-NvM学习 <上>
目录
1 AutoSAR Memory Stack
1.1 内存栈结构
1.2 NV 数据的存储方式
1.3 NV数据的读写
2 NvM功能介绍
2.1 NvM与其他模块的关系
2.2 NvM数据操作block
2.2.1 NV Block
2.2.2 NV ROM
2.2.3 Administrative Block
2.3 NvM数据操作类型
2.3.1 周期写
2.3.2 下电写
2.3.3 立刻写
2.4 NvM数据操作同步机制
2.4.1 隐式同步
2.4.2 显式同步
AutoSAR的架构,大家已经很熟悉了,无非就是APPL/RTE/BSW/MCAL这几层。
从架构纵向来说,autoSAR对BSW的功能划分也十分清晰,主要有通信栈、内存栈、CDD、IO操作、系统服务、信息安全的相关协议栈。如下图
接下来,我们将对BSW中内存栈的管理模块(NvM)进行梳理。
1 AutoSAR Memory Stack
1.1 内存栈结构
在内存栈中包含服务层(NvM)、抽象层(MemIf、EA、EEP、Fee)、MCAL(Fls、SPI等)几个模块。
1.2 NV 数据的存储方式
AutoSAR中对NV数据的存储主要包括片内存储和外部存储两种方式。
片内存储:是用芯片内部的DFLASH进行数据存储;
外部存储:是通过外部EEPROM进行存储,一般调用SPI、IIC等方式外挂EEPROM芯片。
1.3 NV数据的读写
NvM:服务层)主要提供抽象数据存储(不是真实的写),在上电读取/下电存储数据,支持Immediately存储数据,将NV data在ROM和RAM之间建立关联;
MemIf:抽象层)实现存储数据Block在内部Flash或者外部EEP的分离操作;
FEE:实现对Flash的数据Block的抽象和动态数据的Layout;
Flash Driver:提供操作Flash的接口;
EA:定义外部EEPROM的存储抽象和数据的Layout;
EEP:提供外部EEPROM的操作接口和驱动。
2 NvM功能介绍
NvM模块负责管理非易失性存储,从非易失性内存中读写数据。在系统启动和关闭阶段,同步应用程序RAM区的数据。
2.1 NvM与其他模块的关系
提供了三种Block的管理类型(Native、Redundant、DataSet)
支持16bit和32bit的CRC校验
支持数据操作的优先级机制,支持Immediately写操作
给APP提供服务接口,NV Data类型的数据接口在APP层可以直接操作
NvM与APP的同步机制
用于DCM诊断的数据操作
支持操作数据读写操作的完成以及错误的回调通知
可以配置的ID处理
2.2 NvM数据操作block
NvM中对数据的操作一般叫做Basic storage objects,是NvM中存储的最小单元,在NvM的概念中主要包括下面四种操作实体。
2.2.1 NV Block
一般包含了用户定义的数据,其中相关的header以及CRC作为可选项使用。NV RAM一般和NV Block对应,实现数据到NV Block的读写操作,在空间分配中可以不用考虑NV RAM的内存分配地址。NV RAM数据会被分配到一个SWC或者BSW模块。
2.2.2 NV ROM
数据存在DFlash或者外部的EEPROM中,在程序执行中数据不会改变,在空的或者破坏的ROM中为默认的数据。
2.2.3 Administrative Block
NV RAM中必须使用的,包含了DataSet类型的NvM数据管理相关的NV RAM Block的属性、状态以及错误信息,能管理NV Block的写保护,以及上次数据操作的错误以及状态信息。
2.3 NvM数据操作类型
三种类型,分别是Native NVRAM block、redundant NVRAM block、Dataset NVRAM block。
NvM在使用的时候需要BSW的NvM进行配置,对数据的操作中在APP可以使用两种类型的模式,可以定义一个应用层的Nv Component和内置的NvData Inteface实现,在Nv Component中会自动关联到底层的NvM中定义的Block,在APP也可以采用CS接口直接调用NvM的服务接口。对于数据的操作分为周期写、下电写、立刻写三种。
2.3.1 周期写
很少使用该功能,无论是EEPROM还是内部的Dflash都有一定的刷写次数的限制。在Nv Component中需要配置对应的周期触发函数;调用Rte_Write函数的时候会将数据存储的Flag设置为TRUE;周期到了触发NvM_WriteBlock操作,同时清除存储标志;在NvM_MainFunction进行后续的操作。
2.3.2 下电写
多数NVM相关的数据都是在下电的时候进行数据的存储,在BswM的Shutdown阶段调用WriteAll实现该功能。
在Nv Component中需要配置对应的ShutDown存储方式;调用NvM_SetRamBlockStatus通知Rte表示数据发生了变化在下电的时候要存储;调用Rte_Write的时候会将存储Flag设置,同时设置对应的Evet Flag为TRUE,此时激活对应的函数NvM_SetRamBlockStatus设置变化位,以便执行下电的时候存储;在BswM执行下电的时候,调用NvM_WriteAll进行所有数据的下电存储。
2.3.3 立刻写
对于一些重要的改变的数据,根据情况在数据发生重要变化的时候需要立马存储。在调用Rte_Write的时候,数据会存储到NV Block中,同时会把Direct Flag设置为TRUE,此时的触发Event Flag被设置为TRUE;此时由于Event的Flag被设置了,作为一个触发源会去激活相应的Task。
在Task中调用Nvm_WriteBlock的函数,将数据存储,此时会清除Direct Flag和Event Flag;NvM_WriteBlock的传递参数为NULL,一般需要一个永久的RAM(Global的变量.Mirror);在NvM的MainFunction查看Mirror的状态;NvMWriteRamBlockToNvM调用将数据放到NvM中,调用EA或者FEE的接口函数,存储到EEPROM或者FLASH中。
2.4 NvM数据操作同步机制
2.4.1 隐式同步
隐式同步中APP中直接调用NvM的接口对数据进行操作,此种方式不推荐使用共享的RAM Block操作,在NVM中确保RAM Block数据的一致性(主要同步CRC机制实现)。
2.4.2 显式同步
显式同步NVM定义了一个RAM Mirror用于和APP进行数据交换,APP调用NvM_WriteBlock的时候写数据到RAM Block中,此时数据仍然可以被修改,因为数据还没有写到最终的Nv Block,调用NVM数据操作NvMWriteRamBlockToNvM的时候数据被Copy到内部的Mirror中,最后将数据写到Nv Block。
NVM在读的时候调用API从NvM_ReadBlock读取数据,在NvM调用了NvMReadRamBlockFromNvM后数据才真正的从RAM Mirror中Copy到了RAM Block。NvM提供了双向的控制Callback的路由,实现APP数据的传输。
采用了Mirror机制更好的防止数据一致性破坏,但是需要额外的RAM开销。
=>总目录<=
[4.3]-AutoSAR零基础学习-Bsw-NvM学习 <上>相关推荐
- [0.0]-AutoSAR零基础学习-专栏介绍
前言 年前公司业务变动,博主有幸参加了车载相关的开发任务,负责cdd中的某个模块,由于之前没有接触过AutoSAR,项目前期比较难受,目前项目也接近尾声了,打算把这一路的学习过程记录下来,和大家一 ...
- python自学需要哪些基础知识-零基础学Python应该学习哪些入门知识及学习步骤安排...
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- python编程零基础-编程零基础应当如何开始学习 Python?
看到问题关于<编程零基础应当如何开始学习 Python?>,其实是在Python未来会很火的一个基础条件下,但是我觉得光光说学习Pyhon这件事,你首先得明白三件事: --如何判断你学习编 ...
- python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- 编程软件python怎样开始学-编程零基础应当如何开始学习 Python?
编程零基础应当如何开始学习Python 我觉得每个人学习新东西之前脑海里应该有个大致的地图和路径 比如学习编程,首先脑海里要比较清晰的思考寻找过下面几个问题的答案什么是编程 为什么学编程 编程可以干什 ...
- c语言python零基础教学_编程零基础应当如何开始学习 Python?
目录 1.学习了解Python的基础知识. 2.安装Python,边学边练. 3.收集资料,作为练习指引. 4.确定学习方向,项目练手. 5.学习过程中要注意多练.多问! 编程零基础选择Python开 ...
- 零基础快速入门web学习路线(含视频教程)
下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...
- 学python需要什么基础-零基础学Python应该学习哪些入门知识及学习步骤安排
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- 零基础学HTML5的学习路线完整版
如今很多学习HTML5开发的同学都是一些零基础或者转行来学习的,对HTML5都不是很了解,所以想进入这一行业那么就得多去了解一下这个行业,只有了解清楚才能更好的开始学习. 第一:基础的重要性 无论做什 ...
- c语言零基础自学,c语言零基础入门 该如何学习
原标题:c语言零基础入门 该如何学习 零基础学习C语言该从哪里开始学习呢?在学习之前你可以先问自己,为什么我要学C语言?是为了应付考试,还是为了应聘,还是为了提高自己的编程能力.如果你以后想要长期致 ...
最新文章
- C语言中常用计时方法总结
- L1-018 大笨钟
- Spring Boot的TestRestTemplate使用
- 计算机课设容易挂吗,数学差的学生避开这4大专业,挂科是常态,每年都有学生不能毕业...
- toad for mysql 乱码_Toad for mysql乱码解决办法
- Git的commit your changes or stash them before you can merge
- 计算机学报论文字数要求,常见EI学报综述类文章分析
- After Effect CC 2019插件
- python复数类型的虚部通过什么表示_在python中复数怎么表示
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day8】 —— Redis2
- C++ 中 _T 含义及用途
- [教程]教你如何制作彩色的3D打印Groot
- CAD中怎么画指北针?CAD画指北针教程
- 基于约束的装配设计【CadQuery】
- 每日新闻 | 董明珠与雷军开启新赌约:10亿不要了,再赌5年
- 异常练习(模拟不满18岁不可进入网吧)
- [可解释机器学习]Task03:[算法]CAM
- MacBook如何取消开盖自动开机
- Python把数据从Word(.docx)中读出来写入到Excel(.xlsx)中
- Unity打印FPS
热门文章
- mysql超类_在MySQL Workbench图中表示超类/子类(或超类型...
- 【毅力挑战】PCIe 每日一问一答(2022.05 已归档)
- MySQL DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci utf8mb4_bin utf8mb4_general_ci
- word转pdf转换器的多种转换功能
- 菜鸟安装Nodejs环境
- 元宇宙体育俱乐部 #kodeclubs 基于threejs的网页版虚拟空间
- springboot2.0+thymeleaf技术-入门
- EMBOSS: getorf
- pycinrad学习入门笔记,数据为雷达新旧格式基数据、pup产品数据
- Linux系统如何操作关机或重启180.188.22.X