NvMCommon
NvMApiConfigClass
提供了一种配置NvM服务支持的功能集合的方法。API类的级别越高,支持的功能越多,但同时也会占用更多的资源。相反,API类的级别越低,支持的功能越少,但内存占用也会更小。具体每个API类包含哪些功能集,需要参考NvM的文档进行详细了解。
NvMBswMMultiBlockJobStatusInformation
该配置项用于启用或禁用通知BswM(基础软件管理器)有关多块作业当前状态的功能。当多块操作开始、完成或取消时,通过调用函数BswM_NvM_CurrentJobMode进行通知。
如果该通知功能被启用,那么配置的多块回调(可通过NvMMultiBlockCallback配置)将不会被触发。
NvMCompiledConfigId
该ID用于唯一标识NV内存布局版本。当启用了NvM的动态配置功能(参见NvMDynamicConfiguration参数)或在布局变化时启用了块初始化(参见NvMRbInitAtLayoutChange参数)时,该ID用于在执行NvM_ReadAll操作期间做出兼容性决策。此外,该参数还用于“布局变化时的初始化功能”(参见NvMRbInitBlockAtLayoutChange参数)。
NvMCrcNumOfBytes
定义CRC(循环冗余校验)重新计算时,在一次作业处理周期内要处理的最大字节数。
适用于至少一个永久性RAM块配置了CRC重新计算功能的情况。
NvMCsmRetryCounter
指定CSM加密/解密作业重试的次数。
在读取和写入块时,CSM操作可能会失败(例如,模块繁忙,队列已满等)。为了避免直接以错误状态中止读取/写入操作,NvM将根据配置的NvMCsmRetryCounter值重试CSM操作。配置值为0表示:无重试行为;作业将直接中止。
NvMDevErrorDetect
启用或禁用开发错误的检测和通知。
如果启用该参数,将在运行时执行扩展错误检查;任何由这些检查检测到的错误都会报告给Det模块。在量产软件中应关闭此功能。
NvMDrvModeSwitch
启用或禁用在执行NvM_ReadAll和NvM_WriteAll时将内存驱动程序切换到快速模式。
由于快速模式不受NvM底层支持,因此NvM不支持此功能,因此该参数当前必须始终设置为false。
NvMDynamicConfiguration
启用或禁用动态配置管理功能。
如果启用该功能,当前配置的编译配置ID(参见NvMCompiledConfigId参数)将在执行NvM_ReadAll期间与存储在内存介质上的配置ID进行比较。如果这些ID不匹配,则仅读取标记为对软件更改有抗性的块(参见NvMResistantToChangedSw参数)。如果该参数被禁用,则NvM_ReadAll操作在不考虑任何可能存储的配置ID的情况下进行。
NvMJobPrioritization
启用或禁用作业优先级处理。
该配置项控制是否启用NvM在处理任务时进行优先级处理。
NvMMainFunctionPeriod
定义连续调用NvM主函数之间的时间间隔,单位为秒。
如果NvM主函数通过RTE在定时任务中进行调度,最小值为1.0e-7秒。
NvMMultiBlockCallback
指定在每个异步多块请求完成时调用的公共回调函数名称。
如果希望明确指定不调用任何回调函数,则在此处输入NULL_PTR。回调函数的声明取决于配置NvMRbCallbackSignatureAR45的值:
当NvMRbCallbackSignatureAR45=false时:
Std_ReturnType CallbackName(uint8 ServiceId, NvM_RequestResultType JobResult )
当NvMRbCallbackSignatureAR45=true时:
Std_ReturnType CallbackName(NvM_MultiBlockRequestType MultiBlockRequest, NvM_RequestResultType JobResult )
在回调函数内部不允许调用任何NvM或DEM函数。
NvMPollingMode
定义NvM与内存介质驱动程序通信方式的方式。
如果设置为true,NvM_MainFunction将轮询这些驱动程序的状态,以检查是否有操作正在进行中。如果设置为false,内存驱动程序通过由NvM提供的专用回调函数异步报告操作状态的任何变化。由于NvM不支持从内存驱动程序接收异步通知,因此该参数当前必须始终设置为true。
NvMRbAuxInterface
启用或禁用辅助服务接口。通过这个接口,特定的“辅助”用户可以触发对任意块进行NvM单块作业,而这些操作不会影响到“常规”用户的作业或状态。
NvMRbBlockHeader
定义块头与用户数据一起存储在非易失性存储器中的方式。
块头始终存储在用户数据之前,即非易失性存储器中的块数据以块头开头。
可能的取值:
0:禁用块头。
1:存储块头,使用布局版本1。
字节0-1:CrcHdr,对字节2-14的块头进行CRC16校验,LSB优先。
字节2:LngHdr,头部长度,单位字节,范围为1到255。
字节3:VerHdr,头部版本,范围为1到255。
字节4-5:LngPlainData,明文用户数据的长度,LSB优先,范围为1到65407字节。
字节6-7:LngEncryptData,加密用户数据的长度,LSB优先,0表示用户数据未加密,范围为0到65407字节。
字节8:CrcPlainData,与加密用户数据一起存储的明文用户数据的CRC长度,0表示无CRC,1表示CRC8,2表示CRC16,4表示CRC32。
字节9:LngIV,加密时使用的初始化向量长度,以4字节为单位,0表示没有初始化向量,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节10:LngTag,如果使用AEAD加密,则存储的标签长度,以4字节为单位,0表示没有标签,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节11:LngSgn,签名长度,以4字节为单位,0表示没有签名,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节12:LngWrtCntr,块写入计数器的长度,0表示不使用写入计数器,4表示存储4字节。
字节13:LngBlkVer,块版本的长度,0表示不使用块版本,1表示存储1字节。
字节14:LngCrcStoredData,存储在非易失性存储器中所有数据的CRC长度,0表示不存储CRC,1表示存储CRC8,2表示存储CRC16,4表示存储CRC32。
2:存储块头,使用布局版本2。
字节0-1:CrcHdr,对字节2-14的块头进行CRC16校验,LSB优先。
字节2:LngHdr,头部长度,单位字节,范围为1到255。
字节3:VerHdr,头部版本,范围为1到255。
字节4-5:LngPlainData,明文用户数据的长度,LSB优先,范围为1到65407字节。
字节6-7:LngEncryptData,加密用户数据的长度,LSB优先,0表示用户数据未加密,范围为0到65407字节。
字节8:CrcPlainData,与加密用户数据一起存储的明文用户数据的CRC长度,0表示无CRC,1表示CRC8,2表示CRC16,4表示CRC32。
字节9:LngIV,加密时使用的初始化向量长度,以4字节为单位,0表示没有初始化向量,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节10:LngTag,如果使用AEAD加密,则存储的标签长度,以4字节为单位,0表示没有标签,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节11:LngSgn,签名长度,以4字节为单位,0表示没有签名,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节12:LngMac,消息认证码(MAC)的长度,以4字节为单位,0表示没有MAC,1表示4字节,2表示8字节,3表示12字节,以此类推,范围为0到255。
字节13:LngWrtCntr,块写入计数器的长度,0表示不使用写入计数器,4表示存储4字节。
字节14:LngBlkVer,块版本的长度,0表示不使用块版本,1表示存储1字节。
字节15:LngCrcStoredData,存储在非易失性存储器中所有数据的CRC长度,0表示不存储CRC,1表示存储CRC8,2表示存储CRC16,4表示存储CRC32。