From 7bdef5eab7c92ae338a4b8e5d88a49ef82661887 Mon Sep 17 00:00:00 2001 From: tinic Date: Mon, 16 Oct 2023 19:01:43 -0700 Subject: [PATCH] [fdb] Support 128bit write granularity for kvdb (#250) * Support 128bit write granularity The new stm32h5xx chips can only write quad words, i.e. 128bits. * Update fdb_tsdb.c to include 128bit option * Update fdb_cfg.h to include 64bit and 128bit option. --- inc/fdb_cfg.h | 2 +- src/fdb_kvdb.c | 11 +++++++---- src/fdb_tsdb.c | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/inc/fdb_cfg.h b/inc/fdb_cfg.h index 48d92af..e8748ab 100644 --- a/inc/fdb_cfg.h +++ b/inc/fdb_cfg.h @@ -28,7 +28,7 @@ #ifdef FDB_USING_FAL_MODE /* the flash write granularity, unit: bit - * only support 1(nor flash)/ 8(stm32f2/f4)/ 32(stm32f1) */ + * only support 1(nor flash)/ 8(stm32f2/f4)/ 32(stm32f1)/ 64(stm32f7)/ 128(stm32h5) */ #define FDB_WRITE_GRAN /* @note you must define it for a value */ #endif diff --git a/src/fdb_kvdb.c b/src/fdb_kvdb.c index eec7020..4f06654 100644 --- a/src/fdb_kvdb.c +++ b/src/fdb_kvdb.c @@ -27,8 +27,8 @@ #error "Please configure flash write granularity (in fdb_cfg.h)" #endif -#if FDB_WRITE_GRAN != 1 && FDB_WRITE_GRAN != 8 && FDB_WRITE_GRAN != 32 && FDB_WRITE_GRAN != 64 -#error "the write gran can be only setting as 1, 8, 32 and 64" +#if FDB_WRITE_GRAN != 1 && FDB_WRITE_GRAN != 8 && FDB_WRITE_GRAN != 32 && FDB_WRITE_GRAN != 64 && FDB_WRITE_GRAN != 128 +#error "the write gran can be only setting as 1, 8, 32, 64 and 128" #endif /* magic word(`F`, `D`, `B`, `1`) */ @@ -105,8 +105,8 @@ struct sector_hdr_data { uint32_t magic; /**< magic word(`E`, `F`, `4`, `0`) */ uint32_t combined; /**< the combined next sector number, default: not combined */ uint32_t reserved; -#if (FDB_WRITE_GRAN == 64) - uint8_t padding[4]; /**< align padding for 64bit write granularity */ +#if (FDB_WRITE_GRAN == 64) || (FDB_WRITE_GRAN == 128) + uint8_t padding[4]; /**< align padding for 64bit and 128bit write granularity */ #endif }; typedef struct sector_hdr_data *sector_hdr_data_t; @@ -121,6 +121,9 @@ struct kv_hdr_data { #if (FDB_WRITE_GRAN == 64) uint8_t padding[4]; /**< align padding for 64bit write granularity */ #endif +#if (FDB_WRITE_GRAN == 128) + uint8_t padding[12]; /**< align padding for 128bit write granularity */ +#endif }; typedef struct kv_hdr_data *kv_hdr_data_t; diff --git a/src/fdb_tsdb.c b/src/fdb_tsdb.c index a7bc8ba..8fe4083 100644 --- a/src/fdb_tsdb.c +++ b/src/fdb_tsdb.c @@ -25,8 +25,8 @@ #if defined(FDB_USING_TSDB) -#if (FDB_WRITE_GRAN == 64) -#error "Flash 64 bits write granularity is not supported in TSDB yet!" +#if (FDB_WRITE_GRAN == 64) || (FDB_WRITE_GRAN == 128) +#error "Flash 64 or 128 bits write granularity is not supported in TSDB yet!" #endif /* magic word(`T`, `S`, `L`, `0`) */