diff --git a/features/storage/kvstore/tdbstore/TDBStore.cpp b/features/storage/kvstore/tdbstore/TDBStore.cpp index ef690b8..43424b1 100644 --- a/features/storage/kvstore/tdbstore/TDBStore.cpp +++ b/features/storage/kvstore/tdbstore/TDBStore.cpp @@ -124,7 +124,7 @@ TDBStore::TDBStore(BlockDevice *bd) : _ram_table(0), _max_keys(0), _num_keys(0), _bd(bd), _buff_bd(0), _free_space_offset(0), _master_record_offset(0), _master_record_size(0), _is_initialized(false), _active_area(0), _active_area_version(0), _size(0), - _area_params{}, _prog_size(0), _work_buf(0), _key_buf(0), _variant_bd_erase_unit_size(false), _inc_set_handle(0) + _area_params{}, _prog_size(0), _work_buf(0), _key_buf(0), _inc_set_handle(0) { for (int i = 0; i < _num_areas; i++) { _area_params[i] = { 0 }; @@ -194,12 +194,9 @@ memset(_area_params, 0, sizeof(_area_params)); size_t area_0_size = 0; - bd_size_t prev_erase_unit_size = _bd->get_erase_size(area_0_size); - _variant_bd_erase_unit_size = 0; while (area_0_size < bd_size / 2) { bd_size_t erase_unit_size = _bd->get_erase_size(area_0_size); - _variant_bd_erase_unit_size |= (erase_unit_size != prev_erase_unit_size); area_0_size += erase_unit_size; } @@ -207,6 +204,9 @@ _area_params[0].size = area_0_size; _area_params[1].address = area_0_size; _area_params[1].size = bd_size - area_0_size; + + // The areas must be of same size + MBED_ASSERT(_area_params[0].size == _area_params[1].size); } @@ -1427,14 +1427,8 @@ uint32_t &offset_from_start, uint32_t &dist_to_end) { uint32_t bd_offset = _area_params[area].address + offset; - if (!_variant_bd_erase_unit_size) { - uint32_t eu_size = _buff_bd->get_erase_size(); - offset_from_start = bd_offset % eu_size; - dist_to_end = eu_size - offset_from_start; - return; - } - uint32_t agg_offset = 0; + while (bd_offset >= agg_offset + _buff_bd->get_erase_size(agg_offset)) { agg_offset += _buff_bd->get_erase_size(agg_offset); } diff --git a/features/storage/kvstore/tdbstore/TDBStore.h b/features/storage/kvstore/tdbstore/TDBStore.h index ce1af86..71b92b1 100644 --- a/features/storage/kvstore/tdbstore/TDBStore.h +++ b/features/storage/kvstore/tdbstore/TDBStore.h @@ -309,7 +309,6 @@ uint32_t _prog_size; uint8_t *_work_buf; char *_key_buf; - bool _variant_bd_erase_unit_size; void *_inc_set_handle; void *_iterator_table[_max_open_iterators];