关于flash 部分擦除、写入的实现

方案适用flash存储器

在工作中总是遇到关于flash操作的问题,nandflash写之前必须先擦除,擦除还必须是页擦除,就写几个字节,页擦不全没了!真是不方便。

这里记录一下自己的实现,以便日后开发,也便利大家,如果有好的建议,欢迎大家讨论

先写一下思路:
由于flash的工作原理,故支持从1写0,不支持从0写1,利用这一点,最终只要保证我们要擦除、或将来写数据的地址为全ff即可。

  1. 判断自己需要擦除多长的地址,需要连续处理几页。
  2. 准备1~2页缓冲区(这里看内存可以大),擦除。
  3. 将原始数据全部存放到缓冲区。
  4. 擦除原始区,将本页要擦除地址之前的数据写回,需要计算偏移地址。
  5. 操作地址偏移增加要擦除的长度。
  6. 将本次要擦除地址之后的数据写回。
  7. 操作结果为:擦除指定地址起始指定长度的数据区。

代码区:
//擦除指定地址、指定长度数据,length为字节数
#define FLASH_TMP(120 * FLASH_PAGE_SIZE)//交换区起始地址
BOOL flash_erase_byte(UINT32 start_addr, UINT32 length)
{
UINT8 i = 0;
UINT32 start_page = 0, page_cnt = 0;//起始页、操作的页数
UINT32 op_addr = 0, op_len = 0;//数据写回操作的偏移地址
//计算起始扇区号&扇区数
start_page = start_addr / FLASH_PAGE_SIZE;//除以扇区大小
page_cnt = (length / FLASH_PAGE_SIZE);//判断输入长度是否超扇区长度
op_addr =(start_page * FLASH_PAGE_SIZE;
//准备交换区,将原数据读出
for(i = 0; i < page_cnt; i++)
if(!FLASH_Eraser_Page(page_cnt, FLASH_TMP))//准备1页交换区
return FALSE;
if(!FLASH_Read(op_addr,(UINT32*)FLASH_TMP,(page_cnt * FLASH_ PAGE_SIZE)))//数据转存交换区
return FALSE;//擦除起始扇区&扇区数
for(i = 0; i < page_cnt; i++)
if(!FLASH _Eraser_Page(page_cnt, op_addr))//擦除源数据
return FALSE;//将数据写回,除输入地址开始~长度之外
if(!FLASH_Read(FLASH_TMP,(UINT32*)op_addr,(start_addr - op addr)/4))
return FALSE;
op_addr +=(start_addr - op_addr);
if(op_addr != start_addr)
return FALSE;
op_addr += length;
op_len =(page_cnt * FLASH_PAGE_SIZE)-(op_addr -(start_page * FLASH_PAGB_SIZE));//剩余需要写回的数据长度
if(!FLASH_Read((FLASH_TMP + (op_addr - (start_page * FLASH
PAGE_SIZE))),(UINT32*)op_addr, op_Ien/4))
return FALSE;
//返回结果
return TRUE;
}

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JFlash是一种开发工具,用于在嵌入式系统中进行固件的烧录、调试和除操作。其中,除锁定是指在芯片内部设置了一种保护机制,防止未经授权的除操作。 当除锁定开启时,即使通过JFlash工具进行除操作,也会被阻止。这样做的目的是为了防止固件被非法篡改或者除,保障系统的安全性。 要解除除锁定,通常需要进行以下步骤: 1.准备正确的解锁密钥:每种芯片解锁密钥不同,需要在特定的开发者手册或数据手册中查找。 2.连接主机和目标设备:使用JFlash工具将开发主机与目标设备进行连接,确保能够正常通信。 3.选择除锁定功能:在JFlash工具中,选择相应的除锁定功能,通常可以在工具的菜单栏或界面上找到。 4.输入正确的解锁密钥:根据目标设备的要求,在JFlash工具中输入正确的解锁密钥。 5.执行解锁操作:点击工具界面上的解锁按钮,执行解锁操作。 6.等待解锁完成:JFlash工具会向目标设备发送解锁命令,等待设备完成解锁操作。 7.验证解锁结果:解锁完成后,可以通过重新进行除操作来验证设备是否已经解锁成功。 需要注意的是,除锁定是一种保护机制,对于正常的开发和使用来说是有益的。因此,只有在特定需要的情况下才应该解除除锁定。在进行任何解锁操作之前,请确保已经获得了相关的授权和许可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值