[转]【开源】嵌入式闪存库 EasyFlash for STM32,支持Env和IAP

admin 2017-5-30 4190


1、介绍
EasyFlash是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 两大实用功能 :

  • Env 让变量轻轻松松实现掉电保存,无需担心变量长度、对其等问题
    使用 键值对(key-value) 方式将变量存储到Flash中,类似U-Boot的 环境变量 ,使用方式与U-Boot一致。
  • IAP 在线升级再也不是难事儿
    该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级

1.1、文件结构

源文件描述
\flash\src\flash_env.cEnv(环境变量)相关操作接口及实现源码
\flash\src\flash_iap.cIAP(在线升级)相关操作接口及实现源码
\flash\src\flash_utils.cEasyFlash常用小工具,例如:CRC32
\flash\src\flash.c目前只包含EasyFlash初始化方法
\flash\port\flash_port.c不同平台下的EasyFlash移植接口及配置参数
\demo\stm32f10xstm32f10x平台下的demo

1.2、资源占用

最低要求: 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.3、支持平台

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

欢迎大家 fork and pull request 。开源软件的成功离不开所有人的努力,也希望该项目能够帮助大家降低开发周期,让产品更早的获得成功


2、流程
2.1、环境变量
下图为人工通过控制台来调用环境变量的常用接口,演示了环境变量 "temp"从创建到保存,再修改,最后删除的过程。这些接口都支持被应用层直接调用。
 

2.2、在线升级
下图演示了通过控制台来进行IAP升级软件的过程,使用的是库中自带的IAP功能接口,演示采用的是串口+Ymodem协议的方式。你还也可以实现通过CAN、485、以太网等总线,来实现远程网络更新。
 

3、下载
Github : https://github.com/armink/EasyFlash
开源中国 : http://git.oschina.net/armink/EasyFlash
下载:  EasyFlash V1.01.23.zip (940.37 KB, 下载次数: 400) 

好消息,看到这么多网友需要“写平衡”,现在“写平衡”已经增加上去了,是一种比较简洁的实现思路。
目前环境变量支持两种模式,默认是常规模式,欢迎大家下载试用并反馈哦。可以通过以下方式获取最新源码。
github : https://github.com/armink/EasyFlash
oschina: http://git.oschina.net/armink/EasyFlash
coding : https://coding.net/u/armink/p/EasyFlash/git

最近写了一篇《如何在嵌入式产品中应用键值存储数据库》:http://geek.csdn.net/news/detail/35184,里面有一些EasyFlash的使用场景。欢迎大家拍砖。


最新回复 [0]
返回