0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NvM在AUTOSAR中的层次结构

嵌入式软件实战派 来源:CSDN 作者:CSDN 2022-04-21 10:47 次阅读

AUTOSAR中的NvM看起来挺难的,特别是在配置的时候,一堆参数,都不知道是干什么用的。想去研究它,却不知如何下手。

其实吧,AUTOSAR的官方文档讲的挺详细的,但是内容很多,网上有很多文章对其进行解读,很多人没时间也不想细读它

本文打算换个讨论,不再累述其内容细节了,而通过图解的方式,将NvM重要特点提取出来讲解,方便理解,也方便记忆。

1.NvM在AUTOSAR中的层次结构

AUTOSAR中有个Memory的处理,在架构中是这样的20305a44-bfae-11ec-bce3-dac502259ad0.png分类三层,分别是Memory Service(NvM)、Memory Hardware Abstraction(Memory If和Fee/Ea)和Memory Driver(Fls/Eep驱动),单独拎出来就是这样的2040c5be-bfae-11ec-bce3-dac502259ad0.png 这部分在架构中有这样的接口关系205145d8-bfae-11ec-bce3-dac502259ad0.png

回到Nvm,这个NVM即Non-VolatileRAM Manager (NVRAM Manager),用于管理存储于各类non-volatile memory(如EEPROM/Flash等)的数据。

NVM在AUTOSAR中是独立于硬件的,通过底层接口访问外部EEPROM或模拟成EEPROM的DataFlash。为了适用于所有的车载系统,其具有高度可扩展性和可靠性。

2.Memory抽象层空间寻址策略

AUTOSAR中的Memory是怎么寻址的呢?

其实,MemoryAbstraction Interface为底层EEPROM/FEE提供32位地址空间,像这样

20652260-bfae-11ec-bce3-dac502259ad0.png

这个虚拟的逻辑地址是包含着一些信息的,如NV Block number和Dataset index,还有Block address offset等,他们的关系可以通过以下公式来理解

FEE/EA_BLOCK_NUMBER=(NvMNvBlockBaseNumber << NvMDatasetSelectionBits) + DataIndex

举个例子,假如NVM_DATASET_SELECTION_BITS配置为4bits,那么就有14bits留给blocknumber,因此可以分最大有16个dataset。

207606e8-bfae-11ec-bce3-dac502259ad0.png

3.NvM Basic Storage Object

以上提到的Dataset、NV Block等概念,是不是容易混淆,也不清楚是干什么用的?好了,下面做个汇总和介绍。

名称

描述

Basic Storage Object

Basic Storage Object是一个最小的NVRAM block,多个Basic Storage Objects可以组成一个NVRAM Block

NVRAM Block

NVRAM Block是管理和存储 NV Block所需的整个结构

NV data

要存储在Non-Volatile memory的数据

Block Management Type

这个是NVRAM Block的类型,它取决于强制/可选Basic Storage ObjectNVRAM Block的(可配置的)单独组成以及该 NVRAM 块的后续处理。

RAM Block

属于Basic Storage Object,它是NVRAM Block的一部分,常驻于RAM空间。

ROM Block

属于Basic Storage Object,它是NVRAM Block的一部分(可选的),常驻于ROM空间。

NV Block

属于Basic Storage Object,它是NVRAM Block的一部分(必选的),常驻于NV空间。

NV Block Header

如果Static Block IDenable的,这个作为附加信息包含在NV Block中。

Administrative Block

属于Basic Storage Object,它常驻于RAM,是NVRAM Block必选部分。

用一个图来表达就是这样的

208a8bd6-bfae-11ec-bce3-dac502259ad0.png

图上得这几个block,用图示来看可能会更容易理解

20a541b0-bfae-11ec-bce3-dac502259ad0.png

4.NvM Block Management Type

NVM在AUTOSAR中的功能是挺完善的,要满足车载系统的各种需求,例如数据块错了怎么办等等,都考虑周全。

NvM支持三种类型实现:Native、Redundant和Dataset。那么这三种类型是怎样的呢?

我做了个表,他们包含了哪几种block

NV Block

RAM Block

ROM Block

Administrator Block

Native

1

1

0..1

1

Redundant

2

1

0..1

1

Dataset

1..255

1

0..n

1

  1. Native
    这种最简单,平时大多情况下,我们用的就是这种

    它包含就简单的NV Block,其他如Header和CRC都是随意可选配置。

    20bfbf5e-bfae-11ec-bce3-dac502259ad0.png

  2. Redundant

    这种就复杂一点点,可以简单理解为双备份,意思是,如有一份数据错了,可以用备份的那块。

    20cfeb7c-bfae-11ec-bce3-dac502259ad0.png

  3. Dataset

