README.md 7.3 KB
Newer Older
armink_ztl's avatar
armink_ztl 已提交
1
# EasyFlash
armink_ztl's avatar
armink_ztl 已提交
2 3 4

---

5
## 1、介绍
armink_ztl's avatar
armink_ztl 已提交
6

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

9
- **Env** 小型KV数据库,支持 **写平衡(磨损平衡)****掉电保护** 模式
armink_ztl's avatar
armink_ztl 已提交
10
 
11
让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。在产品上,能够更加简捷的实现 **设定参数****运行日志** 等信息掉电保存功能。
12 13

- **IAP** 在线升级再也不是难事儿
armink_ztl's avatar
armink_ztl 已提交
14
 
15 16 17 18
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。

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

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

21
### 1.1、资源占用
armink_ztl's avatar
armink_ztl 已提交
22 23

```
24
最低要求: ROM: 6K bytes     RAM: 0.5K bytes + (Env大小)
armink_ztl's avatar
armink_ztl 已提交
25

26 27
Demo平台:STM32F103RET6 + RT-Thread 1.2.2 + Env(2K bytes)
实际占用: ROM: 6K bytes     RAM: 2.6K bytes
armink_ztl's avatar
armink_ztl 已提交
28 29
```

30
### 1.2、支持平台
armink_ztl's avatar
armink_ztl 已提交
31

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

34
欢迎大家 **star and pull request**([Github](https://github.com/armink/EasyFlash)|[OSChina](http://git.oschina.net/armink/EasyFlash)|[Coding](https://coding.net/u/armink/p/EasyFlash/git)) 。开源软件的成功离不开所有人的努力,也希望该项目能够帮助大家降低开发周期,让产品更早的获得成功。
armink_ztl's avatar
armink_ztl 已提交
35

36
## 2、流程
armink_ztl's avatar
armink_ztl 已提交
37

38
### 2.1、Env:环境变量(KV数据库)
39

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

- 1、创建“温度”的环境变量,名为 `temp`,并且赋值为 `123`
- 2、保存“温度”到Flash中并重启;
- 3、检查“温度”是否被成功保存;
- 4、修改“温度”值为 `456` 并保存、重启;
- 5、检查“温度”是否被成功修改;
- 6、删除“温度”的环境变量。
48

49
![easy_flash_env](http://git.oschina.net/Armink/EasyFlash/raw/master/docs/zh/images/EnvDemo.gif)
armink_ztl's avatar
armink_ztl 已提交
50

51
### 2.2、IAP:在线升级
52

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

55
![easy_flash_iap](http://git.oschina.net/Armink/EasyFlash/raw/master/docs/zh/images/IapDemo.gif)
56

57
### 2.3、Log:日志存储
58 59 60

下图过程为通过控制台输出日志,并将输出的日志存储到Flash中。重启再读取上次保存的日志,最后清空Flash日志。

61
![easy_flash_log](http://git.oschina.net/Armink/EasyFlash/raw/master/docs/zh/images/LogDemo.gif)
armink_ztl's avatar
armink_ztl 已提交
62

63
## 3、文档
64 65

具体内容参考`\docs\`下的文件。务必保证在 **阅读文档** 后再移植使用。
armink_ztl's avatar
armink_ztl 已提交
66

armink_ztl's avatar
armink_ztl 已提交
67
## 4、许可
68

69
采用 MIT 开源协议,细节请阅读项目中的 LICENSE 文件内容。
armink_ztl's avatar
armink_ztl 已提交
70

armink_ztl's avatar
armink_ztl 已提交
71 72 73 74
---

## 1 Introduction

75
EasyFlash is an open source lightweight embedded flash memory library. It provide 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** :
armink_ztl's avatar
armink_ztl 已提交
76

77
- **Env(environment variables)** : A small KV database. Support **write balance mode(wear leveling)** and **power fail safeguard**.
armink_ztl's avatar
armink_ztl 已提交
78 79

Let Flash becomes a small NoSQL (non-relational databases) model and Key-Value stores database. You can be more simple to store **setting parameters** or **running logs** and other information which you want to power down to save.
80 81

- **IAP** : online upgrade is no longer a difficult thing.
armink_ztl's avatar
armink_ztl 已提交
82
 
83 84 85 86
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.

armink_ztl's avatar
armink_ztl 已提交
87
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](https://github.com/armink/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.
armink_ztl's avatar
armink_ztl 已提交
88

89
### 1.1 Resource consumption
armink_ztl's avatar
armink_ztl 已提交
90 91 92 93 94 95 96 97

```
Minimum : ROM: 6K bytes     RAM: 0.5K bytes + (Env size)

Demo    :STM32F103RET6 + RT-Thread 1.2.2 + Env(2K bytes)
Actual  : ROM: 6K bytes     RAM: 2.6K bytes
```

98
### 1.2 Supported platforms
armink_ztl's avatar
armink_ztl 已提交
99

100
Hardware platform has been ported `stm32f10x` and `stm32f4xx` series of on-chip Flash. This is my product platform. Remaining platform porting difficulty is little. The porting just modify `\easyflash\port\ef_port.c` file. Implement erase, write, read, print feature.
armink_ztl's avatar
armink_ztl 已提交
101

102
Welcome everyone to **star and pull request**([Github](https://github.com/armink/EasyFlash)|[OSChina](http://git.oschina.net/armink/EasyFlash)|[Coding](https://coding.net/u/armink/p/EasyFlash/git)). The open source software success is inseparable from everyone efforts. I hope this project will help everyone reduce product development cycle and make product to success earlier.
armink_ztl's avatar
armink_ztl 已提交
103 104 105

## 2 Flow

106 107 108
### 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.
armink_ztl's avatar
armink_ztl 已提交
109

110 111 112 113 114 115
- 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.
armink_ztl's avatar
armink_ztl 已提交
116

117
![easy_flash_env](https://raw.githubusercontent.com/armink/EasyFlash/master/docs/en/images/EnvDemo.gif)
armink_ztl's avatar
armink_ztl 已提交
118 119 120 121 122

### 2.2 IAP

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

123 124 125 126 127 128 129
![easy_flash_iap](https://raw.githubusercontent.com/armink/EasyFlash/master/docs/en/images/IapDemo.gif)

### 2.3 Log

The following figure is the output log process through the console. The logs will save to flash at the same time. Then reboot the and read the logs from flash. At last will clean all logs which on flash.

![easy_flash_log](https://raw.githubusercontent.com/armink/EasyFlash/master/docs/en/images/LogDemo.gif)
armink_ztl's avatar
armink_ztl 已提交
130 131 132

## 3 Documents

133
All documents is in the `\docs\` folder. Please **read the documents** before port and use it.
armink_ztl's avatar
armink_ztl 已提交
134 135

## 4 License
armink_ztl's avatar
armink_ztl 已提交
136

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