diff --git a/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_1/main.cpp b/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_1/main.cpp index add632f1b8..ef7ad4d346 100644 --- a/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_1/main.cpp +++ b/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_1/main.cpp @@ -101,6 +101,11 @@ static void kvstore_init() TEST_ASSERT_EQUAL_ERROR_CODE(0, res); if (kv_setup == TDBStoreSet) { +#if COMPONENT_FLASHIAP && !COMPONENT_SPIF && !COMPONENT_QSPIF && !COMPONENT_DATAFLASH && !COMPONENT_SD + // TDBStore requires two areas of equal size, do the check for FlashIAP + TEST_SKIP_UNLESS(MBED_CONF_TARGET_INTERNAL_FLASH_UNIFORM_SECTORS || + (MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE != 0) && (MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS != 0xFFFFFFFF)) +#endif if (erase_val == -1) { flash_bd = new FlashSimBlockDevice(bd); kvstore = new TDBStore(flash_bd); diff --git a/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_2/main.cpp b/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_2/main.cpp index eb295b9611..a3b7b0fc80 100644 --- a/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_2/main.cpp +++ b/storage/kvstore/tests/TESTS/kvstore/general_tests_phase_2/main.cpp @@ -96,6 +96,11 @@ static void kvstore_init() TEST_ASSERT_EQUAL_ERROR_CODE(0, res); if (kv_setup == TDBStoreSet) { +#if COMPONENT_FLASHIAP && !COMPONENT_SPIF && !COMPONENT_QSPIF && !COMPONENT_DATAFLASH && !COMPONENT_SD + // TDBStore requires two areas of equal size + TEST_SKIP_UNLESS(MBED_CONF_TARGET_INTERNAL_FLASH_UNIFORM_SECTORS || + (MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE != 0) && (MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS != 0xFFFFFFFF)) +#endif if (erase_val == -1) { flash_bd = new FlashSimBlockDevice(bd); kvstore = new TDBStore(flash_bd); diff --git a/storage/platform/source/PlatformStorage.cpp b/storage/platform/source/PlatformStorage.cpp index eadc60e4e6..20daad0e2a 100644 --- a/storage/platform/source/PlatformStorage.cpp +++ b/storage/platform/source/PlatformStorage.cpp @@ -156,10 +156,17 @@ MBED_WEAK FileSystem *FileSystem::get_default_instance() #elif COMPONENT_FLASHIAP +// To avoid alignment issues, initialize a filesystem if all sectors have the same size +// OR the user has specified an address range +#if MBED_CONF_TARGET_INTERNAL_FLASH_UNIFORM_SECTORS || \ + (MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE != 0) && (MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS != 0xFFFFFFFF) static LittleFileSystem flash("flash", BlockDevice::get_default_instance()); flash.set_as_default(); return &flash; +#else + return NULL; +#endif #else diff --git a/targets/targets.json b/targets/targets.json index 503cbde251..a624b2df6f 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -84,6 +84,10 @@ "default-adc-vref": { "help": "Default reference voltage for ADC (float)", "value": "NAN" + }, + "internal-flash-uniform-sectors": { + "help": "Target's internal flash has uniform sector sizes", + "value": true } } }, @@ -1344,6 +1348,9 @@ "macro_name": "CLOCK_SOURCE" } }, + "overrides": { + "internal-flash-uniform-sectors": false + }, "device_has_add": [ "ANALOGOUT", "CAN", @@ -1495,6 +1502,9 @@ "macro_name": "CLOCK_SOURCE" } }, + "overrides": { + "internal-flash-uniform-sectors": false + }, "device_has_add": [ "SERIAL_ASYNCH", "FLASH", @@ -2109,7 +2119,8 @@ } }, "overrides": { - "lpticker_delay_ticks": 0 + "lpticker_delay_ticks": 0, + "internal-flash-uniform-sectors": false }, "macros_add": [ "MBED_TICKLESS",