目 录CONTENT

文章目录

AUTOSAR知识点 之NvM(一):存储栈整体介绍(偏从ASW到BSW的配置与基础概念性质)

moke
2024-07-27 / 0 评论 / 0 点赞 / 138 阅读 / 0 字

1、概述

        可变和持久是ECU内部数据的属性。实际上,在ECU运行时需要更改数据,并在整个电源周期中保持数据可用。这些数据需要存储在非易失性存储器中。非易失性存储器中的数据称为NV数据。NVRAM块是管理和存储NV数据块所需的整个结构。

下图显示了AUTOSAR中的内存堆栈:

        从上图可以看出,存储栈的分层结构,FEE的含义是Flash模拟EEPROM,理论上实现虚拟理论上不限次数的擦写。

        在实际项目里面FEE一般用芯片自带的DFLASH,例如英飞凌、NXP的芯片。

2、Block概念

        Basic Storage Objects: 基本存储对象是NVRAM块中最小的实体。许多基本存储对象可用于构建NVRAM块。基本存储对象可以驻留在不同的内存位置(RAM、ROM、NV内存)。

2.1、RAM Block

        RAM块是一个基本存储对象。它表示驻留在RAM中的NVRAM块的一部分。它用于保存实时数据。这是NVRAM块的可选部分。

2.2、ROM Block

        ROM块是一个基本的存储对象。它表示驻留在ROM中的NVRAM块的一部分。ROM块也是NVRAM块的可选部分。

        ROM Block的内容是持久化的,在程序执行过程中不能被修改,它驻留在ROM/Flash中。它用于在空的或损坏的NV块的情况下提供默认数据。

2.3、NV Block

        NV块是一个基本存储对象。它表示NVRAM块的哪个部分驻留在NV内存中。NV块是NVRAM块的必备部分。

        NV块的内容是持久的,但可以在程序执行期间修改存在于Flash中。它用于保存定期存储或应请求存储的实时数据。

2.4、Administrative Block

        管理块是一个基本存储对象。它驻留在RAM中。管理块是NVRAM块的强制性部分。

        它用于保存相应NVRAM块的属性/错误/状态信息以及块索引,特别是对于类型为Dataset的NVRAM块。

        Administrative Block是NV RAM中必须使用的,包含了DataSet类型的NvM数据管理相关的NV RAM Block的属性、状态以及错误信息,能管理NV Block的写保护,以及上次数据操作的错误以及状态信息。

        在空间分配中可以不用考虑NV RAM的内存分配地址。NV RAM数据被分配到一个SWC或者BSW模块。

3、NVM的块类型

NVM支持以下类型的NVRAM

块管理类型

NV Blocks

RAM Blocks

ROM Blocks

Administrative Blocks

Native NVRAM block

1

1

0..1

1

Redundant NVRAM block

2

1

0..1

1

Dataset NVRAM block

1..NvMNvBlockNum
NvMNvBlockNum小于256
 

1

0..NvMRomBlockNum

1

3.1、Native NVRAM Block

        Native NVRAM块是最简单的块管理块,它允许以最小的开销从NV内存进行存储或检索。

 NV Blocks: 1

 RAM Blocks: 1

 ROM Blocks: 0..1

 Administrative Blocks: 1

3.2、Redundant NVRAM block

除了Native NVRAM块之外,冗余NVRAM块还提供了增强的容错性、可靠性和可用性。它增加了对数据损坏的抵抗力。

 NV Blocks: 2

 RAM Blocks: 1

 ROM Blocks: 0..1

 Administrative Blocks: 1

3.3、Dataset NVRAM block

Dataset NVRAM块是一个大小相等的数据块数组。应用程序一次只能访问其中一个数据块。

 NV Blocks: 1..NvMNvBlockNum

 RAM Blocks: 1

 ROM Blocks: 0..NvMRomBlockNum

 Administrative Blocks: 1

4、数据恢复

NvM模块应提供隐式和显式恢复技术,在NV块数据不一致不可恢复的情况下,通过校验和计算将ROM数据恢复到相应的RAM块。恢复可以在启动(NVM_ReadAll)、NVMReadBlock和NVM_ReadPRAMBlock时提供,当用户配置ROM块时,通过配置以下两个参数之一:

- NvMRomBlockDataAddress

- NvMInitBlockCallback

ROM块的地址可以是链接器符号或十六进制地址。

5、存储场景:循环存储、立即存储、关机存储

存储数据有不同的类型,如:循环存储、立即存储或关机存储。

5.1、循环存储:Store cyclically

        在这种情况下,RTE处理的定时事件会周期性触发NVM将RAM块写入NVRAM块。因此,用户需要启用选项storeCyclic并指定写入的时间段。要做到这一点,用户可以配置NvBlockNeeds配置如下:

WritingFrequency参数可以根据需求进行优化。

5.2、下电存储:Store at shutdown

在这种情况下,RTE调用NVM模块的NvM_WriteBlock函数来写块。此操作可以通过任务激活或请求上下文来实现。对于配置,用户可以用以下配置配置NvBlockNeeds:

确保在BSWM配置中可用NvM_WriteAll操作

5.3、立即存储:Store immediately

        在这种情况下,RTE调用NVM模块的NvM_WriteBlock函数来写块。此操作可以通过任务激活或请求上下文来实现。对于配置,用户可以用以下配置配置NvBlockNeeds:

6、ISOLAR-AB整体配置分析

