NvMBlockDescriptorsAutomatic Block Length自动块长度。用一个最大的空间来装数据实际的块长度是 sizeof(RAM块) 会导致在E方或者flash里面有一些没用上的区域。Block Base Number这东东没用不用填Block Identifier就是个序号从1开始会自己生成和排序。Block Length NV RAM块的数据有多少字节需要预留CRC的位置。NVM跟FEE的名字不需要一模一样可能会有错位。Block Length Check启用或禁用块长度检查功能。在编译时会检查RAM块和ROM块长度长度无效时会导致编译错误。Block Length Check Strict块长度检查应采用严格模式还是非严格模式严格模式配置的长度必须与相应的RAM块或ROM块的长度完全一致。非严格模式配置的块长度必须小于或等于相应的 RAM 或 ROM 的长度只有在启用块长度检查且禁用自动块长度的情况下才可用。Block NV RAM Data Length指定RAM块长度可以大于Nv块长度。有RAM块就可以不进行指定了Block Post Read Transform Callback读取块回调函数一般不用Block Pre Write Transform Callback预写入回调函数一般不用Block Status Information有改变的时候通知BSWMBlock Use CRC CompMechanism将RAM块的CRC值与上一次成功读取或写入操作中计算出的CRC值进行比较Block Use Set Ram Block Status调用NvMSetRamBlockStatus接口的时候对该块有效否则将忽略。调用过这个接口再writeall才会写入。所以这个标志位也通过IOC传输过来。Calc Ram Block Crc对RAM块重新计算CRC其实就是在RAM块里面加了CRC在调用NvM_SetRamBlockStatus的时候进行重新计算在NvM_ReadAll的时候会对RAM进行校验。每次调用NvM_SetRamBlockStatus函数时请求重新计算RAM CRC的目的是为了在出现复位短暂断电、看门狗复位的情况下仍能重新使用RAM中的数据。NvM假定RAM中的数据比NVRAM中的数据更新。在 NvM_ReadAll 处理过程中NvM 会针对所有配置中启用了 SelectBlockForReadAll 和 CalcRamBlockCrc 的 NVRAM 块进行此类操作如果该块在内部仍被标记为有效则 NVM 会根据当前 RAM 块的内容计算 CRC 值并将其与存储在其他位置的值进行比较。如果两者匹配则不会修改 RAM 内容相反NVM 会假装已成功从 NV 中读取了这些值。由于NvM在处理任务的同时会并行计算内存块的CRC所以内部会有两个缓冲区一个用于任务处理也将被显式同步机制所使用一个用于计算内存块循环余校验功能的选项。Check Loss Of Redundancy读取冗余数据块时是否也需检查该数据块的冗余数据Crc Type校验类型Crc usage启用NVRAM块的CRCCsm Decryption Job Reference引用CSM解密任务该任务用于在从NVRAM中读取加密数据后对其进行解密。Csm Encryption Job Reference引用CSM加密任务该任务用于在将原始数据写入非易失性内存之前对其进行加密。Csm Mac Generation Job Reference引用CSM MAC生成任务该任务用于生成MAC以确保数据块的数据完整性。Csm Mac Size用于确保数据块完整性所使用的实际 MAC 的大小Csm Mac Verification Job Reference引用CSM MAC验证任务该任务用于验证先前生成的块的MAC值。Datasets连续多少块NV块根据Block Management Type生成只能看不能改。Device Id设备ID不用填写Init Block Callback没有可用的ROM数据用于初始化NVRAM块时将调用该回调函数。Init Block Callback Extended相对上一个配置项允许直接写入数据指针Invoke Callbacks For Read All调用NvM_ReadAll接口的时候对该块是否起作用Invoke Callbacks For Write All调用NvM_WriteAll接口的时候对该块是否起作用Block Management Type管理类型Max Num Of Read Retries读取操作的最大重试次数没有用Max Num Of Write Retries写入操作的最大重试次数没有用Priority指定RAM块作业优先级0最高127最低Ram Block Data指定RAM块的名称如果为空则没有RAM块。Read Ram Block From Nv Callback该函数将在APP需要将NvM模块的镜像数据复制到RAM块时被调用这是根据上一个配置生成的无法修改。Resistant To Changed Sw指定RAM块对软件更改具有抵抗能力Rom Block Data Address一个连续区域内多个ROM块的数量没有用Select Block For Read All该RAM块在NvM_ReadAll里面被带着处理Select Block For Write All该RAM块在NvM_WriteAll里面被带着处理Single Block Callback对该块请求终止时调用的回调函数Single Block Callback Extended上一个配置的扩展板Static Block ID Check对NVRAM的静态块ID检查在计算CRC的时候根据块ID、数据索引和实际数据也就是把块ID参与计算CRC的方式来检查块ID。没有用Use Init Callback初始化回调用于提供默认数据Use Job end Callback在块处理完成后是否调用特定块的Single Block Job End Notification也就是回调函数Use Service Ports可通过服务端口进行访问一般不开启Use Sync Mechanism使用同步机制与RAM镜像以及用于在NvM模块的RAM镜像之间传输数据的回调程序相关的明确同步机制来处理此块数据。若使用该机制则必须将NvMReadRamBlockFromNvCallback和NvMWriteRamBlockToNvCallback这两个函数均设置为相应的函数名称。也就是开启显式同步机制。Write Block Once写入一次之后就保护掉不能操作了Block Write Prot初始化之后就进入写保护Write Ram Block To Nv Callback在APP将数据从内存块复制到NvM模块的镜像时被调用Write Verification写入操作验证没有用Write Verification Data Size比较内存块内容与回读的块内容时在每一步中需要比较的字节数。没有用NvMFeeRefNameOfFeeBlock因为有这个所以不用关心跟FEE的排序要统一。NvMCommonApi Config Class配置类类的数据越大功能越多不能修改MainFunctionPeriod主函数NvM_MainFunction调用周期CompiledConfigId配置ID写个1就行。CrcNumOfBytes在一次NvM_MainFunctionCall中用于计算CRC以及进行内部复制操作所处理的最大字节数。因此此参数会影响 NvM_MainFunction 的最长运行时间从而也会影响NvM_MainFunction 的调用周期NvMMainFunctionPeriod的设置。一般来说Crc Number of Bytes值越小调用周期就越小速度也越快反之亦然。CsmRetryCounter指定CSM 加密/解密任务的重试次数DatasetSelectionBits指定了用于在与内存硬件抽象接口的NVRAM块内对特定Dataset块进行寻址的最低有效位的数量。DetectedLossOfRedundancyCallback在读取数据块时检测到冗余丢失时通知回调函数DevErrorDetect开发者错误检测DrvModeSwitch在执行NvM_ReadAll和NvM_WriteAll操作时将交换内存驱动程序切换至快速模式DynamicConfiguration通过NvM_ReadAll请求进行的动态配置管理处理JobPrioritization启用优先级作业MaxNoOfWriteRetries指定NVRAM块的最大写入重试次数。对于由请求NvM_WriteAll和NvM_WriteBlock处理的每个块都会强制执行一致性检查和重试操作。MultiBlockCallback每个异步多块请求终止时应调用的通用回调函数MultiBlockJobStatusInformation当ReadAll和WriteAll操作启动、完成或取消时调用BswM_NvM_CurrentJobMode函数通知BSWMPollingMode启用轮询模式RepairRedundantBlocksApi启动了名为“修复冗余块”的 NVM 背景任务该任务会遍历所有已配置的冗余块并在NV内存中检查其冗余性。如果冗余性丢失该任务将尝试进行修复。为什么么有启用RepeatMirrorOperations在推迟当前任务之前APP从NvM模块的镜像中复制数据所需的重试次数没有用。SafeBswChecks是否启用安全检查SetRamBlockStatusApi使能NvM_SetRamBlockStatus接口SizeImmediateJobQueue立即优先级作业队列中的队列条目数量SizeStandardJobQueue标准作业队列中的队列条目数量UseBlockIdCheck将会检查通过底层模块传输的数据是否属于所请求的NvM块。由于NvM使用CRC校验码因此只有配置了CRC的块才能通过此功能进行验证如果没有配置CRC的块此功能将不会被使用NvMVersionInfoApi使能NvM_GetVersionInfo接口