# tinyFlash
一种轻量级的flash数据存储方案
## 设计原理
本方案采用两个扇区轮流使用的方法存储数据,每个扇区4096字节,扇区状态如下表:
|扇区编号|使用状态|数据分布|
|--------|----|---|
|扇区一 |使用中|0xAA ·······················································|
|扇区二 |未使用|0xFF ·······················································|
使用中的扇区数据分布如下表:
|扇区头部|K1|V1|K2|V2|.....|Kn|Vn|
|--------|----|---|----|----|----|-----|-----|
|32字节 |3字节|n字节|3字节|n字节|.....|3字节|n字节|
每个K-V数据存储形式如下表:
|第一字节|第二字节|第三字节|n个字节|
|--------|----|---|----|
|Key |~Key|Len|Len个字节数据内容|
第一个字节存放的是数据的Key,取值范围是 0x01 - 0xFE
第二个字节的数据为Key取反,如果第二个字节的数据为0x00,表示该处存储的数据已被废弃
第三个自己表示数据长度,取值范围是0x01 - 0xFF
之后的字节是数据的内容,最长不得超过0xFF
## 使用示例
#define My_DATA_INDEX = 1
tinyFlash_Init();
char * _data = "Hello World";
tinyFlash_Write(My_DATA_INDEX, _data, sizeof(_data));
char _buf[128] = { 0 }
unsigned char _len = 128;
tinyFlash_Read(My_DATA_INDEX, _buf, &_len);
printf(_buf);
## API介绍
-------------------------------------------------------------------------------
bool tinyFlash_Init();
函数功能:初始化tinyFlash
返回值:true 成功
-------------------------------------------------------------------------------
int tinyFlash_Read(unsigned char KEY, unsigned char * buf, unsigned char * len);
函数功能:从tinyFlash中读取Key中存储的数据内容,数据长度,或者删除数据
参数 KEY:要读取的Key
参数 buf:Key中存储的数据内容的传出指针,如果该指针为NULL,则只传输数据长度
参数 len: 传入的是最大能接受的数据长度,传输的是读取到的实际数据长度,如果为NULL则为删除该KEY
返回值: 0 操作成功,其他值 操作失败
------------------------------------------------------------------------------
int tinyFlash_Write(unsigned char KEY, unsigned char * buf, unsigned char len);
函数功能: 向tinyFlash中存储一个数据
参数 KEY: 要存储的数据的Key值
参数 buf: 要存储的数据内容
参数 len: 要存储的数据长度
返回值:0 操作成功,其他值 操作失败
------------------------------------------------------------------------------
void tinyFlash_Format(void);
函数功能:格式化tinyFlash数据区域,擦除全部tinyFlash扇区
--------------------------------------------------------------------------------
## 移植及配置
移植只需要在```tinyFlash_port.c```中实现如下三个函数:
int _flash_write(unsigned long addr, unsigned long len, unsigned char *buf);
int _flash_read(unsigned long addr, unsigned long len, unsigned char *buf);
int _flash_sector_erase(unsigned long addr);
源码中已根据TLSR825X平台实现了相关函数。
### 配置说明
所有的配置项都在```tinyFlash_port.h```中,配置示例如下:
#define TINY_START_ADDR 0x7A000 //tinyFlash起始地址
#define TINY_SECTOR_SIZE 4096 //flash扇区大小
#define TINY_BUFFER_SIZE 256 //tiny缓冲区大小
#define TINY_SECHAD_SIZE 32 //记录扇区使用情况的扇区头大小
## 接下来的工作
- 多扇区支持
- 数据加密
- 优化查找及存储速度
- 意外掉电防护
嵌入式与物联网开发-轻量级嵌入式FlashKV存储系统实现.zip
需积分: 1 155 浏览量
2024-04-03
15:00:35
上传
评论
收藏 5KB ZIP 举报
m0_57195758
- 粉丝: 1053
- 资源: 330
最新资源
- elasticsearch-spring-boot-starter.7z
- Anti-Cheat Toolkit 2023 v2023.2.5
- 使用堆栈数据结构解迷宫问题
- SoftFloat-3e.zip
- Easy Save - 3.5.6
- 基于tensorflow的目标检测系统源码+部署教程文档+全部数据+训练好的模型(高分项目)
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