CP Autosar – NvM之flash

汽车安全 10个月前 admin
310 2 0

01

接上一篇  CP Autosar – 万字长文调试NvM


NvM 老规矩 先给同志们舞一个。

CP Autosar - NvM之flash


看完了读和写的调试过程,本质上就是通过对NvM、MemIf、Fee、Fls模块的层层封装和状态机跳转,最终操作指针实现对dflash的读和写。

但是光调试我们就跳过一大半的函数内容没看,而且对于 Fee_Cache、扇区的换页、擦除好像也是未知的。

接下来通过调试 Fee_Init() 和写测试代码来继续我们的调试。

02

Fee初始化

Fee初始化主要就是通读DFlash来确认扇区的状态来判断之后

 Fee_MainFunction() 需要做些什么事。说到扇区,先看一下和本文匹配的Isolar配置。


CP Autosar - NvM之flash

其实就是简单的分了2个扇区,每个扇区大小为0xF000。


回到Fee_Init(),它都做了些什么呢。

首先就是初始化模块的变量,

如:Fee_GlobInfoLastRdHeader_st

Fee_LLSectorOrder_stFee_RdWrOrder_st Fee_GlobInfoWrBlock_st


接下来就是从0xAF000000开始读起了。

调用 Fee_LLDetectActiveSector()确认当前活跃的扇区。

首先通过一系列调用,将扇区的log信息读取到结构体 Fee_LLSectorOrder_st 上。

CP Autosar - NvM之flash

那么过程是如何呢?咱们看这个调试图:


CP Autosar - NvM之flash

通过对Readadress+8,做到一页一页将log区信息(一共96个字节)读取到

Fls_lMainBlankCheck[]上。

那么图中相应区域的数字都是什么含义呢?附上log信息的结构体:

CP Autosar - NvM之flash

当前扇区的状态:

01代表 FEE_ERASED_MARKER_ID_E

02代表 FEE_USED_MARKER_ID_E;

05代表 FEE_START_MARKER_ID_E

 

确认扇区之后,就要通读整个扇区0xF000,来确定Fee_Cache,为之后的ReadAll确认block的位置。

CP Autosar - NvM之flash

CP Autosar - NvM之flash

CP Autosar - NvM之flash


从Data窗口看,首先读取0xaf000060区域,找到了Block header 0xA53C96

通过Fee_Id为05,然后将0x60的地址赋值到Fee_Cache_au32[2],即FEE_Blo

ckPropertise_st[2]的存储位置为0x60。

之后通读全部数据(0xaf000000-0xaf00effff),即得到所有FEE_Block的位置信息了。



03

换页、扇区处理

首先,使用miniwiggle清空DFLASH。

CP Autosar - NvM之flash


CP Autosar - NvM之flash

然后就可以看到ChangeCnt变成了1,2,即是扇区第一次使用。


然后写点压力测试代码,循环写入FEE,让第一个扇区存满。如下视频:

CP Autosar - NvM之flash


在如下区域打上断点,默默等待扇区写满。

CP Autosar - NvM之flash

当第一个扇区即将写满时,我们看看栈区的函数调用,

CP Autosar - NvM之flash

扇区的log区域信息变更:

CP Autosar - NvM之flash

可以看到多了信息0x03,对应

CP Autosar - NvM之flash

扇区已满。


之后则会调用扇区重组函数:

CP Autosar - NvM之flash

启用第二片扇区:

CP Autosar - NvM之flash

CP Autosar - NvM之flash


启用扇区之后,开始依次去拷贝Fee_Cache_au32中的内容到新的扇区中,即做备份。可以看下状态机、RdAdress、WrAdress的变化

CP Autosar - NvM之flash

最后再去更新Fee_Cache_au32,

CP Autosar - NvM之flash


整个备份过程结束后,开始擦除第一个扇区,

CP Autosar - NvM之flash

在函数Fee_LLEraseSector() 执行完之后:

CP Autosar - NvM之flash

原来的扇区1变成了现在的扇区3,并更新扇区3的log区域的log信息。

之后就可以在扇区2继续做NvM的读写了。

CP Autosar - NvM之flash



突发奇想:

如果在备份的过程中断电会怎样呢?!

CP Autosar - NvM之flash

经过调试后发现,Fee会根据Log信息中存储的状态,判断当前处于什么状态,然后接着备份。


>>谢谢阅读<<


原文始发于微信公众号(汽车与基础软件):CP Autosar – NvM之flash

版权声明:admin 发表于 2023年7月16日 上午12:01。
转载请注明:CP Autosar – NvM之flash | CTF导航

相关文章

2 条评论

您必须登录才能参与评论!
立即登录