背景:nor flash在写数据前都需要先把整个section(64K block )擦除再写,但是在这个过程意外断电,那么这个section(64K block )数据将全部丢失,为了保证这种意外丢失,本文将采用另外一个section(64K block )进行备份后恢复。
数据恢复机制是采用一个block用于存放数据,一个block用于备份和恢复数据的数据管理方法,前提条件是保存的数据长度必须小于64K – 16byte;16byte用于备份数据的校验和恢复标记;机构如下:
备份地址(4Byte) |
备份长度(4Byte) |
备份数据CRC(4Byte) |
备份标记(3Byte)+恢复标记(1Byte) |
备份标记:0x3C4B5A
恢复标记:restore_flag,当标记为0x0F时,表示上次写数据没有完成,其他值忽略;当完成恢复数据或写数据后,标记为设置为0x00;
如果数据读写采用动态的地址增量写法,增量地址和长度的最后位置满足条件:最后地址+长度<64k-16才能应用恢复功能。
备份机制生效条件,数据保存采用两个block进行保存,当只有一个block时,备份功能失效。
数据备份有两种模式选择,一种是备份上次写前的fash数据,另一种是备份本次要写的数据;
数据区的扩展,写数据必须先把整个section的数据先读出来在把本次写的数据进行重新拼装。
数据恢复通过读写内部接口调用进行判断和恢复,读写数据前先调用恢复数据机制检验是否需要恢复数据,再读写数据,保证读取的数据是上次写的数据或意外写失败前备份的数据。
流程因为无法直接剪贴,所以暂时略。