一种简单的nor flash 备份恢复机制

背景: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的数据先读出来在把本次写的数据进行重新拼装。

数据恢复通过读写内部接口调用进行判断和恢复,读写数据前先调用恢复数据机制检验是否需要恢复数据,再读写数据,保证读取的数据是上次写的数据或意外写失败前备份的数据。

流程因为无法直接剪贴,所以暂时略。

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nor Flash代码是一种非易失性存储器的编程语言。Nor Flash一种常见的闪存技术,用于存储固件、操作系统和其他固化数据。Nor Flash代码使用类似于C语言的语法,它可以用来编写存储在Nor Flash芯片中的程序和数据。以下是一个简单的Nor Flash代码示例: ```c #include <flash.h> // 定义存储位置和大小 #define FIRMWARE_START_ADDRESS 0x100000 #define FIRMWARE_SIZE 0x8000 // 定义固件数据 const uint8_t firmware_data[FIRMWARE_SIZE] = { 0x00, 0x01, 0x02, 0x03, // 在这里添加实际的固件数据 }; // 主程序入口 int main() { // 初始化Nor Flash硬件 flash_init(); // 擦除存储区域 flash_erase(FIRMWARE_START_ADDRESS, FIRMWARE_SIZE); // 写入固件数据 flash_write(FIRMWARE_START_ADDRESS, firmware_data, FIRMWARE_SIZE); // 退出程序 return 0; } ``` 以上是一个简单的Nor Flash代码示例,它首先包含了flash头文件,然后定义了固件在Nor Flash中的存储位置和大小。接着,定义了固件数据的数组,这里只是一个简单的示例,实际情况下应该包含实际的固件数据。然后,在主程序入口函数中,通过flash_init()函数初始化Nor Flash硬件,然后使用flash_erase()函数擦除存储区域,最后使用flash_write()函数写入固件数据。最后,返回0表示程序正常退出。 这只是一个简单的示例,实际应用中可能涉及更复杂的代码和功能。Nor Flash代码可以根据具体需求进行编写和调整,以实现相应的应用功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值