从上到下配置NVM的思维导图如下所示

6.1、ASW配置

要为NVM配置SWC,用户需要首先创建NVM SWC(具有必要的配置,例如其数据类型,内部行为,可运行程序,事件…),配置每实例内存(PIM -是属于SWC的持久存储,它是SWC的私有内存,因此只有可运行程序能够访问该SWC)和NvBlockNeeds(包含SWC的NV内存信息)。

PIM:PreInstanceMemory,内存实例化。

在此基础上,用户可以按照以下步骤操作:

1、创建一个SWC,例如ASW_NVM

2、创建Internal behavior

3、创建SWC的私有内存PIM,选择正确的数据类型

4、创建NvBlockNeeds。NvBlockNeeds的配置将由NVRAM Manager参考。用户需要考虑可以使用哪种存储场景-循环,立即,下电等

6.2、BSW配置

在本节中,用户通常会按照以下步骤配置BSW中的模块:

1)使用工具的RTA-BSW configuration Generation选项生成Mem栈的基本配置

2)根据用户具体需求,进一步手动配置内存栈(NVM、MemIf、Fee)

3)配置EcuM、BswM支持内存栈特性

4)使用RTA-BSW代码生成选项生成BSW代码

6.2.1、NVM配置

生成BSW配置后的NVM基本配置如下:

首先,建议用户重命名块,使其在NVM和SWC之间可跟踪。

前两个块是默认生成的,不应该被删除。根据具体需求,用户可以使用合适的参数手动创建其他NVM块。用户需要考虑的参数有:

  1. NvMBlockCrcType: CRC校验类型,目前BSW只支持CRC 16位

  2. NvMBlockJobPriority。当前BSW支持两种优先级:

0:立即优先级:块既没有多块读操作,也没有多块写操作

1:标准优先级:如果NvMSeclectBlockForReadAll为true,则块具有多块读特性;如果NvMSelectBlockForWriteAll为true,则块具有多块写特性

  1. NvMBlockManagementType。NVRAM块的类型,Dataset, Native, 或者Redundant。

  2. NvMRamBlockDataAddress:定义永久RAM块数据的起始地址,用户可以输入十六进制地址,一个链接符。如果用户希望指定该块不使用永久块,则不输入任何内容。

配置Native块的例子如下:

然后配置NVM的常用配置,注意NvMMainFunctionCycleTime,它定义了Mainfunction的循环周期。

6.2.2、MemIf配置

MemIf中的配置很简单,如下所示。

6.2.3、FEE配置

FEE一般配置基本如下:

注:参数FeeRbMachineType允许用户选择微控制器的类型,然后将自动生成Fee部分信息。但是,如果不支持微控制器的类型或用户想要定义扇区,他们可以如下配置FeerbSectorTable。

用户不需要添加feeblockconfiguration,因为当用户执行BSW代码生成时,RTA-BSW会自动将块信息从NVM转发给Fee。

6.3、RTE配置

生成BSW代码后,将生成NVM的服务软件组件。因此,用户将执行主要步骤:

1)连接NVM应用SWC与NVM业务组件的兼容端口。

2)将内存服务可运行项映射到操作系统任务。

3)生成RTE有关详情。

用户可按以下步骤操作:

1)创建具有正确接口的端口,RPort意味着应用程序将调用服务软件组件中PPort提供的服务。通过双击SWC,将出现下面的窗口,并允许用户创建端口。

2、创建Functions

3、讲服务点插进Functions以便RTE生成

4、创建Events

5、为NVM的SWCs添加组件原型

6、匹配SWC运行到正确的SWC

7、在AR资源管理器中打开Composition连接swc的端口,将具有相同接口的端口连接在一起。

8、在Manual Connection Editor中选择源组件和目标组件,然后选择用户源组件和目标组件之间使用相同接口连接端口。

9、将SWC的组件原型添加到ECU中,右键单击“System”,打开SWC to ECU Mapping Editor。

10、右击System,选择Create ECUExtract,点击完成。

11、将任务映射到OS任务,右击ECU extranct打开Open Editor

12、生成RTE

用户可以参考的其他命令如下:

-nts——samples=memmap -ur=2——os-define-osenv=RTAOS40——exclusive-areaoptimization=disable——os-output-param=all——use-partition-sections=on——deviate-bsw-anypartition=1——deviate-split-

6.4、EcuM配置

EcuM负责初始化Flash模块,因为Flash需要先初始化启动BSW模块。因此,将Fls添加到EcuMDriverInitItem中。

6.5、BswM配置

而Fls由EcuM初始化。NVM和Fee由BswM初始化。用户可以添加thel初始化NVM的动作和费用到动作列表BswMStartupTwo。

在此之前,需要创建相应的动作并映射各自的call out。

NVM在启动阶段执行NvMReadAll动作,在ECU关闭时执行NvMWriteAll动作。这可以通过在动作列表BswMSwitchShutdown中添加动作NvMReadAll和动作nvmwriteall来实现。

NvMWriteAll

6.6、CRC配置

NvM模块使用CRC生成例程(8/16/32位)作为可配置选项来检查和生成NVRAM块的CRC。

在配置NVM时,如果用户开启了CRC校验功能,则用户需要配置CRC校验模块,使BSW能够生成CRC接口的实现。例如,在NVM配置中,使用CRC16,则对应的类型配置如下:

如果CRC模块不存在,用户可以手动创建该模块。

博主关闭了所有页面的评论