之前没有遇到过这方面的需求,现在遇到了,记录下来: 一般来说,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次。
