EasyFlash是一款开源的轻量级面向嵌入式平台的Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上存储器。该库目前提供 三大实用功能 :
让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。在产品上,能够更加简捷的实现 设定参数 或 运行日志等信息掉电保存的功能。
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。
非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。
自 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 支持);
最低要求: ROM: 6K bytes RAM: 0.1K bytes
目前已移植硬件平台有 stm32f10x 与 stm32f4xx 系列的片内Flash,SPI Flash,这个也是笔者产品使用的平台。其余平台的移植难度不大,在项目的设计之初就有考虑针对所有平台的适配性问题(64位除外),所以对所有移植接口都有做预留。移植只需修改 \easyflash\port\ef_port.c 一个文件,实现里面的擦、写、读及打印功能即可。
欢迎大家 star and pull request(Github|OSChina) 。开源软件的成功离不开所有人的努力,也希望该项目能够帮助大家降低开发周期,让产品更早的获得成功。
下图为通过控制台(终端)来调用环境变量的常用接口,演示了以下过程,这些接口都支持被应用层直接调用。
下图演示了通过控制台来进行IAP升级软件的过程,使用的是库中自带的IAP功能接口,演示采用的是串口+Ymodem协议的方式。你还也可以实现通过CAN、485、以太网等总线,来实现远程网络更新。
下图过程为通过控制台输出日志,并将输出的日志存储到Flash中。重启再读取上次保存的日志,最后清空Flash中的日志。
API 文档:\docs\zh\api.md
移植文档:\docs\zh\port.md
V4.0 迁移指南:\docs\zh\v4_migrate.md
V4.0 ENV 功能设计与实现:\docs\zh\design.md
务必保证在 阅读文档 后再移植使用。
如果 EasyFlash 解决了你的问题,不妨请我 喝杯咖啡~
采用 MIT 开源协议,细节请阅读项目中的 LICENSE 文件内容。
EasyFlash是一种常用的固件更新和备份工具,常见于个人电脑和笔记本电脑。下面是一些EasyFlash的使用方法: 下载EasyFlash固件更新程序:首先需要从主板制造商的官方网站上下载EasyFlash固件更新程序,这个程序通常可以在支持和下载页面上找到。 制作EasyFlash启动盘:将下载好的EasyFlash程序解压缩,并将其中的文件复制到U盘或者光盘中,制作一个EasyFlash启
简介 easyflash版本:4.10 https://github.com/armink/EasyFlash EasyFlash是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗、物联网等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上存储器。该库主要包括 三大实用功能 : ENV 快速保存产
开源地址https://github.com/armink/EasyFlash 开源作者的一个帖子:https://www.amobbs.com/thread-5624863-1-1.html 已经更到V4了,但是使用的是ST的L4系列单片机,不能逆序写入,所以还是用的V3版本 使用的时候偶尔出现过空间已满,还特别不好复现,就把源代码过了一遍 关于磨损平衡 不是真正的磨损平衡,只是先一直向一个扇区
环境 使用的是STM32F0单片机 使用cubemx 4.1.0.0版本 keil5 5.32.00 参考链接: stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作 STM32 实现内部Flash的读写(HAL库版) 操作 1、写入flash数据之前需要对flash进行解锁操作,写完之后还要锁住: HAL_FLASH_Unlock(); //解锁
我的硬件是W25Q32 + STM32F401CE 配置如下: /* The minimum size of flash erasure. May be a flash sector size. */ #define EF_ERASE_MIN_SIZE 4096 /* @note you must define it for a value */ /* the flash writ
EF_WRITE_GRAN 宏是啥意思? 我若使用 W25Q32 芯片, 我该配置成啥? /* the flash write granularity, unit: bit * only support 1(nor flash)/ 8(stm32f4)/ 32(stm32f1) */ #define EF_WRITE_GRAN 1 /* @note you must def
物联网设备是非标准设备,可以相互无线连接到网络并能够传输数据。物联网设备正在扩大互联网连接,超越了智能手机,笔记本电脑,平板电脑和台式机等标准设备。通过技术嵌入这些设备使我们能够通过网络进行通信和交互,并且可以远程监控和控制它们。 有许多种基于IEEE 802.15.4标准的物联网设备。这些设备包括无线电池,可连接的传感器板和接口板,对研究人员和开发人员非常有用。 物联网设备包括计算机设备,软件,
本文向大家介绍Android 7.0开发获取存储设备信息的方法,包括了Android 7.0开发获取存储设备信息的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了 Android 7.0开发获取存储设备信息的方法。分享给大家供大家参考,具体如下: Android 7.0开发相较之前有不少改进,具体可参考前面的文章Android7.0版本影响开发的改进分析,这里简单总结一下Android
获取网络状态接口 wx.getNetworkType({ success: function (res) { var networkType = res.networkType; // 返回网络类型2g,3g,4g,wifi } });
请先 调用 设备列表 API 后,才能 看到 所属的设备信息,设备信息 已经包含在设备列表中。 SDKDevice 字段说明 字段 类型 备注 device_type_id String 设备类型 Id deviceId String 设备Id sn String 设备Id deviceNick String 设备昵称 ssid String 设备当前连接 Wifi ota String 系统版本
主要内容:嵌入式系统硬件,嵌入式系统软件在学习物联网或在物联网上构建项目时,了解嵌入式设备非常重要。嵌入式设备是构建独特计算系统的对象。这些系统可能连接也可能不连接到Internet。 嵌入式设备系统通常作为单个应用程序运行。但是,这些设备可以通过互联网连接进行连接,并且可以通过其他网络设备进行通信。 嵌入式系统硬件 嵌入式系统可以是微控制器型或微处理器型。这两种类型都包含集成电路(IC)。 嵌入式系统的基本组件是RISC系列微控制器,
物联网设备每隔1s上传一次自身所在位置经纬度,需求要支持任意时间段的历史数据查询,有什么建议的数据库架构方案? 之前类似需求一直用MySQL分表实现的,查询SQL比较复杂,而且查询速度也不快
获取 设备基本信息 设备基本信息 包括:ip、局域网ip、mac、nick、cy、sn、version 参数说明 字段 类型 必须? 说明 deviceId String 是 设备Id 接口定义 Swift: RokidMobileSDK.device.getBasicInfo(deviceId: String) -> [String: Any]? Objc: [RokidMobileSDK.d
是每个设备都创建数据库 还是一类设备(产品)创建一个数据库好 从资源消耗和性能方面来说? 我想每个设备都创建一个数据库, 这样可以方便的管理单个设备的数据过期时间等等, 但是每个数据库都会创建一个路径, 设备量大了之后, 比如几W个设备, 会不会影响文件系统性能和增加系统资源消耗