• 【Autosar 存储栈Memery Stack 3.存储读写流程的要求与时序】


    了解本章博客之前,首先要了解一下内容

    1.了解NVM的作用,
    2.其次是NvRam Block的种类,
    3.Autosar中NV数据的存储主要包括片内与片外存储

    这些内容前面的两篇博客都有讲解链接: 【Autosar 存储栈Memery Stack 1.NVM Block的了解】
    链接: 【Autosar 存储栈Memery Stack 2.EepRom与DFlash擦写的不同 】

    1.Autosar对RAM状态基本概念

    RAM状态转换说明
    1)上电最初状态:UNINITIALIZED
    2)初始化后(NvM_Init):INVALID / UNCHANGED
    3)NvM_ReadAll后更新:VALID/UNCHANGED,在这种状态下,WriteAll是不允许的
    4)调用NvM_SetRamBlockStatus()可以设置RAM状态:
    参数为true, VALID / CHANGED
    参数为false,INVALID / UNCHANGED
    在这里插入图片描述

    5)出现CRC错误:INVALID
    6)通过隐式或显式错误恢复机制改变,恢复之后:VALID / CHANGED,此时RAM的内容与NVRAM中的内容不同
    7)成功将RAM中数据复制到NVRAM中:valid/unmodified

    各状态条件
    1)VALID / UNCHANGED
    此状态RAM块的内容与相应的NV块的内容相同,或者app应用已访问了RAM,改变还没有体现出来。
    进入此状态,最少满足下面一个条件:

    NvM_ReadAll() 读block成功
    NvM_ReadBlock成功完成block读操作
    NvM_WriteBlock 成功完成block写操作
    NvM_WriteAll() 写block成功
    2)VALID / CHANGED
    此状态RAM block的内容可能与相应的NV block中的内容不同。
    进入此状态,最少满足下面一个条件:

    调用NvM_SetRamBlockStatus 参数为true
    NvM_WriteBlock is called for the block
    NvM_WriteAll will also process the block
    NvM_ReadBlock called for the block gives default data
    NvM_RestoreBlockDefaults成功完成
    NvM_ReadAll gives default data when processign the block
    NvM_ValidateAll processed successfully the block
    3) INVALID / UNCHANGED
    此状态下NV block 数据是无效的,进入此状态,最少满足下面一个条件:

    调用NvM_SetRamBlockStatus 参数为false
    NvM_ReadBlock调用返回无效,或者数据错误,或者错误的staticID
    NvM_WriteBlock finished non-successfully for the block
    NvM_WriteAll non-successful write for the block
    NvM_InvalidateNvBlock finished successfully for the block
    NvM_EraseNvBlock finished successfully for the block

    2.NvM数据操作类型介绍

    NvM在使用的时候需要BSW的NvM进行配置,对数据的操作中在APP可以使用两种类型的模式,可以定义一个应用层的Nv Component和内置的NvData Inteface实现,在Nv Component中会自动关联到底层的NvM中定义的Block,在APP也可以采用CS接口直接调用NvM的服务接口。对于数据的操作分为周期写下电写立刻写三种。

    1.周期写
    一般很少使用该功能,无论是EEPROM还是内部的Dflash都有一定的刷写次数的限制。在Nv Component中需要配置对应的周期触发函数;调用Rte_Write函数的时候会将数据存储的Flag设置为TRUE;周期到了触发NvM_WriteBlock操作,同时清除存储标志;在NvM_MainFunction进行后续的操作。

    在这里插入图片描述
    2.下电写

    多数NVM相关的数据都是在下电的时候进行数据的存储,在BswM的Shutdown阶段调用WriteAll实现该功能

    调用Rte_Write的时候会将存储Flag设置,同时设置对应的Evet Flag为TRUE,此时激活对应的函数NvM_SetRamBlockStatus设置变化位,以便执行下电的时候存储;在BswM执行下电的时候,调用NvM_WriteAll进行所有数据的下电存储。

    在这里插入图片描述
    3.立刻写

    对于一些重要的改变的数据,根据情况在数据发生重要变化的时候需要立马存储。在调用Rte_Write的时候,数据会存储到NV Block中,同时会把Direct Flag设置为TRUE,此时的触发Event Flag被设置为TRUE;此时由于Event的Flag被设置了,作为一个触发源会去激活相应的Task;

    在这里插入图片描述
    在这里插入图片描述

    3.NVM配置简介

    在NvM的配置中主要包括BSW层NvM的Descriptor配置、APP层Nv Coponent中的Block配置相关的属性和NvData Interface配置。

    01 NvM的Descriptor定义
    NvM的Descriptor定义操作使用的Block Descriptor(主要定义 Block的ID、Length、CRC校验、优先级等)。
    在这里插入图片描述
    02 NvData Interface连接
    在Nv Component中定义NvData Interface,在SWC中同样定义NvData Interface,将SWC的NvData Interface与Nv Component的NvData Interface做Mapping。
    在这里插入图片描述
    03 Nv Component的接口属性
    Nv Component的接口属性定义主要包括下面参数。
    在这里插入图片描述

  • 相关阅读:
    L54.linux命令每日一练 -- 第八章 Linux磁盘与文件系统管理命令 -- umount和df
    【无标题(PC+WAP)花卉租赁盆栽绿植类pbootcms站模板
    webpack5零基础入门-7webpack修改输出文件目录
    使用nvm-windows在Windows下轻松管理多个Node.js版本
    数据链路层-差错检验
    安装tldr
    vue3 + vue-cli3/4配置svg文件的全局使用
    【SpringCloud】04 网关springcloud gateway
    使用kubekey部署k8s集群和kubesphere、在已有k8s集群上部署kubesphere
    第十章《日期与时间》第7节:ZonedDateTime与OffsetDateTime
  • 原文地址:https://blog.csdn.net/qq_43620805/article/details/126192075