版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28877125/article/details/90495101
之前没有遇到过这方面的需求,现在遇到了,记录下来:
一般来说,flash芯片会支持以下几种擦除接口。
擦除接口:
- 1、256Byte擦除接口(页擦除)
- 2、4KByte擦除接口(块擦除)
- 3、32KByte擦除接口(扇区擦除)
- 4、64KByte擦除接口(扇区擦除)
一种最简单的处理思想就是:
一个地址先判断它是否是64K的开始地址、是否是32K的开始地址、是否是4K的地址如果不是(说明只能使用256B的擦除方法了)再判断这个地址加上256B是否大于结束地址,不大于就执行擦除操作。然后这个地址就加上256B,然后进入下一个这种循环,循环反复,知道这个地址等于结束地址
但是,flash操作和其他不同的地方就是:
1、最简单的全部使用256B 擦除方法(1024~52224)–需要循环200次。
#include "stdio.h"
typedef unsigned int uint32_t;
void page_earase(uint32_t addr)
{
printf("256B: %d\r\n", addr);
}
void sector_earase(uint32_t addr)
{
printf("4K: %d\r\n", addr);
}
void block32_earase(uint32_t addr)
{
printf("32K: %d\r\n", addr);
}
void block64_earase(uint32_t addr)
{
printf("64K: %d\r\n", addr);
}
void block_file_earase(uint32_t start, uint32_t end)
{
uint32_t size = end - start;
for (int i = 0; i < (size / 256); i++)
{
page_earase(start+(256*i));
}
printf("total: %d\r\n", size/256);
}
int main(void)
{
block_file_earase(1024, 52224);
return 0;
}
2、加入4KB的擦除方法(1024~52224)–需要循环200次。