Dataset呢,这个不是多备份哈,而是针对不同配置做了对应。例如一个车系统平台有很多种配置,但有想集成在同一个软件种,那么就有很多个对应的配置数据,在运行的时候根据配置参数选择哪份数据使用。

20e7470e-bfae-11ec-bce3-dac502259ad0.png

5.NVRAM Manager API 配置类

讲到NvM的API,其实NvM API分三类:

Class3:所有指定的API调用都可用,最多支持功能。

Class2:有一组中间API调用可用。

Class1:特别是对于硬件资源非常有限的匹配系统,此API配置类仅提供最少的一组

Class 3 包含下面这些API:Type 1:- NvM_SetDataIndex(...)- NvM_GetDataIndex(...)- NvM_SetBlockProtection(...)- NvM_GetErrorStatus(...)- NvM_SetRamBlockStatus(...)- NvM_SetBlockLockStatusType 2:- NvM_ReadBlock(...)- NvM_WriteBlock(...)- NvM_RestoreBlockDefaults(...)- NvM_EraseNvBlock(...)- NvM_InvalidateNvBlock(...)- NvM_CancelJobs(…)- NvM_ReadPRAMBlock(...)- NvM_WritePRAMBlock(...)- NvM_RestorePRAMBlockDefaults(...)Type 3:- NvM_ReadAll(...)- NvM_WriteAll(...)- NvM_CancelWriteAll(...)- NvM_ValidateAll(...)Type 4:- NvM_Init(...)Class 2 包含下面这些API:Type 1:- NvM_SetDataIndex(...)- NvM_GetDataIndex(...)- NvM_GetErrorStatus(...)- NvM_SetRamBlockStatus(...)- NvM_SetBlockLockStatusType 2:- NvM_ReadBlock(...)- NvM_WriteBlock(...)- NvM_RestoreBlockDefaults(...)- NvM_CancelJobs(…)- NvM_ReadPRAMBlock(...)- NvM_WritePRAMBlock(...)- NvM_RestorePRAMBlockDefaults(...)Type 3:- NvM_ReadAll(...)- NvM_WriteAll(...)- NvM_CancelWriteAll(...)- NvM_ValidatedAll(...) Type 4:- NvM_Init(...)
Class 1 包含下面这些API:Type 1:- NvM_GetErrorStatus(...)- NvM_SetRamBlockStatus(...)- NvM_SetBlockLockStatusType 2:- --Type 3:- NvM_ReadAll(...)- NvM_WriteAll(...)- NvM_CancelWriteAll(...)Type 4:- NvM_Init(...)

也许你会好奇,上面提到的Type是啥?

其实是根据功能分类而已,可以参考下表内容

Request Types

Characteristics of Request Types

Type 1:

- NvM_SetDataIndex (...)

- NvM_GetDataIndex (...)

- NvM_SetBlockProtection (...)

- NvM_GetErrorStatus(...)

- NvM_SetRamBlockStatus(...)

n同步请求

n作用于一个RAM Block

n适用于所有SWC

Type 2:

- NvM_ReadBlock(...)

- NvM_WriteBlock(...)

- NvM_RestoreBlockDefaults(...)

- NvM_EraseNvBlock(...)

- NvM_InvalidateNvBlock(...)

- NvM_CancelJobs(…)

- NvM_ReadPRAMBlock(...)

- NvM_WritePRAMBlock(...)

- NvM_RestorePRAMBlockDefaults(...)

n异步请求(通过callbackpolling返回结果)

n作用于一个NVRAM Block

n通过NVRAM manager task处理

n适用于所有SWC

Type 3:

- NvM_ReadAll(...)

- NvM_WriteAll(...)

- NvM_CancelWriteAll(...)

- NvM_ValidateAll(...)

