AUTOSAR —— NVM 1

本文根据AUTOSAR4.4(Classic Platform)(https://www.autosar.org/standards/classic-platform/classic-platform-440/)标准中的 :

AUTOSAR_SRS_MemoryServices.pdf

AUTOSAR_SWS_NVRAMManager.pdf

两篇文章整理。仅为个人理解,不当之处,还请指正,感谢!

AUTOSAR基本架构的介绍很多,可以自行搜索相关资料,比如 https://www.jianshu.com/p/cfffc1692ea2

 

言归正传,这两篇文档主要是Memory Service 层的 Requirement 和 Specification。

1 NVRAM Block

1.1 缩写

NVRAM Block是NVM manager层所定义对象。其相关的概念和基本对象包括:

Acronym:Description: 

Basic Storage Object

(本文简称BSO)

基本存储对象

A “Basic Storage Object” is the smallest entity of a NVRAM Block.
Several “Basic Storage Objects” can be used to build a NVRAM Block.
A “Basic Storage Object” can reside in different memory locations
(RAM/ROM/NV memory).

基本存储对象是NVRAM Block的最小实体。

几个BSO组成一个NVRAM Block。

BSO可以位于不同的存储器中(RAM/ROM/NV memory)

NVRAM BlockThe “NVRAM Block” is the entire structure, which is needed to administrate and to store a block of NV data.NVRAM Block是NVM层存储器的定义对象,用作管理和存储非易失性数据。
NV dataThe data to be stored in the Non-Volatile memory.要存储在NV Memory中的非易失性数据。

Block Management Type

block管理型类

Type of the NVRAM Block. It depends on the (configurable) individual composition of a NVRAM Block in chunks of different mandatory/optional Basic Storage Objects and the subsequent handling of this NVRAM block.NVRAM Block 的类型。取决于NVRAM block  的BSO构成和后续block的处理方式。
NV Block HeaderAdditional information included in the NV Block if the mechanism “Static Block ID” is enabled.如果BVRAN Block启用了 “Static Block ID”,则其中包含NV Block的附加信息。
RAM BlockThe “RAM Block” is a Basic Storage Object. It represents the part of a NVRAM Block, which resides in the RAM.
See [SRS_LIBS_08534]
BSO:RAM Block。对NVRAM Block来说是必需(mandatory)成分。
ROM BlockThe “ROM Block” is a Basic Storage Object. It represents the part of a NVRAM Block, which resides in the ROM. The “ROM Block” is an optional part of a NVRAM Block.BSO:ROM Block,位于ROM中。对NVRAM Block来说是可选(optinal)成分。
NV BlockThe “NV Block” is a Basic Storage Object. It represents the part of a NVRAM Block, which resides in the NV memory. The “NV Block” is a mandatory part of a NVRAM Block.BSO: NV Block。位于NV Memory(比如:Flash,EEPROM等)中,对NVRAM Block来说是必需(mandatory)成分。 
Administrative BlockThe “Administrative Block” is a Basic Storage Object. It resides in RAM. The Administrative Block contains any RAM data, that are necessary to manage the NVRAM block, for being able to perform processing on it and to deliver status information. The “Administrative
Block” is a mandatory part of a NVRAM Block.
BSO:Administrative Block。位于RAM中。其中包含管理NVRAM Block所必需的的RAM数据(状态信息等)。是NVRAM Block的必需(mandatory)成分。

 

1.2 BSO和NVRAM Block 之间的组织关系如图 1 所示

 

 

                                                                     图1 NVRAM 个构成(BSO)

Application(以后简称App)层的SoftWare Component(以后简称SWC)需要存储非易失性数据(NV Data)时,就使用NVM Manager 生成不同的NVRAM Block。NVRAM Block包含不同的BSO成分,每一个NVRAM Block包含哪些BSO在配置时决定,配置时每个NVRAM Block都会有一个 NVRAM block descriptor ,一旦 block descriptor 固定,则NVRAM Block的构成也就固定(fixed)了。每一个NVRAM Block都会被分配一个 Block ID,NVM模块就使用 Block ID 来选择要访问的single block。每一个NVRAM Block都可以为其配置 block management type(Native,Redundant,Dataset)。

所有地址偏移都是相对于 NVRAM block descriptor 中RAM或ROM的起始地址(这里认为是block ID,待确认)给出的。 一般认为起始地址为0。(如果需要,相应的设备驱动程序将添加设备特别定义的基址或偏移量)。

 

1.3 BSO的逻辑成分

下图展示了集中BSO的逻辑组成:

 

 

1.4 Block management types

前面提到:每一个NVRAM Block都可以为其配置 block management type(Native,Redundant,Dataset)。

NVRAM Block的管理类型有3种:

  1. native
  2. redundant
  3. dataset

每一种类型的NVRAM Block的BSO组成为:

 

1.4.1 Native NVRAM Block

Native NVRAM块是最简单的块管理类型。

1.4.2 Redundant NVRAM Block

包含2个NV block。如果一个 NV block 块被认为是无效(invalid)的(例如read fail),则会使用另一个有效的NV block 中的数据来恢复无效的 NV block(即将有效NV block 中的数据写到无效的 NV block中)。如果恢复失败,则应将该错误报告给DET(错误码为:NVM_E_LOSS_OF_REDUNDANCY)


 

1.4.3 Dataset NVRAMBlock

Dataset NVRAM Block 块中包含几个大小相同的(NV / ROM)block。 应用程序可以一次访问block中的任意一个。

(原文:The Dataset NVRAM block is an array of equally sized data blocks (NV/ROM). The application can at one time access exactly one of these elements.)

[SWS_NvM_00144] dataset 的 位置 index 在Administrative block 通过一个单独的字段来标识。
[SWS_NvM_00374] NNvM模块应能读取daset中所有的NV块。
[SWS_NvM_00375] 当且仅当禁用 write protection 时,NvM模块才能write所有的NV块。
[SWS_NvM_00146] 如果dataset NVRAM block配置了 ROM block,则index range要能涵盖ROM,即通过index 要能索引NV block 和 ROM block 。
[SWS_NvM_00376] NvM模块应只能读取ROM block(default datasets)。
[SWS_NvM_00377] NvM模块应将 write ROM block 视为 write to a protected NV block。
[SWS_NvM_00444] Dataset NVRAM Block中的 (NV + ROM)block 总数必须在1..255的范围内。
[SWS_NvM_00445]⌈在可选ROM块的情况下,索引从0到NvMNvBlockNum-1的数据区域表示NV块在NV存储器中的CRC。索引从NvMNvBlockNum到NvMNvBlockNum + NvMRomBlockNum-1的数据区域表示ROM块。

[SWS_NvM_00445]   Dataset NVRAM Block中的 (NV + ROM块) 的index 关系图如下图:

先是NV block,然后是ROM block


1.5 NVRAM Manager API configuration classes

NVM 模块提供哪些API AUTOSAR 中也做了规定。但是为了适应不同的硬件资源,NVM模块可以配置哪些API在当前的环境中是可用的。为此,NVM模块中提供了一个 API configuration classes 的配置项,其有三个参数,对应不同的API范围:

—— API configuration class 3: 所有定义的API都可以使用;
—— API configuration class 2: 部分API可用,可用API的中间集合.
—— API configuration class 1: 最少的API可用,在任何情况下都需要的API最小集合。适用于硬件资源非常有限系统。

NvM module 将只包含用的到的代码,即使用宏编译开关根据配置项来决定相关的代码是否使用。

Configuration ClassNoclass3class2class1Characteristics of Request Types
type11  NvM_SetDataIndex(...)  NvM_SetDataIndex(...)  NvM_GetErrorStatus(...)  synchronous request
2  NvM_GetDataIndex(...)  NvM_GetDataIndex(...)  NvM_SetRamBlockStatus(...)  affects one RAM block
3  NvM_SetBlockProtection(...)  NvM_GetErrorStatus(...)  NvM_SetBlockLockStatus(...)  available for all SW Cs
4  NvM_GetErrorStatus(...)  NvM_SetRamBlockStatus(...)  
5  NvM_SetRamBlockStatus(...)  NvM_SetBlockLockStatus(...)  
6  NvM_SetBlockLockStatus()   
type21  NvM_ReadBlock(...)  NvM_ReadBlock(...) / asynchronous request (result via callback or polling)
2  NvM_WriteBlock(...)  NvM_WriteBlock(...)affects one NVRAM block
3  NvM_RestoreBlockDefaults(...)  NvM_RestoreBlockDefaults(...)handled by NVRAM manager task via request list
4  NvM_EraseNvBlock(...)  NvM_CancelJobs(…)available for all SW Cs
5  NvM_InvalidateNvBlock(...)  NvM_ReadPRAMBlock(...) 
6  NvM_CancelJobs(…)  NvM_WritePRAMBlock(...) 
7  NvM_ReadPRAMBlock(...)  NvM_RestorePRAMBlockDefaults(...) 
8  NvM_WritePRAMBlock(...)  
9  NvM_RestorePRAMBlockDefaults(...)  
type31  NvM_ReadAll(...)  NvM_ReadAll(...)  NvM_ReadAll(...)asynchronous request (result via callback or polling)
2  NvM_WriteAll(...)  NvM_WriteAll(...)  NvM_WriteAll(...)affects all NVRAM blocks with permanent RAM data
3  NvM_CancelWriteAll(...)  NvM_CancelWriteAll(...)   NvM_CancelWriteAll(...) 
4  NvM_ValidateAll(...)  NvM_ValidatedAll(...)   
1  NvM_FirstInitAll(…)  NvM_Init(...)⌋ ( )  
type41  NvM_Init(...)  NvM_Init(...)  NvM_Init(...)· synchronous request
· basic initialization
· success signaled to the task via command interface inside the function itse
Remark   1. No queue;
2. No immediate data can be written;
3. Not support Dataset management type;
4. 
 

1.6 硬件抽象层的寻址方案

硬件抽象接口(即更低层的Fee和EA)为NVM提供了虚拟线性32位地址空间用于寻址,这32位地址由16bit的 block number和16bit的block address offset构成。

According to [SWS_NvM_00051], the NvM module allows for a (theoretical) maximum of 65536(2^16) logical blocks, each logical block having a (theoretical) maximum size of 64(2^16) Kbytes.

(NVM模块最多允许寻址 65536(2^16)个逻辑块,每个逻辑块的大小最大为 64(2^16) Kbytes)

16bit 的block number 被进一步划分成两部分:

  1. NV block base number (NVM_NV_BLOCK_BASE_NUMBER) with a bit width of (16 -NVM_DATASET_SELECTION_BITS)
  2.  Data index with a bit width of (NVM_DATASET_SELECTION_BITS)

     即: NVM_DATASET_SELECTION_BITS + NVM_NV_BLOCK_BASE_NUMBER = 16

NvMDatasetSelectionBits 在NVM module中是可配置项,用作Dataset类型的NVRAM Block中的NV block的寻址,即dataset中,NVblock的dataindex 可以为 0,1,2... (2^bit-1)。NvMDatasetSelectionBits被定义之后,则block base number的大小也随即确定(用作对base number寻址的bits个数 == 16-selectionbits), 即NVRAM Block ID可以为 0,1,2,... (2^basenumberbits-1)。

NVM模块的 NvMNvBlockBaseNumber, NvMDatasetSelectionBits 和FeeEA 模块的 EA_BLOCK_NUMBER / FEE_BLOCK_NUMBER 的关系换算关系是:

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

bit 和其组合后的表示意义:

NvMDatasetSelectionBits        ——> Data Index(一个NVRAM Block的NV block 的编号)

NvMNvBlockBaseNumberbits ——> NVMBlockBaseNumber(即为NVRAM Block ID,NVRAM Block的编号)

即两个类型的 bit 合计共有16个。

 

例 1:

NvMDatasetSelectionBits == 2 (即被配置为2bit),则可以用作NvMNvBlockBaseNumber 的是14bit。由此:

 Range of NvMNvBlockBaseNumber: 0x1..0x3FFE(2^14个,即:1 ~(2^14-1-1))
 Range of data index: 0x0..0x3(=2^NvMDatasetSelectionBits-1) (2^2个,即:0 ~ (2^2-1))
 Range of FEE_BLOCK_NUMBER/EA_BLOCK_NUMBER: 0x4..0xFFFB (0x1<<2bit + 0)

对于一个 native NVRAM block,如果其 NvMNvBlockBaseNumber = 2:
   ——则其对应的NV block 在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 8

对于一个 redundant NVRAM block(有2个NV block)如果其 NvMNvBlockBaseNumber = 3:
  —— 其1st NV block (data index = 0)在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 12 (=3<<2+0,)
  —— 其2nd NV block(data index = 1) 在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 13(=3<<2+1)

对于一个 dataset NVRAM block 如果其 NvMNvBlockBaseNumber = 4, NvMNvBlockNum = 3 (即有3个NV block):
  —— 其 1st NV block(data index = 0) 在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 16 (4<<2 +0)
  —— 其 2nd NV block (data index = 1)在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 17(4<<2 +1)
  —— 其 3rd NV block (data index = 2)在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 18(4<<2 +2)

 

2 功能

NVRAM Manager(Non-Volatile RAM Manager)管理所有非易失性存储器(Non-Volatile Memory)中数据的存储。其本身是独立于硬件(hardware)的,直接访问硬件的功能被封装到BSW的更下层(MemIF,Fee/EA, Fls/Eep)。NVRAM Manger 负责处理对非易失性数据的访问并对单个数据元素提供(checksum protection等)可靠性机制。为了适用于汽车系统的所有领域,NVRAM Manager具有高度的可扩展性。

3 SRS文档中:Requirements Tracing(14条BRF)

RequirementDescriptionSatisfied by
RS_BRF_00129

AUTOSAR shall support data corruption detection and protection。

 

支持数据损坏检测和保护

SRS_Mem_00030, SRS_Mem_00129,
SRS_Mem_08001, SRS_Mem_08010,
SRS_Mem_08545, SRS_Mem_08546,
SRS_Mem_08547, SRS_Mem_08550,
SRS_Mem_08552, SRS_Mem_08553,
SRS_Mem_08555, SRS_Mem_08556
RS_BRF_01048

AUTOSAR module design shall support modules to cooperate in a multitasking
environment。

模块支持多任务环境下协作。

SRS_Mem_00034, SRS_Mem_08542,
SRS_Mem_08558
RS_BRF_01064

AUTOSAR BSW shall provide callback functions in order to access upper layer modules。

BSW通过callback函数访问上层模块。

SRS_Mem_00125
RS_BRF_01076

AUTOSAR basic software shall perform module local error recovery to the extent possible。

BSW模块可以进行本地错误恢复。

 

SRS_Mem_00038
RS_BRF_01096

AUTOSAR shall support start-up and shutdown of ECUs。

支持ECU的start-up 和 shutdown。

SRS_Mem_00137, SRS_Mem_08540
RS_BRF_01416

AUTOSAR services shall support standardized handling of non-volatile memory data。

service支持对非易失性数据的标准化处理。

SRS_Mem_00013, SRS_Mem_00016,
SRS_Mem_00017, SRS_Mem_00136,
SRS_Mem_00138, SRS_Mem_08544,
SRS_Mem_08554
RS_BRF_01800

AUTOSAR non-volatile memory functionality shall be divided into a hardware dependent and independent layer。

NV memory的功能被划分成两部分:硬件独立和硬件依赖。

SRS_Mem_00011
RS_BRF_01808

AUTOSAR non-volatile memory handling shall
support different kinds of memory hardware。

支持多种类型的硬件。

SRS_Mem_08000
RS_BRF_01812

AUTOSAR non-volatile memory functionality shall support the prioritization and asynchronous execution of jobs。

支持作业优先级设定和异步请求。

SRS_Mem_00034, SRS_Mem_08543,
SRS_Mem_08558
RS_BRF_01816

AUTOSAR non-volatile memory functionality shall organize persistent data based on logical memory blocks。

应基于逻辑存储器块组织持久数据。

SRS_Mem_00041, SRS_Mem_08001,
SRS_Mem_08009, SRS_Mem_08528,
SRS_Mem_08529, SRS_Mem_08531,
SRS_Mem_08533, SRS_Mem_08534,
SRS_Mem_08538, SRS_Mem_08543,
SRS_Mem_08549, SRS_Mem_08560
RS_BRF_01824

AUTOSAR non-volatile memory functionality shall provide a mapping of non volatile memory into random access memory。

提供NV memory到RAM memory的映射

SRS_Mem_00027, SRS_Mem_08014,
SRS_Mem_08533, SRS_Mem_08538,
SRS_Mem_08549

 

 

RS_BRF_01832

AUTOSAR non-volatile memory shall handle
logical memory blocks independent of its physical
address。

应独立于物理地址处理逻辑存储器块。

SRS_Mem_08007, SRS_Mem_08531
RS_BRF_01840

AUTOSAR non-volatile memory functionality shall
secure integrity of memory blocks。

保证存储块的完整性。

SRS_Mem_00018, SRS_Mem_00030,
SRS_Mem_00127, SRS_Mem_00129,
SRS_Mem_00135, SRS_Mem_08010,
SRS_Mem_08011, SRS_Mem_08015,
SRS_Mem_08535, SRS_Mem_08541,
SRS_Mem_08546, SRS_Mem_08547,
SRS_Mem_08548, SRS_Mem_08552,
SRS_Mem_08553, SRS_Mem_08556
RS_BRF_01848

AUTOSAR non-volatile memory functionality shall
provide mechanisms to enhance hardware reliability。

提供增强硬件可靠性的机制。

SRS_Mem_00018, SRS_Mem_08529,
SRS_Mem_08531, SRS_Mem_08548,
SRS_Mem_08551, SRS_Mem_08554

3 SRS中:Requirements Specification

functional requirement 主要分为5个部分来阐述:

  1. configuration:在配置期间要满足那些要求,可以进行哪些操作等。
  2. initialization:ECU启动时的操作
  3. normal operation:正常功能和操作
  4. shutdown operation:ECU关机的操作
  5. fault operation:错误处理


具体条款可以参考文档,这里不搬运了。

 

 

 

 

 


 

 

 

 

 

  • 14
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
Autosar UDS NVM是指在Autosar架构中,用于实现用户数据存储和诊断功能的模块。UDS代表诊断服务,NVM代表非易失存储。UDS模块提供了标准化的诊断服务,包括故障码读取、清除和测试等功能。NVM模块用于管理和存储非易失数据,如故障码、配置参数等。 在Autosar架构中,使用了一些代码片段来实现功能。引用中的代码片段是将一个16位的偏移量左移8位,并将结果赋值给offset_u16变量。这个操作可能是为了对偏移量进行位操作或转换。 引用中的代码片段是将buffer_data_u8数组中的第一个元素与offset_u16进行按位或操作,并将结果赋值给offset_u16变量。这个操作可能是用于将buffer_data_u8中的数据与偏移量进行合并或更新。 因此,Autosar UDS NVM模块是用于实现诊断服务和非易失数据存储的模块,通过执行一系列的操作来读取、写入和管理数据。这些模块在Autosar架构中广泛应用,以提供丰富的诊断和数据存储功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Autosar诊断实战系列05-需存储NvM的DID配置开发详解](https://blog.csdn.net/initiallizer/article/details/131347964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【AUTOSAR-DCM】-4.3-UDS $22和$2E服务如何读取和写入NVM Block数据](https://blog.csdn.net/qfmzhu/article/details/125549843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值