FEE是如何进行数据保护的?是否需要多备份?
-
1.Fee写入过程中未写入完成掉电,下次上电不会使用最后一次写入的数据,会使用前一次完整写入的数据。
-
2.当BLOCK没有写入数据时使用Fee_Read之后Fee_GetJobResult是返回MEMIF_BLOCK_INCONSISTENT;
3.Fee driver写入数据过程中,不会check用户数据的校验和,如果APP有需求,需要自行计算并将校验和数据放在Block数据中。 -
详细的Fee工作原理可参考
Fee应用笔记 V0.1.pdf -
houjun_xiao 在 FEE是如何进行数据保护的?是否需要多备份? 中说:
2.当BLOCK没有写入数据时使用Fee_Read之后Fee_GetJobResult是返回MEMIF_BLOCK_INCONSISTENT;
3.Fee driver写入数据过程中,不会check用户数据的校验和,如果APP有需求,需要自行计算并将校验和数据放在Block数据中。第3点指的是某个BLOCK ID已写过数据,后续去读的时候,由于FLASH异常或者被误擦除部分数据导致校验和验证失败,此时Fee_GetJobResult会返回MEMIF_JOB_FAILED还是MEMIF_BLOCK_INCONSISTENT还是MEMIF_BLOCK_INVALID?
另外,应该是写的过程中FEE driver自动生成校验和写入32Byte数据信息中对应的(Block Hdr)位,下次读取的时候会自动重新计算读出的数据校验和去和Block Hdr校验吧?若此时校验和不对Fee_GetJobResult应该返回什么? -
Fee模块在初始化时会搜寻每个Block的最后一次有效数据地址,在后面每次写入时,写入成功这个Block的有效数据地址就会更新。所以,你说的这种情况,除非人为的破坏掉他的最后一次有效数据,应该是不存在的。如果人为破坏掉最后一次有效数据,Fee是无法识别的,他还是会在之前识别的有效位置读取数据。如果Fee在Read的过程中遇到这个Block 存在Ecc错误,那么本次读取返回MEMIF_JOB_FAILED。
Block HDR位中没有Fee Data的校验和。如果APP需要校验和,建议加载自己的Block Data里面,例如在Data的最后四个字节用于存放校验和。 -
按照文档记录,每个Cluster和Block信息里都会有相应的校验和以及有效标志位,就是说这些暂时没有使用,需要我们自己在每个block结尾加上个校验?还是说这些校验和只是校验信息本身的内容,不包含data里的数据
-
校验和只是针对HDR的,与Block的用户数据没有关联。valid标志是在数据写完之后写入的,只有前面的所有Block数据写入成功以后,才会写入valid标志,所以valid标志存在,即这一个Block数据即有效。
-
houjun_xiao
当写block的时候,出现写失败(FLASH坏块等异常),FEE是否会自动寻找下个地址继续写,直到成功?
再次触发写的时候是否会跳过该坏块? -
Fee写入Block失败之后,不会自动重复写入该Block,是否再次写入由用户决定。再次写入时,会跳过刚才写入的地址范围,在新的空白区域写入,不会在之前写入失败的区域进行二次写入。
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...