n异步请求(通过callbackpolling返回结果

n作用于具有常驻RAM dataNVRAM Block

Type 4:

- NvM_Init(...)

n同步请求

n基本初始化

n通过函数本身内部的命令接口向任务发出成功信号

6. NvM Descriptor Table

以上讲的都是一些原理或者配置上的东西,那么在软件代码上是怎么用的呢,其实用到了一个描述符表(Descriptor Table),即将所有的配置信息映射或囊括到这里面来,那么这个表是怎样的?

AUTOSAR的配置策略,要将所有和NVRAM 描述符相关的内容在配置期间生成,生成的内容包含以下信息。

SWS Item

Items

Type

ECUC_NvM_00476

NvMBlockCrcType

EcucEnumerationParamDef

ECUC_NvM_00554

NvMBlockHeaderInclude

EcucStringParamDef

ECUC_NvM_00477

NvMBlockJobPriority

EcucIntegerParamDef

ECUC_NvM_00062

NvMBlockManagementType

EcucEnumerationParamDef

ECUC_NvM_00557

NvMBlockUseAutoValidation

EcucBooleanParamDef

ECUC_NvM_00556

NvMBlockUseCRCCompMechanism

EcucBooleanParamDef

ECUC_NvM_00036

NvMBlockUseCrc

EcucBooleanParamDef

ECUC_NvM_00552

NvMBlockUseSetRamBlockStatus

EcucBooleanParamDef

ECUC_NvM_00519

NvMBlockUseSyncMechanism

EcucBooleanParamDef

ECUC_NvM_00033

NvMBlockWriteProt

EcucBooleanParamDef

ECUC_NvM_00551

NvMBswMBlockStatusInformation

EcucBooleanParamDef

ECUC_NvM_00119

NvMCalcRamBlockCrc

EcucBooleanParamDef

ECUC_NvM_00116

NvMInitBlockCallback

EcucFunctionNameDef

ECUC_NvM_00533

NvMMaxNumOfReadRetries

EcucIntegerParamDef

ECUC_NvM_00499

NvMMaxNumOfWriteRetries

EcucIntegerParamDef

ECUC_NvM_00478

NvMNvBlockBaseNumber

EcucIntegerParamDef

ECUC_NvM_00479

NvMNvBlockLength

EcucIntegerParamDef

ECUC_NvM_00480

NvMNvBlockNum

EcucIntegerParamDef

ECUC_NvM_00481

NvMNvramBlockIdentifier

EcucIntegerParamDef

ECUC_NvM_00035

NvMNvramDeviceId

EcucIntegerParamDef

ECUC_NvM_00482

NvMRamBlockDataAddress

EcucStringParamDef

ECUC_NvM_00521

NvMReadRamBlockFromNvCallback

EcucFunctionNameDef

ECUC_NvM_00483

NvMResistantToChangedSw

EcucBooleanParamDef

ECUC_NvM_00484

NvMRomBlockDataAddress

EcucStringParamDef

ECUC_NvM_00485

NvMRomBlockNum

EcucIntegerParamDef

ECUC_NvM_00117

NvMSelectBlockForReadAll

EcucBooleanParamDef

ECUC_NvM_00549

NvMSelectBlockForWriteAll

EcucBooleanParamDef

ECUC_NvM_00506

NvMSingleBlockCallback

EcucFunctionNameDef

ECUC_NvM_00532

NvMStaticBlockIDCheck

EcucBooleanParamDef

ECUC_NvM_00072

NvMWriteBlockOnce

EcucBooleanParamDef

ECUC_NvM_00520

NvMWriteRamBlockToNvCallback

EcucFunctionNameDef

ECUC_NvM_00534

NvMWriteVerification

EcucBooleanParamDef

ECUC_NvM_00538

NvMWriteVerificationDataSize

EcucIntegerParamDef

这个最好对着代码去看更好理解。

7. 总结

以上讲得内容都不是很深入,适合刚入手的小伙伴学习,我将以上内容做成了一份备查手册,方便以后看代码或者阅读文档的时候,可以直接查看,不用费神看那么多鸡肠文英语。

20ffe160-bfae-11ec-bce3-dac502259ad0.png

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AUTOSAR
    +关注

    关注

    10

    文章

    350

    浏览量

    21468
  • 车载系统
    +关注

    关注

    1

    文章

    132

    浏览量

    27093

原文标题:一图读懂AUTOSAR NvM(附pdf版文档资源)

文章出处:【微信号:embedded_sw,微信公众号:嵌入式软件实战派】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    KiCad层次原理图使用教程

    “   KiCad ,多张原理图可以形成层次结构:有一个根原理图,其他图作为根原理图或另一个子原理图的子原理图被创建。如果需要的话,原理图可以被多次包含在一个
    的头像 发表于 11-13 18:06 315次阅读
    KiCad<b class='flag-5'>层次</b>原理图使用教程

    TI SoC上集成AUTOSAR:基础知识

    电子发烧友网站提供《TI SoC上集成AUTOSAR:基础知识.pdf》资料免费下载
    发表于 10-11 11:50 0次下载
    <b class='flag-5'>在</b>TI SoC上集成<b class='flag-5'>AUTOSAR</b>:基础知识

    存储器的层次结构包括哪些

    存储器的层次结构是计算机系统中一个关键且复杂的部分,它决定了数据的存储、访问和处理效率。存储器的层次结构主要包括多个层次,每个
    的头像 发表于 09-10 14:28 391次阅读

    可扩展PMIC NVM更新指南

    电子发烧友网站提供《可扩展PMIC NVM更新指南.pdf》资料免费下载
    发表于 09-06 11:20 0次下载
    可扩展PMIC <b class='flag-5'>NVM</b>更新指南

    Vector AUTOSAR的TISCI服务器集成

    电子发烧友网站提供《Vector AUTOSAR的TISCI服务器集成.pdf》资料免费下载
    发表于 08-30 11:16 0次下载
    Vector <b class='flag-5'>AUTOSAR</b><b class='flag-5'>中</b>的TISCI服务器集成

    TPS65219 NVM编程指南

    电子发烧友网站提供《TPS65219 NVM编程指南.pdf》资料免费下载
    发表于 08-28 10:53 0次下载
    TPS65219 <b class='flag-5'>NVM</b>编程指南

    AUTOSAR MCAL驱动程序与演示程序的Libraries的驱动程序有什么不同之处?

    1.关于 AUTOSAR MCAL 驱动程序 与演示程序的 Libraries 的驱动程序 有什么不同之处? 2.AUTOSAR MCAL 驱动程序
    发表于 05-17 06:55

    OpenAI新研究:指令层次结构防御LLM攻击策略

    为了解决这个问题,这篇研究提出了一种指令层次结构(instruction hierarchy)。它明确定义了不同指令的优先级,以及当不同优先级的指令发生冲突时,LLM应该如何表现。
    发表于 04-28 10:41 293次阅读
    OpenAI新研究:指令<b class='flag-5'>层次</b><b class='flag-5'>结构</b>防御LLM攻击策略

    存储器层次结构如何解释?

    存储器层次结构可以从图片中清晰的看出来,图片中共分为六级,越向上的层次,存储器速度越快,容量更小,造价越高。
    的头像 发表于 02-19 14:03 876次阅读
    存储器<b class='flag-5'>层次</b><b class='flag-5'>结构</b>如何解释?

    浅谈存储器层次结构

    通过多级存储器的设计,存储器层次结构能够存储容量和访问速度之间找到一个平衡点。高速缓存存储器和主存储器提供了快速的访问速度,而辅助存储器则提供了大量的存储空间。
    发表于 02-19 13:54 694次阅读
    浅谈存储器<b class='flag-5'>层次</b><b class='flag-5'>结构</b>

    简述存储器的层次结构及其分层原因

    存储器的层次结构是计算机系统存储器的层次化组织,分为多个层次,每个层次具有不同的访问速度、容量
    发表于 02-05 09:46 1994次阅读

    NVM和本地\"内存定义数组(静态 /global /local)的\"关键字是什么?

    NVM 和本地\"内存定义数组(静态 /global /local)的\"关键字是什么? 还有与 32 位对齐的关键字怎么样。
    发表于 01-25 07:52

    AUTOSAR Builder—符合AUTOSAR(CPAP)的嵌入式系统设计工具

    AUTOSAR Builder是达索旗下一款基于Eclipse并使用Artop的可扩展工具套件。Artop是由AUTOSAR成员和合作伙伴共同推动的开放的AUTOSAR工具环境。它使用户能够构建自己
    的头像 发表于 01-08 18:06 528次阅读
    <b class='flag-5'>AUTOSAR</b> Builder—符合<b class='flag-5'>AUTOSAR</b>(CPAP)的嵌入式系统设计工具

    AUTOSAR架构复杂驱动设计

    复杂驱动(Complex Driver,CDD)是一种不受 AUTOSAR 标准化约束的软件实体,它可以通过 AUTOSAR 接口和/或基础软件模块 API 进行访问 AUTOSAR 组件或者被
    的头像 发表于 12-21 10:13 4215次阅读
    <b class='flag-5'>AUTOSAR</b>架构<b class='flag-5'>中</b>复杂驱动设计

    分析Autosar架构下的NVM源码

    (Non-Volatile Memory)是Autosar架构的一个重要组件,用于管理和操作非易失性存储器,以确保数据的持久性和可靠性。 NVM的实现是为了解决汽车电子系统重要数据
    的头像 发表于 12-08 13:56 1475次阅读