目录
定义下扇区操作编号及定义了将要写入flash数据的数组和用来缓存flash数据的数组
接下来我们从0x77000地址起,读出16个数据(每个数据占4字节)
ESP-12F模组的外部Flash,除了存储系统程序、系统参数外,还可以用来存储用户数据,复位/掉电也不会丢失用户数据。
ESP-12F模组的外部Flash == 32Mbit == 4MB
Flash 4MB 的地加== 0x000 000
Ox3ER FEE
扇区编号:0x000~ Ox3FF 【Flash扇区==4KB 】
注意:
•读/写Flash的地址,不能和系统程序区冲突。可以放在【Ox70 000】 地址后
•Flash读写,必须【4字节】对齐 也就是我们读写数据的时候尽量四个字节四个字节操作
•向Flash某扇区写数据前,须先将此扇区擦除。Flash擦除两数的参数 == 【扇区编号】!=【字节地址】
•读/写Flash数据函数的参数 == 【字节地址】!=【扇区编号】
spi_flash_erase_sector 功能: 擦除 Flash 扇区
spi_flash_write 功能: 写⼊数据到 Flash。Flash 读写必须 4 字节对⻬。
spi_flash_read 功能: 从 Flash 读取数据。Flash 读写必须 4 字节对⻬。
功能: ① 向外部Flash【0x77 000】地址起,写入"1~16"
② 从外部Flash【0x77 000】地址起,读出16个数据
#define SPI_FLASH_SEC_SIZE 4096 // Flash扇区是4kb也就是4096个字节
u16 N_Data_FLASH_SEC = 0x77; // 存储数据的扇区编号 这里定义的编号为0x77
u32 A_W_Data[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; // 写入Flash的数据
u32 A_R_Data[16] = {0}; // 缓存读Flash的数据
向Flash某扇区写数据前,须先将此扇区擦除。
向【0x77 000】地址起,写入16个数据(每个数据占4字节)
spi_flash_erase_sector(0x77); // 擦除0x77扇区 参数==【扇区编号】
向Flash写数据(参数1=【字节地址】、参数2=写入数据的指针、参数3=数据长度)
这里需要注意参数1是字节地址不是扇区编号,扇区编号乘上扇区大小就是扇区的首地址也就是0x77000。参数二必须为无符号32位整型指针,其实这里的A_W_Data数组已经是无符号32位整型指针,但这里加上(uint32 *)强制类型转换是为了提醒大家。参数三是数据长度,它是以字节为单位的,这里计算出写数据数组的大小。
spi_flash_write(0x77*4096, (uint32 *)A_W_Data, sizeof(A_W_Data));
spi_flash_read(0x77*4096, (uint32 *)A_R_Data, sizeof(A_W_Data));
- for(C_loop=0; C_loop<16; C_loop++)
- {
- os_printf("Read Data = %d \r\n",A_R_Data[C_loop]);
-
- delay_ms(10);
- }