GD32裸机移植FlashDB

一、添加的功能

1.在GD32F10x中移植FlashDB,用于片外FLASH(W25Q32JV)

二、背景

1.硬件:GD32F10x

2.软件:KEIL5

3.数据库:FlashDB

三、FlashDB

1.名称:超轻量级嵌入式数据库

2.简介:

FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。

FlashDB 提供两种数据库模式:

  • 键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。
  • 时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。

3.FlashDB文档对应网址:FlashDB (gitee.io)

4.FlashDB代码对应网址:

1)GitHub - armink/FlashDB: An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库

2)FlashDB: 一款支持 KV 数据和时序数据的超轻量级数据库 (gitee.com)

四、FlashDB介绍(我分为4部分)

1.FlashDB APP:用于调用FlashDB的应用函数---用户进行编写;

2.FlashDB:包含FlashDB的应用函数,并且调用FAL的相关函数;

3.FAL(重点):包含FAL的相关函数,并且可以调用SFUD相关函数;

4.SFUD:名称“串行FLASH万能驱动库”,需要配置SPI和存储器,用于驱动存储器;

五、查看下载的FlashDB压缩包

1.FlashDB-master目录(总)

2.demos目录

3.docs目录

1)其中包含FlashDB文档对应网址;----打不开

2)使用这个网址:FlashDB (gitee.io)

4.inc目录

1)fdb_cfg.h:作用为配置FLashDB,需修改;具体查看文档(FlashDB (gitee.io))-->开发-->配置。

2)我自己的使用习惯:我一般是将此文件剪切移动到main.c所在目录。

5.port-->fal目录(重点)

1)samples目录FAL的移植中,只需要修改此目录)

2)fal_cfg.h:作用为配置fal的文件,需修改;我一般是将此文件复制移动到main.c所在目录。

3)fal_flash_sfud_port.c:用于配置SFUD,需修改

6.src目录:FlashDB源文件,无需修改

7.tests目录:测试目录,可以不使用

六、stm32f405rg_spi_flash目录详解(此目录中包含的是外部FLASH的相关文档)

只关注这三个目录就可以;

个人感觉driverssfud目录功能有些重合,所有我将关于外扩FLASH的驱动都移植到了一起,这个之后会介绍;

1.application目录

1fal_cfg.h文件,主要包含FAL的“定义flash设备表”和“定义flash分区表”,这两个概念是FAL配置中很重要的两步,之后会具体讲解;

2fdb_cfg.h文件,主要包含FDB使用过程中的一些配置,通过注销宏定义来进行实现,,之后会具体讲解;

3main.c文件中,主要是测试FlashDB是否移植成功的测试例程,同时也是FlashDB的样板例程;我将其修改为fdb_app.c文件;

、、、、、、、、、、、、、、、、、、具体移植过程、、、、、、、、、、、、、、、、、、、

一、移植步骤

1.将需要的文件进行分类整理,整理成自己需要的目录文档;

2.在工程中按照整理好的目录创建目录,添加各个目录的文件,同时将需要关联的文件路径进行声明;

3.修改sfud中的对应驱动配置;

4.打开FlashDB和FAL的配置文件,进行配置;

5.实现printf函数;

6.调用FlashDB APP中的官方样板例程,查看log;

二、将需要的文件进行分类整理,整理成自己需要的目录文档(步骤一)

1.FAL文件整理

2.flash_app文件整理

1fal_cfg.h所在的路径:是 ..\FlashDB-master\port\fal\samples\porting下的fal_cfg.h文件

2)fdb_app.c所在的路径:..\FlashDB-master\demos\stm32f405rg_spi_flash\applications 下的main.c文件

3)fdb_app.h所在的路径:我自己编写的.h文件

4)fdb_cfg.h所在的路径:..\FlashDB-master\inc下的fdb_cfg.h文件

3.flashdb文件整理

4.sfud文件整理

1)flash_driver文件夹

2)inc、port、src文件夹

三、工程中添加(步骤二)

四、需要配置、移植、修改的文件(步骤三、步骤四)

1.需要配置的文件 ----- 网址:配置 (gitee.io)

1)fdb_cfg.h:用于配置FlashDB的相关应用,例如可以选择KVDB或者TSDB。

2.需要移植的文件  ----- 网址:移植 (gitee.io)

1)fal_flash_sfud_port.c:用于定义片外flash设备,同时要修改设备的参数

2)fal_cfg.h:用于定义flash设备表,和定义flash分区表,同时要修改对应的flash设备参数

