FSKV是LuatOS系統專為嵌入式設備設計的鍵值對(Key-Value)存儲庫,其作用是在Flash存儲器中持久化存儲鍵值對數據,允許開發者以鍵值對的形式存儲和檢索數據,并且這些數據會被持久化存儲在Flash存儲器上,確保設備斷電后數據不會丟失。
目前,FSKV核心庫已全面支持合宙基于LuatOS開發的產品。
一、FSKV核心庫主要特性
相比于傳統的FDB庫,FSKV在性能方面有顯著提升,同時保持了API的簡潔易用。通過均衡擦寫機制,FSKV還能有效延長Flash存儲器的使用壽命,確保在設備整個生命周期內數據的可靠存儲。
1.1 核心特點:
持久化存儲:
數據寫入Flash,斷電后不丟失;
功能豐富:
提供初始化、設置、獲取、刪除等完整API,如:
fskv.init():初始化
fskv.set(key, value):存儲數據
fskv.get(key):讀取數據
fskv.del(key):刪除數據
穩定高效:
讀寫速度恒定,不受 “臟數據” 影響,最高10萬次均衡擦寫;
優化數據長度限制:
如value最大4096字節,key最大63字節。
1.2 實現原理:
FSKV核心庫原理是在模組片上Flash單獨開辟了一個總可用空間是64K的小區域,跑了個小文件系統,單獨操作,實現類似于微型數據庫的功能,只支持操作芯片自身的Flash文件系統,不支持操作通過IF核心庫或者SFUD核心庫掛載的文件系統。
簡單來說——FSKV核心庫就是一個 “嵌入式設備里的小數據庫”,專門用來安全、穩定地存放配置或業務數據,斷電也不會丟。

▼ 關于KV鍵值對數量 ▼
FSKV一共64K,16個塊,每塊大小4K。
初始化時會分配2個塊用于小型數據,所以大型數據最多只能存儲14對,每對KV數據占據一個塊。
小型數據(Value ≤ 255 字節)
當Value長度≤ 255字節時,所有KV對會復用初始分配的8192字節空間,極限最多存儲812對,此時V值只有1字節。
大型數據(Value ≥ 256 字節)
當Value長度 ≥ 256字節時,每次寫入都會觸發新塊分配(4096字節),每對KV數據占據一個塊,所以大型數據最多存儲14對。
1.3 FSKV與其他存儲區域的區別:
與其他掉電不丟失的存儲區域(如OTP、IMEI、SN)不同,FSKV具有其獨特的適用場景和操作特性:
FSKV:
可以在LuaTools燒錄程序時進行清除,輕量快速,適合零散配置,頻繁讀寫效率高,比如存儲串口波特率、服務器IP等用戶的應用數據。
OTP:
加鎖后不可篡改,安全性高,適合固定關鍵數據,比如存儲射頻校準數據、密鑰等。
IMEI:
國際移動設備識別碼,每個設備全球唯一,永久只讀不可修改,是設備入網的 “身份證”,用于蜂窩模組入網、合規認證等需求。
SN:
設備序列號,合宙內部唯一,默認只讀,可快速關聯生產/售后信息,方便設備管理,常用于設備售后報修、生產追溯等。具體使用可以參考mobile核心庫。
1.4 特別說明
針對社群工程師朋友應用開發中的疑問,這里特別說明一下10萬次均衡擦寫的相關問題。
▼10萬次均衡擦寫 ▼
10萬次均衡擦寫——是指Flash存儲的單個單元最多能承受10萬次 “擦除 - 寫入” 循環,再通過均衡擦寫技術將數據分散到所有單元,避免個別單元提前損壞,從而延長整體設備壽命。從原理上來說,依靠均衡擦寫技術,設備能持續的穩定使用。
社群工程師朋友提問:
均衡2個詞如何解讀?
另外, 讀是不限次數的,對吧?
簡要解答:
就是同一個地址,只能擦寫10萬次;
讀的次數不限制。
你每次寫fskv,不一定是在同一個地址,fskv的實現,會盡量在不同的地址擦寫,提升你的使用次數,這就叫做擦寫均衡。
二、FSKV核心庫應用示例
提供了FSKV核心庫API的參考示例及demo實操教程,幫助開發者快速上手,實際應用中可結合具體業務需求靈活調整。

核心示例代碼如下,完整demo詳見源碼倉庫最新文件。

審核編輯 黃宇
-
嵌入式設備
+關注
關注
0文章
121瀏覽量
17730
發布評論請先 登錄
什么是嵌入式應用開發?
分享一個嵌入式開發學習路線
嵌入式與FPGA的區別
嵌入式工控機:工業自動化的核心運算單元
嵌入式和單片機,是同一個東西嗎?
怎么結合嵌入式,Linux,和FPGA三個方向達到一個均衡發展?
FSKV:給嵌入式設備一個“不會失憶的大腦”
評論