18. FLASH读写

Overview

以 AC635N 为例,提供 FLASH 读写应用示例、工程配置、API 介绍和常见问题。

18.1. 应用示例

  • 具体的 FLASH 读写源代码详见 sdk/bsp/AC635N/src/flash_api.c

  • flash_test.c 中参考示例如下:

    void user_flash_test(void)
    {
        void flash_test(void);
        void flash_read_write_init(void);
        int flash_write_buff(u8 * buff, u32 addr, u32 len);
        int flash_read_buff(u8 * buff, u32 addr, u32 len);
    
        //1.初始化flash硬件,并读取ID、UUID、容量等
        flash_read_write_init(); //初始化flash硬件,并读取ID、UUID、容量等
    
        unsigned char *buff = malloc(4096);
        if (buff) { //4096字节读写测试
            for (int i = 0; i < 4096; i++) {
                buff[i] = (unsigned char)i;
            }
            //2.写数据
            flash_write_buff(buff, 1 * 1024 * 1024, 4096); //1M地址起始测试,写
            memset(buff, 0, 4096);
    
            //3.读数据
            flash_read_buff(buff, 1 * 1024 * 1024, 4096); //1M地址起始测试,读
            for (int i = 0; i < 4096; i++) {
                if (buff[i] != (unsigned char)i) {//校验
                    printf("user_flash_test test err buff[%d] = %d \n", i, buff[i]);
                    break;
                }
            }
            free(buff);
        }
        printf("---> user_flash_test over \n");
        while (1) {
            wdt_clear();
            mdelay(100);
        }
    }
    

18.2. 工程配置

  • sdk/apps/main.c 中函数 user_main() 添加如下工程代码:

    #define USE_FLASH_API
    #define USE_FLASH_TEST_DEMO
    
    int user_main()
    {
        extern void user_flash_test(void);
        user_flash_test();
    }
    
  • 编译下载后,串口会打印出测试 flash 读写 API 接口的结果,同时会打印 flash 的 id 和 uuid。

18.3. 常见问题

  • 用户如何指定系统使用的 flash 空间,预留剩下的空间自用?

    详细例子 :

    若flash大小为2M,用户需要flash的最后1M地址不受系统相关限制且随意由用户自己掌控,则配置系统使用1M,剩下1M给用户使用,在SDK对应的tools目录下的 isd_config.ini 设置如下:

    FLASH_SIZE=1M;//用户自行设定系统需要的flash大小,剩余部分用户自用
    NEW_FLASH_FS=YES;
    FORCE_VM_ALIGN=YES;
    CHIP_NAME=AC635N;//芯片型号
    

18.4. API参考

FLASH常用相关API介绍,具体软件代码见 sdk/bsp/AC635N/src/flash_api.c

Functions

void flash_read_write_init(void)

应用层用户初始化flash

int flash_write_buff(u8 *buff, u32 addr, u32 len)

应用层用户flash写数据,使用该函数前,先调用flash_read_write_init函数初始化flash

Parameters
  • buff – 数据地址

  • addr – flash起始地址

  • len – 数据长度

Returns

0正常 -1错误

int flash_read_buff(u8 *buff, u32 addr, u32 len)

应用层用户flash读数据,使用该函数前,先调用flash_read_write_init函数初始化flash

Parameters
  • buff – 数据地址

  • addr – flash起始地址

  • len – 数据长度

Returns

0正常 -1错误