FDS,全稱Flash Data Storage,用來訪問芯片內部Flash的。當你需要把資料存盤在Flash中,或者讀取Flash中的用戶資料,或者更新或者洗掉Flash中的資料,那么FDS模塊是你最好的選擇。FDS采用檔案和記錄方式來組織Flash資料,也就是說,真正的資料是放在一條記錄中,而多條記錄組成一個檔案。根據應用的需要,整個系統可以只有一個檔案,也可以包含多個檔案。檔案采用檔案ID來標示,檔案ID為2個位元組(注:不能取值為0xFFFF)。一個檔案下面可以放一條記錄,也可以放多條記錄,記錄是通過記錄key來標示的,記錄key也是2個位元組長度(注:不能取值為0x0000)。這里需要注意的是,同一個檔案下面的兩潭訓者多條記錄他們的key可以是一樣的,比如我們可以建立如下檔案系統:檔案1包含2條記錄,檔案2包含3條記錄,檔案2包含2條key為0x0003的記錄
通過fds_record_write創建新的記錄,即寫記錄。注意寫記錄的時候,必須保證輸入引數是全域變數或者static的區域變數,推薦使用全域變數!由于record key可以重復,所以連續呼叫兩次相同的fds_record_write,將生成兩條同樣key的記錄。前面也提及過,fds_record_write是異步的,所以它的回傳值為success只是表示操作入隊成功,真正的flash操作結果是通過前面注冊的fds_evt_handler來通知的。
void Write_Flash_Data(uint16_t ID, uint16_t KEY, uint8_t *data)
{
ret_code_t ret = 0;
fds_record_desc_t dvr_sn_desc = {0};
fds_find_token_t tok = {0};
fds_record_find(ID, KEY, &dvr_sn_desc, &tok);
fds_record_delete(&dvr_sn_desc);
fds_record_chunk_t chunk;
fds_record_t record;
record.file_id = ID;
record.key = KEY;
static uint8_t w_data[16];
memcpy(w_data, data, 16);
chunk.p_data = (uint8_t *)w_data;
chunk.length_words = 4;
record.data.p_chunks = &chunk;
record.data.num_chunks = 1;
ret = fds_record_write(&dvr_sn_desc, &record);
APP_ERROR_CHECK(ret);
}
bool Read_Flash_Data(uint16_t ID, uint16_t KEY, uint8_t *data)
{
fds_find_token_t tok = {0};
fds_record_desc_t dvr_sn_desc = {0};
if(fds_record_find(ID, KEY, &dvr_sn_desc, &tok) == FDS_SUCCESS)
{
fds_flash_record_t record = {0};
fds_record_open(&dvr_sn_desc, &record);
memcpy(data, record.p_data, 16);
fds_record_close(&dvr_sn_desc);
return true;
}
return false;
}
使用SDK 12.2 除錯通過,分為讀寫2個函式來完成
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/117212.html
標籤:單片機/工控
上一篇:簡易頻率特性測驗儀
