本文框架
- 0.前言
- 1. NvM的CRC校验
- 1.1 CRC 比较机制
- 2. NvM的同步写及异步写
- 2.1 NvM的同步写
- 2.1 NvM的异步写
0.前言
本系列是Autosar存储入门系列,希望能从学习者的角度把存储相关的知识点梳理一遍,这个过程中如果大家觉得有讲得不对或者不够清晰的地方,还请一定指出来,一起探讨,加深学习。
另外根据本人多年的开发经验,做了一些AutosarMCAL配置,通信,诊断,模式管理等实战总结,如果您有需求可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读
本篇介绍一下Autosar中NVM的CRC校验及同/异步写调用逻辑介绍,前面内容也有涉及到,内容较简单,对于老手可以直接跳过本篇。
基本框架如下:
1. NvM的CRC校验
1.1 CRC 比较机制
在上篇文章中我们介绍了Block存储的信息中,除必须的Block Data外,还有可选的Block头信息及CRC校验信息。
Block的CRC的计算是由NvM_MainFunction()异步完成的,CRC数据可以避免在NVM内存中进行不必要的写操作,其实现原理为:在写入数据到NVM内存之前,NvM重新基于当前数据计算CRC值,并将该值与之前读取或写入数据(存储在RAM中)的CRC进行比较:
1)CRC的数值一致,则NvM会判定数据未被更改,不会对block进行写入操作,并且回复成功写完成的状态;
2)CRC的数据不一致,即NvM数据已更改(不是最新的NV内存),并将数据写入NV RAM。
该机制可以通过NvMBlockUseCRCCompMechanism对NvM块启用。
2. NvM的同步写及异步写
NVM同步写和异步写是NvM(Non-volatile Memory)模块中的两种不同的数据写入方式,其中:
2.1 NvM的同步写
NVM同步写是指在写入数据到NVM时,需要等待数据写入操作完成后才能继续执行后续的操作。在配置了同步机制的情况下,必须同时配置NvMWriteRamBlockToNvM和NvMReadRamBlockFromNvM函数,以确保数据的正确读写。
同步写适用于下电前task已关闭后的NvM写入操作,此时即使写入的时间较长不会有任务超时发生。
2.1 NvM的异步写
NVM异步写是指在写入数据到NVM时,可以立即返回并继续执行后续的操作,在后续的NvM_MainFunction()中继续完成写入操作,这期间任务可以被打断,调用端也不需要等待写入操作完成。
异步写可以提高系统的响应性能,但在使用异步写时需要注意将数据先copy到对应的Mirror区域,在SWC运行过程中可以改变对应Ram里的值,但Mirror里的内容不能再去改变,否则会导致数据前后信息不一致。
其对应的调度顺序如下,与前面介绍的实时调用相同,即虽然是实时写,但实际是异步操作写入的。
适用于在ECU运行过程中对单个Block的写入。
总结来说,NVM同步写需要等待写入操作完成后才能继续执行后续其他操作,而NVM异步写则可以立即返回并继续执行后续的操作,两者各有优缺点及适用场景。