EasyFlash轻量级物联网设备信息存储方案
1、介绍
EasyFlash是一款开源的轻量级面向嵌入式平台的Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上存储器。该库目前提供 三大实用功能 :
- Env 小型KV数据库,支持 写平衡(磨损平衡) 及掉电保护模式
让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。在产品上,能够更加简捷的实现 设定参数 或 运行日志等信息掉电保存的功能。
- IAP 在线升级再也不是难事儿
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。
- Log 无需文件系统,日志可直接存储在Flash上
非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。
1.1、V4.0 NG 模式
自 2019 年春节后,EasyFlash 经过 4 年多的迭代,结合众多开发者的需求及建议,终于发布了 V4.0 版本,该版本中的 ENV 功能被命名为 NG (Next Generation) 模式,这是一个完全重构的新版本,具有以下新特性:
-
更小的资源占用,内存占用 几乎为 0 ;(V4.0 以前版本会使用额外的 RAM 空间进行缓存)
-
ENV 的值类型支持 任意类型 、任意长度,相当于直接 memcpy 变量至 flash ;(V4.0 之前只支持存储字符串)
-
ENV 操作效率比以前的模式高,充分利用剩余空闲区域,擦除次数及操作时间显著降低;
-
原生支持 磨损平衡、掉电保护功能 (V4.0 之前需要占用额外的 Flash 扇区);
-
ENV 支持 增量升级 ,固件升级后 ENV 也支持升级;
-
支持大数据存储模式,长度无限制,数据可在多个 Flash 扇区上顺序存储。像脚本程序、音频等占用 Flash 超过 1 个扇区的资源也都可以存入 ENV(即将在 V4.1 支持);
-
支持 数据加密 ,提升存储的安全性,物联网时代的必备功能(即将在 V4.2 支持);
-
支持 数据压缩 ,减低 Flash 占用(即将在 V4.3 支持);
1.2、资源占用
最低要求: ROM: 6K bytes RAM: 0.1K bytes
1.3、支持平台
目前已移植硬件平台有 stm32f10x 与 stm32f4xx 系列的片内Flash,SPI Flash,这个也是笔者产品使用的平台。其余平台的移植难度不大,在项目的设计之初就有考虑针对所有平台的适配性问题(64位除外),所以对所有移植接口都有做预留。移植只需修改 \easyflash\port\ef_port.c 一个文件,实现里面的擦、写、读及打印功能即可。
欢迎大家 star and pull request(Github|OSChina) 。开源软件的成功离不开所有人的努力,也希望该项目能够帮助大家降低开发周期,让产品更早的获得成功。
2、流程
2.1、Env:环境变量(KV数据库)
下图为通过控制台(终端)来调用环境变量的常用接口,演示了以下过程,这些接口都支持被应用层直接调用。
- 1、创建“温度”的环境变量,名为 temp,并且赋值为 123;
- 2、保存“温度”到Flash中并重启;
- 3、检查“温度”是否被成功保存;
- 4、修改“温度”值为 456 并保存、重启;
- 5、检查“温度”是否被成功修改;
- 6、删除“温度”的环境变量。
2.2、IAP:在线升级
下图演示了通过控制台来进行IAP升级软件的过程,使用的是库中自带的IAP功能接口,演示采用的是串口+Ymodem协议的方式。你还也可以实现通过CAN、485、以太网等总线,来实现远程网络更新。
2.3、Log:日志存储
下图过程为通过控制台输出日志,并将输出的日志存储到Flash中。重启再读取上次保存的日志,最后清空Flash中的日志。
3、文档
-
API 文档:
\docs\zh\api.md
-
移植文档:
\docs\zh\port.md
-
V4.0 迁移指南:
\docs\zh\v4_migrate.md
-
V4.0 ENV 功能设计与实现:
\docs\zh\design.md
务必保证在 阅读文档 后再移植使用。
4、支持
如果 EasyFlash 解决了你的问题,不妨请我 喝杯咖啡~
5、版权
采用 MIT 开源协议,细节请阅读项目中的 LICENSE 文件内容。