Files
2021-12-02 20:07:54 +01:00
..
2021-12-02 20:07:54 +01:00
2021-12-02 20:07:54 +01:00
2021-12-02 20:07:54 +01:00

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

API介绍


bool tinyFlash_Init(unsigned long start_addr, unsigned long len);

函数功能初始化tinyFlash

参数 start_addrtinyFlash区域在Flash芯片上的起始地址

参数 len tinyFlash区域总长度单位字节


int tinyFlash_Read(unsigned char KEY, unsigned char * buf, unsigned char * len);

函数功能从tinyFlash中读取Key中存储的数据内容数据长度或者删除数据

参数 KEY要读取的Key

参数 bufKey中存储的数据内容的传出指针如果该指针为NULL则只传输数据长度

参数 len: 传入的是最大能接受的数据长度传输的是读取到的实际数据长度如果为NULL则为删除该KEY


int tinyFlash_Write(unsigned char KEY, unsigned char * buf, unsigned char len);

函数功能: 向tinyFlash中存储一个数据

参数 KEY 要存储的数据的Key值

参数 buf 要存储的数据内容

参数 len: 要存储的数据长度


void tinyFlash_Format(void);

函数功能格式化tinyFlash数据区域擦除全部tinyFlash扇区


接下来的工作

  • 多扇区支持
  • 数据加密
  • 优化查找及存储速度
  • 意外掉电防护