EasyFlash

2025-12-11 0 660

EasyFlash

1、介绍(English)

提示 :从 EasyFlash V4.1 后,基于 EasyFlash 全新设计开发的 FlashDB 开源项目正式上线,新集成了时序数据库、多分区管理,多数据库实例等功能,也从一定程度上提升了整体性能,欢迎关注:https://gi**thub*.com/armink/FlashDB 。同时,现有的 EasyFlash 也会继续维护。

EasyFlash是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗、物联网等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上存储器。该库主要包括 三大实用功能

  • ENV 快速保存产品参数,支持 写平衡(磨损平衡)掉电保护 功能

EasyFlash不仅能够实现对产品的 设定参数运行日志 等信息的掉电保存功能,还封装了简洁的 增加、删除、修改及查询 方法, 降低了开发者对产品参数的处理难度,也保证了产品在后期升级时拥有更好的扩展性。让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。

  • IAP 在线升级再也不是难事儿

该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。

  • Log 无需文件系统,日志可直接存储在Flash上

非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。

1.1 两种 ENV 模式

目前 ENV 功能有两种主要模式,一种为 V4.0 带来的 NG 模式,还有一种为延续 V3.0 的 legacy 模式

1.1.1、V4.0 引入的 NG 模式

对应源码文件为: ef_env.c

自 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.2 支持);
  • 支持 数据加密 ,提升存储的安全性,物联网时代的必备功能(即将在 V4.3 支持);
  • 支持 数据压缩 ,减低 Flash 占用(即将在 V4.4 支持);

V4.0 设计及内部原理,V4.0 迁移指南等更多内容请继续阅读下面的 文档章节

注意 :个别 Flash 存在无法逆序写入的问题,例如 STM32L4 片内 Flash,所以无法使用 NG 模式,这种情况下建议使用 V3.0 的 legacy 模式

1.1.2、延续 V3.0 的 legacy 模式

对应源码文件为: ef_env_legacy.cef_env_legacy_wl.c

legacy 模式也具有磨损平衡及掉电保护功能,相比于 V 4.0 NG 模式,使用 legacy 模式,需要有额外的 RAM 空间来临时缓存每个 ENV ,最终调用 save 接口,统一擦除扇区再存储到 Flash 上。

1.1.3 ENV 模式对比

V4.0 NG 模式 V3.0 legacy 模式
RAM 资源占用
支持 Flash 全面性 个别 Flash 受限:例如 STM32L4 片内 比较全面
是否需要 GC 垃圾回收 需要 GC ,这会导致触发 GC 时,写入速度变慢 不需要
value 类型限制 无限制 对字符串类型支持的比较好
掉电保护 支持 支持
磨损平衡 支持 支持
增量升级 支持 支持

1.2、资源占用

最低要求: ROM: 6K bytes     RAM: 0.1K bytes

1.3、支持平台

目前已移植硬件平台有 stm32f10xstm32f4xx 系列的片内Flash,片外的 SPI Flash(基于 SFUD),这些也是笔者产品使用的平台。其余平台的移植难度不大,在项目的设计之初就有考虑针对所有平台的适配性问题(64位除外),所以对所有移植接口都有做预留。移植只需修改 \\easyflash\\port\\ef_port.c 一个文件,实现里面的擦、写、读及打印功能即可。

欢迎大家 fork and pull request(Github|OSChina|Coding) 。如果觉得这个开源项目很赞,可以点击项目主页 右上角的 Star,同时把它推荐给更多有需要的朋友。

2、流程

2.1、ENV:环境变量(KV数据库)

下图为通过控制台(终端)来调用环境变量的常用接口,演示了以下过程,这些接口都支持被应用层直接调用。

  • 1、创建“温度”的环境变量,名为 temp,并且赋值为 123
  • 2、保存“温度”到Flash中并重启(V4.0 版本的每个操作完自动保存,无需额外保存);
  • 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 文件内容。


1 Introduction

EasyFlash is an open source lightweight embedded flash memory library. It provides convenient application interface for MCU (Micro Control Unit). The developers can achieve more efficient and common application development based on Flash memory. The library currently provides three useful features

  • Env(environment variables) Fast Saves product parameters. Support write balance mode(wear leveling) and power fail safeguard.

EasyFlash can store setting parameters or running logs and other information which you want to keep after power down. It contains add, delete, modify and query methods. It helps developer to process the product parameters, and makes sure the product has better scalability after upgrade. Turns the Flash into a small NoSQL (non-relational databases) model and Key-Value stores database.

  • IAP : online upgrade is no longer a difficult thing.

The library encapsulates the IAP (In-Application Programming) feature common interface. Support CRC32 checksum. While supporting the bootloader and application upgrade.

  • Log : The logs can store to product\’s flash which has no file-system.

It\’s very suitable for small without a file system products. The developer can easy to locate and query problem when system crashes or freezes. You can use EasyLogger( A super-lightweight, high-performance C log library which open source by me. It provides a seamless interface with EasyFlash) at the same time. So, it\’s so easy to store the logs to flash.

1.1 Resource consumption

Minimum : ROM: 6K bytes     RAM: 0.2K bytes

1.2 Supported platforms

Hardware platform has been ported SPI Flash, stm32f10x and stm32f4xx series of on-chip Flash. These are my product platforms. Remaining platform porting difficulty is little. To port it just modify \\easyflash\\port\\ef_port.c file. Implement erase, write, read, print feature.

Welcome everyone to fork and pull request(Github|OSChina|Coding). If you think this open source project is awesome. You can press the Star on the top right corner of project home page, and recommend it to more friends.

2 Flow

2.1 Env(KV database)

The figure below shows an ENV\’s common interface be called by the console (terminal). These interfaces are supported by the application layer called.

  • 1.Create temperature environment variable. It\’s name is temp and value is 123;
  • 2.Save temperature to flash and reboot;
  • 3.Check the temperature has saved successfully;
  • 4.Change the temperature value to 456 and save, reboot;
  • 5.Check the temperature has changed successfully;
  • 6.Delete temperature environment variable.

2.2 IAP

The figure below shows the process of upgrading software through the console by IAP. It use this library comes with IAP function interface. It uses a serial port + Ymodem protocol mode. You can also be achieved through CAN, 485, Ethernet bus to online upgrade.

2.3 Log

The following figure is the output of the log process through the console. The logs are saved to flash at real time. Then the board is rebooted and the logs back are read back from flash. At last logs will be erased.

3 Documents

All documents are in the \\docs\\en\\ folder. Please read the documents before porting it and using it.

4 License

Using MIT open source license, please read the project LICENSE file.

下载源码

通过命令行克隆项目:

git clone https://github.com/armink/EasyFlash.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 建站资源 EasyFlash https://www.zuozi.net/34892.html

inter
下一篇: inter
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务