Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
flashDB
GD32
GD32裸机移植FlashDB
发布于 2022-01-26 15:11:03 浏览:2018
订阅该版
[tocm] ## 一、添加的功能 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的相关文档)  只关注这三个目录就可以; 个人感觉drivers和sfud目录功能有些重合,所有我将关于外扩FLASH的驱动都移植到了一起,这个之后会介绍; 1.application目录  1)fal_cfg.h文件,主要包含FAL的“定义flash设备表”和“定义flash分区表”,这两个概念是FAL配置中很重要的两步,之后会具体讲解; 2)fdb_cfg.h文件,主要包含FDB使用过程中的一些配置,通过注销宏定义来进行实现,,之后会具体讲解; 3)main.c文件中,主要是测试FlashDB是否移植成功的测试例程,同时也是FlashDB的样板例程;我将其修改为fdb_app.c文件; --- 具体移植过程 --- ## 一、移植步骤 1.将需要的文件进行分类整理,整理成自己需要的目录文档; 2.在工程中按照整理好的目录创建目录,添加各个目录的文件,同时将需要关联的文件路径进行声明; 3.修改sfud中的对应驱动配置; 4.打开FlashDB和FAL的配置文件,进行配置; 5.实现printf函数; 6.调用FlashDB APP中的官方样板例程,查看log; ## 二、分类整理 将需要的文件进行分类整理,整理成自己需要的目录文档(步骤一)  1.FAL文件整理  2.flash_app文件整理  1)fal_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 > ``` 最后:因为论坛文章编辑原因,有些网址显示不成功,可以去这里查看 https://blog.csdn.net/qq_34442618/article/details/122702303
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
游走在01的海洋
In the end, it's not the years in your life that count. It's the life in your years.
文章
4
回答
237
被采纳
24
关注TA
发私信
相关文章
1
flashDB有两个变量未定义?
2
FlashDB 初始化时出现 check failed
3
FlashDB初始化isn't initialize OK
4
FlashDB在哪里修改版本号实现自动更新?
5
flashDB重复更新同一个参数的问题
6
flashDB kv ts 最大存储字节在哪里设置
7
操作flashDB时thread 提示error -2 超时
8
flashdb 断言错误问题求解
9
FlashDB没法选择版本
10
flashdb出现moved kv日志后,再去查询发现数据有丢失
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部