嵌入式单片机应用开发--FLASH的擦除操作(擦除开始地址到结束地址内的数据)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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次。

猜你喜欢

转载自blog.csdn.net/qq_28877125/article/details/90495101