天天看點

EasyFlash —— 開源輕量級嵌入式 Flash 存儲器庫

easyflash是一款開源的輕量級嵌入式flash存儲器庫,主要為mcu(micro control unit)提供便捷、通用的上層應用接口,使得開發者更加高效實作基于的flash存儲器常見應用開發。該庫目前提供 三大實用功能 :

env 小型kv資料庫,支援 寫平衡(磨損平衡) 及掉電保護模式

讓flash變為nosql(非關系型資料庫)模型的小型鍵值(key-value)存儲資料庫。在産品上,能夠更加簡捷的實作 設定參數 或 運作日志等資訊掉電儲存的功能。

iap 線上更新再也不是難事兒

該庫封裝了iap(in-application programming)功能常用的接口,支援crc32校驗,同時支援bootloader及application的更新。

log 無需檔案系統,日志可直接存儲在flash上

非常适合應用在小型的不帶檔案系統的産品中,友善開發人員快速定位、查找系統發生崩潰或當機的原因。同時配合easylogger(我開源的超輕量級、高性能c日志庫,它提供與easyflash的無縫接口)一起使用,輕松實作c日志的flash存儲功能。

1.1、資源占用

最低要求: rom: 6k bytes ram: 0.5k bytes + (env大小)

demo平台:stm32f103ret6 + rt-thread 1.2.2 + env(2k bytes)

實際占用: rom: 6k bytes ram: 2.6k bytes

1.2、支援平台

目前已移植硬體平台有 stm32f10x 與 stm32f4xx 系列的片内flash,這個也是筆者産品使用的平台。其餘平台的移植難度不大,在項目的設計之初就有考慮針對所有平台的适配性問題(64位除外),是以對所有移植接口都有做預留。移植隻需修改 easyflashportef_port.c 一個檔案,實作裡面的擦、寫、讀及列印功能即可。

歡迎大家 star and pull request(github|oschina) 。開源軟體的成功離不開所有人的努力,也希望該項目能夠幫助大家降低開發周期,讓産品更早的獲得成功。

2、流程

2.1、env:環境變量(kv資料庫)

下圖為通過控制台(終端)來調用環境變量的常用接口,示範了以下過程,這些接口都支援被應用層直接調用。

1、建立“溫度”的環境變量,名為 temp,并且指派為 123;

2、儲存“溫度”到flash中并重新開機;

3、檢查“溫度”是否被成功儲存;

4、修改“溫度”值為 456 并儲存、重新開機;

5、檢查“溫度”是否被成功修改;

6、删除“溫度”的環境變量。

EasyFlash —— 開源輕量級嵌入式 Flash 存儲器庫

2.2、iap:線上更新

下圖示範了通過控制台來進行iap更新軟體的過程,使用的是庫中自帶的iap功能接口,示範采用的是序列槽+ymodem協定的方式。你還也可以實作通過can、485、以太網等總線,來實作遠端網絡更新。

EasyFlash —— 開源輕量級嵌入式 Flash 存儲器庫

2.3、log:日志存儲

下圖過程為通過控制台輸出日志,并将輸出的日志存儲到flash中。重新開機再讀取上次儲存的日志,最後清空flash中的日志。

EasyFlash —— 開源輕量級嵌入式 Flash 存儲器庫