3.需要修改的文件 ---这个官网网没有介绍

1)drv_spi_flash.c:文件中是SFUD的驱动入口函数(spi_flash_init())。

2)sfud_port.c:文件中包含引脚配置、SPI配置、SPI读写配置,同时根据芯片的不同进行修改

五、实现prinf函数,用于打印FlashDB 日志(步骤五)

六、成功后的log(以本工程为例)

1.首次启动(首次启动,FlashDB需要一定时间的配置)

 \ | /

- RT -     Thread Operating System

 / | \     3.1.3 build Dec 16 2021

 2006 - 2019 Copyright by rt-thread team

[SFUD]Find a Winbond W25Q32JV flash chip. Size is 4194304 bytes.

[SFUD](FlashDB\sfud\src\sfud.c:840) Flash device reset success.

[SFUD]norflash0 flash device is initialize success.

[D/FAL] (fal_flash_init:63) Flash device |                norflash0 | addr: 0x00000000 | len: 0x00400000 | blk_size: 0x00001000 |initialized finish.

[32;22m[I/FAL] ==================== FAL partition table ====================[0m

[32;22m[I/FAL] | name      | flash_dev |   offset   |    length  |[0m

[32;22m[I/FAL] -------------------------------------------------------------[0m

[32;22m[I/FAL] | fdb_tsdb1 | norflash0 | 0x00000000 | 0x00100000 |[0m

[32;22m[I/FAL] | fdb_kvdb1 | norflash0 | 0x00100000 | 0x00100000 |[0m

[32;22m[I/FAL] =============================================================[0m

[32;22m[I/FAL] Flash Abstraction Layer (V0.5.0) initialize success.[0m

[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1638) KVDB size is 1048576 bytes.

[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x00000000).

[11:35:00.929]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x00001000).

[11:35:00.998]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x00002000).

[11:35:01.068]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x00003000).

[11:35:01.134]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x00004000).

……

[11:35:17.645]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x000FA000).

[11:35:17.712]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x000FB000).

[11:35:17.782]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x000FC000).

[11:35:17.848]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x000FD000).

[11:35:17.914]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x000FE000).

[11:35:17.982]收←◆[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1442) Sector header info is incorrect. Auto format this sector (0x000FF000).

[11:35:18.048]收←◆[FlashDB][kv][env] All sector header is incorrect. Set it to default.

[11:35:33.254]收←◆[FlashDB] FlashDB V1.1.0 is initialize success.

[FlashDB] You can get the latest version on GitHub - armink/FlashDB: An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库 .

[FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ====================

[FlashDB][sample][kvdb][basic] get the 'boot_count' value is 0

[11:35:33.517]收←◆[FlashDB][sample][kvdb][basic] set the 'boot_count' value to 1

[FlashDB][sample][kvdb][basic] ===========================================================

[FlashDB][sample][kvdb][string] ==================== kvdb_type_string_sample ====================

[11:35:34.003]收←◆[FlashDB][sample][kvdb][string] create the 'temp' string KV, value is: 36C

[FlashDB][sample][kvdb][string] get the 'temp' value is: 36C

[11:35:34.250]收←◆[FlashDB][sample][kvdb][string] set 'temp' value to 38C

[FlashDB][sample][kvdb][string] delete the 'temp' finish

[FlashDB][sample][kvdb][string] ===========================================================

[FlashDB][sample][kvdb][blob] ==================== kvdb_type_blob_sample ====================

[11:35:34.753]收←◆[FlashDB][sample][kvdb][blob] create the 'temp' blob KV, value is: 36

[FlashDB][sample][kvdb][blob] get the 'temp' value is: 36

[11:35:35.000]收←◆[FlashDB][sample][kvdb][blob] set 'temp' value to 38

[FlashDB][sample][kvdb][blob] delete the 'temp' finish

[FlashDB][sample][kvdb][blob] ===========================================================

[FlashDB][tsl][log] Sector (0x00000000) header info is incorrect.

[11:35:49.385]收←◆[FlashDB][tsl][log] All sector format finished.

[FlashDB][tsl][log] (FlashDB\flashdb\src\fdb_tsdb.c:790) TSDB (log) oldest sectors is 0x00000000, current using sector is 0x00000000.

[FlashDB][sample][tsdb] ==================== tsdb_sample ====================

[FlashDB][sample][tsdb] append the new status.temp (36) and status.humi (85)

[FlashDB][sample][tsdb] append the new status.temp (38) and status.humi (90)

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 1, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 2, temp: 38, humi: 90

[11:35:49.906]收←◆[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 1, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 2, temp: 38, humi: 90

[FlashDB][sample][tsdb] query count is: 2

[FlashDB][sample][tsdb] set the TSL (time 1) status from 2 to 3

[FlashDB][sample][tsdb] set the TSL (time 2) status from 2 to 3

[11:35:50.401]收←◆[FlashDB][sample][tsdb] ===========================================================

msh >

msh >

2.二次启动

 \ | /

- RT -     Thread Operating System

 / | \     3.1.3 build Dec 16 2021

 2006 - 2019 Copyright by rt-thread team

[SFUD]Find a Winbond W25Q32JV flash chip. Size is 4194304 bytes.

[SFUD](FlashDB\sfud\src\sfud.c:840) Flash device reset success.

[SFUD]norflash0 flash device is initialize success.

SUFD SPI 初始化 SUCCESS

[D/FAL] (fal_flash_init:63) Flash device |                norflash0 | addr: 0x00000000 | len: 0x00400000 | blk_size: 0x00001000 |initialized finish.

[32;22m[I/FAL] ==================== FAL partition table ====================[0m

[32;22m[I/FAL] | name      | flash_dev |   offset   |    length  |[0m

[32;22m[I/FAL] -------------------------------------------------------------[0m

[32;22m[I/FAL] | fdb_tsdb1 | norflash0 | 0x00000000 | 0x00100000 |[0m

[32;22m[I/FAL] | fdb_kvdb1 | norflash0 | 0x00100000 | 0x00100000 |[0m

[32;22m[I/FAL] =============================================================[0m

[32;22m[I/FAL] Flash Abstraction Layer (V0.5.0) initialize success.[0m

[FlashDB][kv][env] (FlashDB\flashdb\src\fdb_kvdb.c:1638) KVDB size is 1048576 bytes.

[FlashDB] FlashDB V1.1.0 is initialize success.

[FlashDB] You can get the latest version on GitHub - armink/FlashDB: An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库 .

[FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ====================

[FlashDB][sample][kvdb][basic] get the 'boot_count' value is 4

[FlashDB][sample][kvdb][basic] set the 'boot_count' value to 5

[FlashDB][sample][kvdb][basic] ===========================================================

[FlashDB][sample][kvdb][string] ==================== kvdb_type_string_sample ====================

[FlashDB][sample][kvdb][string] create the 'temp' string KV, value is: 36C

[FlashDB][sample][kvdb][string] get the 'temp' value is: 36C

[FlashDB][sample][kvdb][string] set 'temp' value to 38C

[FlashDB][sample][kvdb][string] delete the 'temp' finish

[FlashDB][sample][kvdb][string] ===========================================================

[FlashDB][sample][kvdb][blob] ==================== kvdb_type_blob_sample ====================

[FlashDB][sample][kvdb][blob] create the 'temp' blob KV, value is: 36

[FlashDB][sample][kvdb][blob] get the 'temp' value is: 36

[FlashDB][sample][kvdb][blob] set 'temp' value to 38

[FlashDB][sample][kvdb][blob] delete the 'temp' finish

[FlashDB][sample][kvdb][blob] ===========================================================

[FlashDB][tsl][log] (FlashDB\flashdb\src\fdb_tsdb.c:790) TSDB (log) oldest sectors is 0x00000000, current using sector is 0x00000000.

[FlashDB][sample][tsdb] ==================== tsdb_sample ====================

[FlashDB][sample][tsdb] append the new status.temp (36) and status.humi (85)

[FlashDB][sample][tsdb] append the new status.temp (38) and status.humi (90)

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 1, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 2, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 3, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 4, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 5, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 6, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 7, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 8, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 9, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 10, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 1, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 2, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 3, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 4, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 5, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 6, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 7, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 8, temp: 38, humi: 90

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 9, temp: 36, humi: 85

[FlashDB][sample][tsdb] [query_by_time_cb] queried a TSL: time: 10, temp: 38, humi: 90

[FlashDB][sample][tsdb] query count is: 2

[FlashDB][sample][tsdb] set the TSL (time 1) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 2) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 3) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 4) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 5) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 6) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 7) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 8) status from 3 to 3

[FlashDB][sample][tsdb] set the TSL (time 9) status from 2 to 3

[FlashDB][sample][tsdb] set the TSL (time 10) status from 2 to 3

[FlashDB][sample][tsdb] ===========================================================

msh >

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值