如何儲存資料到開發板,斷電不丟失

2021-10-10 19:39:15 字數 2995 閱讀 7689

實際產品開發過程中,我們肯定需要儲存一些資料,並且掉電不丟失。例如很多人在使用我之前寫的一篇wifi配網功能後,都會遇到乙個問題:我配置了wifi賬戶密碼,但是下次我又得重新配網,能不能把wifi賬戶密碼儲存起來?

好,接下來我們來實現這個功能:儲存資料到開發板,斷電不丟失。

有兩種方式:

1、使用kv系統——最簡單,推薦使用

kv系統可以儲存資料到flash,只需要簡單的兩個函式即可:

//刪除kv

void deletekvcache(const char* key);

//增加kv

void addkvcache(const char* key, const char* value, boolean isnew);

//獲取kv值

int getvaluebycache(const char* key, char* value, unsigned int maxlen);

//清除kv

int clearkvcacheinner(void);

例如://把ssid寫入到kv中

addkvcache("ssid", ssid, true);

//讀取出來kv

getvaluebycache("ssid",ssid,sizeof(ssid));

可以看到更加簡單高效~~推薦大家使用

2、nv系統——僅hi3861支援

首先我們要使用到 hi3861 的nv操作,它支援我們自定義一些資料儲存到工廠引數分割槽,其實就是寫入到hi3861的flash中。

不過這個功能使用挺複雜的,我們以儲存wifi賬戶密碼為例。

1、修改 mss_nvi_db.xml 檔案

開啟vendor\hisi\hi3861\hi3861\tools\nvtool\xml_file\mss_nvi_db.xml 檔案,在 factory 中增加我們的引數:id為0x0b 。

截圖的內容是這個:

2、修改 nv_factory_struct_def.txt 檔案 增加 結構體修改 vendor\hisi\hi3861\hi3861\tools\nvtool\h_file\nv\nv_factory_struct_def.txt,增加結構體:

typedef struct  wal_cfg_ssid_my;
3、編寫**,讀取寫入資料通常來說,需要先執行一次  hi_nv_init(0xa000, 0x2000, 0x1000);  進行初始化,但是由於系統啟動的時候已經初始化過了,所以我們不需要重複初始化。

//寫入到工廠區

/* nv值寫入 */

wal_cfg_ssid_my nv;

memset(&nv, 0, sizeof(wal_cfg_ssid_my));

memcpy_s(&nv.ssid[0], sizeof(wal_cfg_ssid_my), ssid, ssid_len);

memcpy_s(&nv.passwd[0], sizeof(wal_cfg_ssid_my), passwd, passwd_len);

ret = hi_factory_nv_write(nv_id, &nv, sizeof(wal_cfg_ssid_my), 0);

if (ret != hisi_ok)

/* 再次讀取寫入的nv值 */

ret = hi_factory_nv_read(nv_id, &nv, sizeof(wal_cfg_ssid_my), 0);

if (ret != hisi_ok)

printf("nv read : %d, ssid :[%s] psswd [%s]\n",ret, nv.ssid, nv.passwd);

附件我提供了乙個wifi配網的公升級版功能的原始碼,支援儲存wifi賬號密碼。

完成以上操作後,我們就可以發現wifi賬戶密碼可以寫入到nv中了,可以永久儲存資料了。檢視開機列印:

可以看到開機後讀取到ssid 和密碼正確,並且成功連線到wifi熱點了。

我們再來看這個nv的一些內容吧:

mss_nvi_db.xml 檔案記錄了所有系統引數的預設值,而且這個檔案其實還分組的:

可以看到分為 factory 和 modem。

nv模組用於管理系統關鍵配置資訊。 nv儲存於flash上,分為以下2個區:

● 工廠區 factory:僅在工廠時使用。

● 非工廠區 modem :分為以下2個區:

– keep區: nv項在公升級後保留原值

– modem區: nv項在公升級後被新版本值替換。

關於

每一項的說明如下:

關於

的每一項說明如下:

另外需要注意的是工廠區的讀寫操作跟非工廠區的讀寫操作的api不同

如何選擇開發板和保護開發板

1.開發板分為入門學習用的和評估用的。學習用的,對於新手入門用的。首先資料得多,比如三星s3c2440,這款晶元雖然已經停產了,但是作為入門來說,非常好。也有中文資料手冊,相關資料很多。當初我買開發板以看晶元效能來買的,結果到手後,資料很少,學不進去,最後只好又買了個2440的開發板。一般而言,ti...

如何手工掛載NFS到開發板

我們在練習驅動的時候,常常需要開發板共享伺服器的檔案,今天就來談談如何掛載nfs nfs network file system 網路檔案系統 nfs只是一種檔案系統,本身並沒有傳輸功能,是基於rpc協議實現的,為c s架構。也就是說,nfs也只是檔案系統而已,與jffs2,yaffs,ext4等是...

開發板資料!

到現在為止,我們一共開發了4款開發板bf531,其中,前面2款主要用於除錯,後面兩款我們準備將它放到槍機外殼中做到產品裡去。其次,我們還開發了一款ov7670開發板,現在已經焊接加工去了,估計明天下午可以到。下面,請跟隨我一起來認識下我們的開發板吧 第一款開發板未焊接時就長這個樣子 焊上元器件後,雖...