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错误