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
    +关注

    关注

    11

    文章

    406

    浏览量

    23754
  • 车载系统
    +关注

    关注

    1

    文章

    142

    浏览量

    27904

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用S32K344_0_2_55.0版本HSE(fullmem)无法进行re-format the NVM and RAM catalogs是怎么回事?

    S32K344芯片上安装S32K344_0_2_55.0版本HSE固件后,HSE固件版本号可以正确读取出来。但是进行re-format the NVM and RAM catalogs的操作
    发表于 04-20 07:41

    是否有任何可用于多核(非 Autosar)S32K388示例?

    我正在尝试S32K388多核,是否有任何可用于多核(非 Autosar)S32K388示例?
    发表于 04-14 08:49

    ETAS如何打破AUTOSAR的固有偏见

    AUTOSAR Classic 常被诟病为复杂且缓慢——但这种看法是否合理?ETAS 首席产品经理 Darren Buttle 《Automotive World》阐述了 RTA-CAR 如何直
    的头像 发表于 04-11 09:10 462次阅读

    RT-Thread亮相AUTOSAR中国日:国产操作系统与AUTOSAR标准融合的产业化实践

    近日,2026第七届软件定义汽车论坛暨AUTOSAR中国日上,RT-Thread创始人兼睿赛德CEO熊谱翔先生发表题为《赋能SDV新生态:RT-ThreadRTOS与AUTOSAR融合的产业化路径
    的头像 发表于 03-23 19:24 479次阅读
    RT-Thread亮相<b class='flag-5'>AUTOSAR</b>中国日:国产操作系统与<b class='flag-5'>AUTOSAR</b>标准融合的产业化实践

    S9KEAZ64有没有官方的MCAL文件以及有没有全套的AUTOSAR开发工具链?

    使用NXP S9KEAZ64AMLH开发一个AUTOSAR + ISO26262的项目,但是没有搜索到对应的MCAL文件,想知道官方是否有对应的MCAL文件 还有是否有AUTOSAR开发全套工具链,包括SWC+ECU开发,如果有的话,帮忙说明一下,谢谢。
    发表于 03-19 07:12

    i.MX93 ELE 密钥存储持久密钥生成 NVM 错误怎么办?

    ”,评级为“HSM_NVM_ERROR”。 这与仅生成持久密钥失败的事实一致:生成临时密钥工作正常。 因此,我的问题是:为什么 ELE 抱怨 NVM 错误? 我是否缺少确保 ELE
    发表于 03-18 07:04

    PG-1000脉冲发生器非易失性存储器(NVM)及MOSFET测试的应用

    )主流NVM类型 类型结构与原理 STT-MRAM核心为磁隧道结(MTJ),含两层铁磁体与中间绝缘体。电流流经参考层形成极化电流,通过自旋转移矩改变自由层磁矩方向,以不同导电性存储数据 PCM以硫系
    发表于 03-09 14:40

    光庭信息荣获AUTOSAR中国中心2025年度优秀贡献奖

    12月18日,“AUTOSAR中国中心2025年度奖项颁奖典礼暨答谢晚宴”在上海成功举办。继去年荣获“2024年度特别贡献奖”后,光庭信息凭借AUTOSAR组织及中国区域发展的持续
    的头像 发表于 12-26 13:43 760次阅读

    RT-Thread睿赛德正式加入AUTOSAR 组织,成为开发合作伙伴!

    近日,AUTOSAR宣布RT-Thread睿赛德已正式加入AUTOSAR组织成为开发合作伙伴!AUTOSAR组织AUTOSAR组织的本质是一个开发合作伙伴关系。作为全球汽车开放式系统架
    的头像 发表于 09-04 17:07 1490次阅读
    RT-Thread睿赛德正式加入<b class='flag-5'>AUTOSAR</b> 组织,成为开发合作伙伴!

    求助,关于TLE9883 user_nvm_sector_erase的问题求解

    我正在尝试测试用于擦除和写入闪存不同部分的 NVM API 函数。我从 FLASH0 运行代码。当我尝试使用 user_nvm_page_erase 函数并传入 0x12002000( FLASH1
    发表于 08-15 06:05

    从手写代码到AUTOSAR工具链:J1939Tp应用篇

    J1939Tp是我学习AUTOSAR CP诸多BSW模块的起点,其分层架构完美体现了AUTOSAR规范的精髓,掌握J1939Tp有助于深入理解通信(COM)相关模块的程序执行过程。
    的头像 发表于 07-10 16:37 5565次阅读
    从手写代码到<b class='flag-5'>AUTOSAR</b>工具链:J1939Tp应用篇

    Vector PREEvision 10.19支持AUTOSAR 24-11版本

    PREEvision 10.19现已支持最新的AUTOSAR版本,并通过时序图简化行为描述。 PREEvision 10.19:支持AUTOSAR 24-11与改进的时序图 PREEvision
    的头像 发表于 06-14 11:47 1160次阅读

    东软睿驰亮相第16届AUTOSAR开放大会

    此前,5月27日-28日,第16届AUTOSAR开放大会(16th AUTOSAR Open Conference)比利时布鲁日成功召开,本届大会以“AUTOSAR solution
    的头像 发表于 06-06 16:07 1760次阅读

    光庭信息亮相第16届AUTOSAR开放大会

    此前,当地时间5月27日至28日,第16届AUTOSAR开放大会 (AUTOSAR Open Conference)比利时布鲁日会议中心隆重举行。
    的头像 发表于 05-30 15:09 1061次阅读

    MCU存储器层次结构解析

           MCU的存储器层次结构通过整合不同性能与功能的存储单元,优化系统效率并满足多样化场景需求。其核心架构可分为以下层次: 一、寄存器层(最高速) 定位‌:集成于CPU内核
    的头像 发表于 05-09 10:21 923次阅读