memif
和所有的抽象层作用差不多,memif把driver层的模块抽象出来提供给上层使用,具体层级结构如下:
nvm调用memif提供的标准接口,例如memif_readwrite等;在memif根据已配置的抽象驱动模块(feeea)分别调用不同的api,实际举例如下:
根据标准,fee或者ea又会调用meeacc提供的接口去访问不同的flash驱动。
我们以vector的实际代码为例,在memif层配置提供的接口如下:
/**-- memhwa function pointers --**/const(memif_memhwaapi_type, memif_const) memif_memhwaapis[memif_number_of_devices] ={ /* fee_30_smallsector */ { fee_30_smallsector_read, memif_fee_30_smallsector_writewrapper, fee_30_smallsector_eraseimmediateblock, fee_30_smallsector_invalidateblock, fee_30_smallsector_cancel, fee_30_smallsector_getstatus, fee_30_smallsector_getjobresult, fee_30_smallsector_setmode }};
在fee层级配置的flash驱动接口如下:
/* fls api pointer table */const(fee_30_smallsector_flsapitype, fee_30_smallsector_private_const) fee_30_smallsector_flsapi0 = { /* read service */ fls_read, /* write service */ fls_write, /* compare service */ fls_compare, /* erase service */ fls_erase, /* blank check service */ fls_blankcheck, /* get status service */ fls_getstatus, /* get job result service */ fls_getjobresult};
发现没有,这一层的api并没有memaccm相关的接口,所以虽然规范定义了这样的层级结构,但是在实现上有多种可能,简单有效才是硬道理。
fee
之所以在车规mcu里需要提供这样的机制,主要还是为了节约成本,提供数据的高效、实时存储,满足车规对于data flash百万次刷写的要求。
在autosar的规范里,也提供了这样类似的示例机制来提高dflash的使用寿命:
在该示例中,共计有1500bytes数据需要管理,这些数据被均匀分成10个block;当fee发现某个block数据更改并且需要重新编程的时候,他会找到目前空闲的flash空间把数据写进flash并设置有效。需要注意的是,在设计fee驱动时,需要考虑到flash ip支持的最小可擦除单位和最小可编程单位,只要熟悉ip特性,才能做好flash磨损均衡算法。
小结
nvm的状态机每家供应商的代码区别还是挺大的,不过我们在看代码的时候首先需要了解这些api的调用时序,如下图为用户调用nvm_write服务的时序图:
熟读autosar nv data handling guideline,才能更好理解代码,必要时自己画一个状态迁移图。
来源:汽车mcu软件设计
光学相控阵测距研究分析
新一代信息技术产业加速落地,我国集成电路行业迎来发展“黄金期”
普通电视与智能电视哪个好
基美电子推出FLEX SUPPRESSOR是种超薄柔性噪声抑制片
本田展示了一个最新版本的ASIMO机器人
AUTOSAR存储栈分析之MemIfFee
远程医疗如何更好地落地 ADI在AI方面的发展规划
5G服务耗电巨大,氮化镓(GaN)技术来帮忙!
三极管的管脚如何判断?三极管的封装形式有哪些?
5G催化云游戏千亿蓝海,群雄逐鹿市场新空间
SMT回流焊工艺中英文对照表
基于DSP的声控电子记事本系统
特斯拉软件更新 将扩大Model 3的里程量
低功耗广域网(LPWAN)技术集成了 ARM M3 处理器和硬件加密引擎?
5G实现万物互联,推动产业互联网发展
电动机保护器电路图
铝基板有什么优势
扬声器保护电路设计图
网络泰捷网络盒子:凭良心做产品打造口碑爆款!
TI嵌入式产品研讨会:介绍Sitara的PRU模块