• Flash----读写外部Flash


    目录

    前言

    Flash相关API 

    Flash工程 

    首先定义下flash扇区大小 

    定义下扇区操作编号及定义了将要写入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数据函数的参数     ==   【字节地址】!=【扇区编号】

    Flash相关API 

    spi_flash_erase_sector      功能: 擦除 Flash 扇区

    spi_flash_write                    功能: 写⼊数据到 Flash。Flash 读写必须 4 字节对⻬。

    spi_flash_read                     功能: 从 Flash 读取数据。Flash 读写必须 4 字节对⻬。

    Flash工程 

    功能:    ① 向外部Flash【0x77 000】地址起,写入"1~16"        
                   ② 从外部Flash【0x77 000】地址起,读出16个数据        
                                           

    首先定义下flash扇区大小 

    #define        SPI_FLASH_SEC_SIZE    4096        // Flash扇区是4kb也就是4096个字节

    定义下扇区操作编号及定义了将要写入flash数据的数组和用来缓存flash数据的数组

    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));
    

    接下来我们从0x77000地址起,读出16个数据(每个数据占4字节)

    	spi_flash_read(0x77*4096, (uint32 *)A_R_Data, sizeof(A_W_Data));
    

    读完数据后,串口打印读出的数据

    1. for(C_loop=0; C_loop<16; C_loop++)
    2. {
    3. os_printf("Read Data = %d \r\n",A_R_Data[C_loop]);
    4. delay_ms(10);
    5. }

  • 相关阅读:
    【大数据毕设】基于Hadoop的音乐管理系统论文(三)
    Linux 常用操作指令
    Allegro Design Entry HDL(OrCAD Capture HDL)视图管理菜单详细介绍
    缓存存在的问题:缓存穿透、缓存击穿、缓存雪崩
    wps 开发插件
    微信小程序开发之自定义组件(会议OA项目其他页面搭建)
    进阶课2——语音分类
    Autocad绘制的基于工控机的电加热炉的强电电路图
    算法入门之链表简介
    第一个Mybatis程序
  • 原文地址:https://blog.csdn.net/Paradise_Violet/article/details/125896969