我們在開發(fā)的時候經(jīng)常要存儲一些自定義參數(shù)寫入內(nèi)部FLASH并讀取出來,本文講解中科藍訊SDK的內(nèi)置FLASH讀法方法。
首先了解一下中科藍訊的芯片框架結(jié)構(gòu):
芯片內(nèi)部一般會封裝一顆 512K 或 1M SpiFlash,用于存放代碼及資源文件/參數(shù)記憶等。SpiFlash 和芯片之間通過 spi 接口進行通信。
首先,代碼不會直接在 SpiFlash 上運行,SpiFlash 中所有程序及數(shù)據(jù)均需要先通過 spi 接口加載到芯片 RAM 中,CPU 再從 RAM 中取指令或數(shù)據(jù)運行。
以上就是中科藍訊平臺 FLASH 相關(guān)內(nèi)容的介紹。下面我們探討一下內(nèi)部Flash讀寫方法,難免會有失誤,歡迎大家一起留言探討,謝謝大家!
設(shè)定寫入地址
文件:appplatformbspbsmatchp_param.h添加要寫的自定義參數(shù)的相對地址
調(diào)API讀寫FLASH
API
寫 flash cache函數(shù)
cm_write8(u32 addr, u8 val); ?? //注意:write 只是寫入 cache;
addr 是待寫入的地址值,val 是需要寫入的值;
cm_sync(); ? //將 write 寫入 cache 的內(nèi)容同步到 spiflash 中;
注意此接口函數(shù)在寫入操作后進行調(diào)用是必須的,否則寫入操作不會生效。
讀 flash cache函數(shù)
cm_read8(u32 addr);
addr 是準(zhǔn)備讀取的地址值,函數(shù)返回值是我們讀取到的結(jié)果值。
寫參數(shù)接口函數(shù)
void bsp_param_write(u8 *buf, u32 addr, uint len);
讀參數(shù)接口函數(shù)
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
正式發(fā)布不需要這個測試,在配置文件里,把定義值改為0即可。
編譯燒錄、調(diào)試
開啟開發(fā)功能,燒錄后,會打印日志, 驗證是否讀寫成功。