我们在开发的时候经常要存储一些自定义参数写入内部FLASH并读取出来,本文讲解中科蓝讯SDK的内置FLASH读法方法。
首先了解一下中科蓝讯的芯片框架结构:
芯片内部一般会封装一颗 512K 或 1M SpiFlash,用于存放代码及资源文件/参数记忆等。SpiFlash 和芯片之间通过 spi 接口进行通信。
首先,代码不会直接在 SpiFlash 上运行,SpiFlash 中所有程序及数据均需要先通过 spi 接口加载到芯片 RAM 中,CPU 再从 RAM 中取指令或数据运行。
以上就是中科蓝讯平台 FLASH 相关内容的介绍。下面我们探讨一下内部Flash读写方法,难免会有失误,欢迎大家一起留言探讨,谢谢大家!
设定写入地址
文件:appplatformbspbsmatchp_param.h添加要写的自定义参数的相对地址
调API读写FLASH
API
写 flash cache函数
cm_write8(u32 addr, u8 val); //注意:write 只是写入 cache;
addr 是待写入的地址值,val 是需要写入的值;
cm_sync(); //将 write 写入 cache 的内容同步到 spiflash 中;
注意此接口函数在写入操作后进行调用是必须的,否则写入操作不会生效。
读 flash cache函数
cm_read8(u32 addr);
addr 是准备读取的地址值,函数返回值是我们读取到的结果值。
写参数接口函数
void bsp_param_write(u8 *buf, u32 addr, uint len);
读参数接口函数
void bsp_param_read(u8 *buf, u32 addr, uint len);
示例:
在main.c bsp_sys_init后添加下面代码
#if FLASH_RW_TEST_EN
u8 readPram[16];
bsp_param_write("Prama testn", PARAM_USER_DATA, 16);
bsp_param_read(readPram, PARAM_USER_DATA,16);
printf("%s", readPram);
#endif // FLASH_RW_TEST_EN
在配置文件config.h里,添加
#define FLASH_RW_TEST_EN 1
正式发布不需要这个测试,在配置文件里,把定义值改为0即可。
编译烧录、调试
开启开发功能,烧录后,会打印日志, 验证是否读写成功。