From a8d4998df53303fe334c22d31ba42b77043c7371 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 14 Feb 2025 12:14:57 +0100 Subject: [PATCH 1/9] QSPIFlashBlockDevice: fix ctor init order --- libraries/BlockDevices/QSPIFlashBlockDevice.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/libraries/BlockDevices/QSPIFlashBlockDevice.h b/libraries/BlockDevices/QSPIFlashBlockDevice.h index 75f8187da..0fe19dee0 100644 --- a/libraries/BlockDevices/QSPIFlashBlockDevice.h +++ b/libraries/BlockDevices/QSPIFlashBlockDevice.h @@ -70,25 +70,27 @@ class QSPIFlashBlockDevice : public BlockDevice { private: - bool opened; - + + pin_t ck; + pin_t cs; + pin_t io0; + pin_t io1; + pin_t io2; + pin_t io3; + bd_addr_t base_address; bd_size_t total_size; bd_size_t read_block_size; bd_size_t erase_block_size; bd_size_t write_block_size; + bool opened; + bool is_address_correct(bd_addr_t add); qspi_instance_ctrl_t ctrl; spi_flash_cfg_t cfg; qspi_extended_cfg_t ext_cfg; - pin_t ck; - pin_t cs; - pin_t io0; - pin_t io1; - pin_t io2; - pin_t io3; fsp_err_t get_flash_status(); From de06a61fc9574fb5a346472af2ffb1c741bb1d8b Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 14 Feb 2025 12:15:35 +0100 Subject: [PATCH 2/9] QSPIFlashBlockDevice: fix pointer aritmetic --- libraries/BlockDevices/QSPIFlashBlockDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/BlockDevices/QSPIFlashBlockDevice.cpp b/libraries/BlockDevices/QSPIFlashBlockDevice.cpp index 85d6de958..44c5cc094 100644 --- a/libraries/BlockDevices/QSPIFlashBlockDevice.cpp +++ b/libraries/BlockDevices/QSPIFlashBlockDevice.cpp @@ -287,7 +287,7 @@ int QSPIFlashBlockDevice::write(const void *buffer, bd_addr_t add, bd_size_t _si R_QSPI_BankSet(&ctrl, bank); rv = R_QSPI_Write(&ctrl, (uint8_t *)(buffer), (uint8_t*)address, chunk); address += chunk; - buffer += chunk; + buffer = (uint8_t *)(buffer) + chunk; if(rv == FSP_SUCCESS) { rv = get_flash_status(); From 87c7070774c13025d6ec9d7596b4e31612756d16 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 14 Feb 2025 12:16:05 +0100 Subject: [PATCH 3/9] QSPIFlashBlockDevice: fix signed/unsigned comparison --- libraries/BlockDevices/QSPIFlashBlockDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/BlockDevices/QSPIFlashBlockDevice.cpp b/libraries/BlockDevices/QSPIFlashBlockDevice.cpp index 44c5cc094..6d8de4c6a 100644 --- a/libraries/BlockDevices/QSPIFlashBlockDevice.cpp +++ b/libraries/BlockDevices/QSPIFlashBlockDevice.cpp @@ -328,7 +328,7 @@ int QSPIFlashBlockDevice::erase(bd_addr_t add, bd_size_t _size) { uint32_t num_of_blocks = (_size / erase_block_size); - for(int i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { + for(uint32_t i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { /* set bank */ uint32_t bank = add / READ_PAGE_SIZE; uint32_t address = base_address + ((add + i * erase_block_size) % READ_PAGE_SIZE); From 2fe862edb19891d270d9e9423bfee0b50dfa8ad5 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 14 Feb 2025 12:16:31 +0100 Subject: [PATCH 4/9] SDCardBlockDevice: remove unused variable --- libraries/BlockDevices/SDCardBlockDevice.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/BlockDevices/SDCardBlockDevice.cpp b/libraries/BlockDevices/SDCardBlockDevice.cpp index 9649e0e5c..2561f9526 100644 --- a/libraries/BlockDevices/SDCardBlockDevice.cpp +++ b/libraries/BlockDevices/SDCardBlockDevice.cpp @@ -166,7 +166,6 @@ SDCardBlockDevice::~SDCardBlockDevice() { /* CALLBACK */ /* -------------------------------------------------------------------------- */ void SDCardBlockDevice::SDCardBlockDeviceCbk(sdmmc_callback_args_t *arg) { - int open_status = -1; if(arg != nullptr) { sdmmc_event_t event = arg->event; From 12b34e36b930e4bd3c17abb0972fe222caef2a3e Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 14 Feb 2025 12:16:59 +0100 Subject: [PATCH 5/9] SDCardBlockDevice: fix signed/unsigned comparison --- libraries/BlockDevices/SDCardBlockDevice.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/BlockDevices/SDCardBlockDevice.cpp b/libraries/BlockDevices/SDCardBlockDevice.cpp index 2561f9526..b410aaeaf 100644 --- a/libraries/BlockDevices/SDCardBlockDevice.cpp +++ b/libraries/BlockDevices/SDCardBlockDevice.cpp @@ -367,8 +367,8 @@ int SDCardBlockDevice::read(void *buffer, bd_addr_t add, bd_size_t _size) { uint32_t num_of_blocks = (_size / read_block_size); uint32_t start_add_of_block = (add / read_block_size); rv = FSP_SUCCESS; - for(int i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { - rv = R_SDHI_Read (&ctrl, (uint8_t *)(buffer + (i * read_block_size)), start_add_of_block + i, 1); + for(uint32_t i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { + rv = R_SDHI_Read (&ctrl, (uint8_t *)((uint8_t *)buffer + (i * read_block_size)), start_add_of_block + i, 1); if(rv == FSP_SUCCESS) { rv = wait_for_completition(); } @@ -403,8 +403,8 @@ int SDCardBlockDevice::write(const void *buffer, bd_addr_t add, bd_size_t _size) uint32_t num_of_blocks = (_size / write_block_size); uint32_t start_block_number = (add / write_block_size); rv = FSP_SUCCESS; - for(int i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { - rv = R_SDHI_Write (&ctrl, (uint8_t *)(buffer + (i * write_block_size)), start_block_number + i, 1); + for(uint32_t i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { + rv = R_SDHI_Write (&ctrl, (uint8_t *)((uint8_t *)buffer + (i * write_block_size)), start_block_number + i, 1); if(rv == FSP_SUCCESS) { rv = wait_for_completition(); } @@ -438,7 +438,7 @@ int SDCardBlockDevice::erase(bd_addr_t add, bd_size_t _size) { uint32_t num_of_blocks = (_size / erase_block_size); uint32_t start_block_number = (add / erase_block_size); rv = FSP_SUCCESS; - for(int i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { + for(uint32_t i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { rv = R_SDHI_Erase (&ctrl, start_block_number + i, 1); if(rv == FSP_SUCCESS) { rv = wait_for_completition(); From c265d86b1aedbb36a215f7f1a5a2c1790a713a40 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 14 Feb 2025 12:17:27 +0100 Subject: [PATCH 6/9] SDCardBlockDevice: fix ctor initialization order --- libraries/BlockDevices/SDCardBlockDevice.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libraries/BlockDevices/SDCardBlockDevice.h b/libraries/BlockDevices/SDCardBlockDevice.h index 14979719a..6007e9144 100644 --- a/libraries/BlockDevices/SDCardBlockDevice.h +++ b/libraries/BlockDevices/SDCardBlockDevice.h @@ -60,13 +60,22 @@ enum class CmdStatus { class SDCardBlockDevice : public BlockDevice { private: - sdmmc_device_t sd_card_info; + pin_t ck; + pin_t cmd; + pin_t d0; + pin_t d1; + pin_t d2; + pin_t d3; + pin_t cd; + pin_t wp; bd_addr_t base_address; bd_size_t total_size; bd_size_t read_block_size; bd_size_t erase_block_size; bd_size_t write_block_size; + bool opened; sdhi_instance_ctrl_t ctrl; + sdmmc_device_t sd_card_info; sdmmc_cfg_t cfg; #ifdef USE_DMAC @@ -84,14 +93,7 @@ class SDCardBlockDevice : public BlockDevice { transfer_cfg_t dtc_cfg; transfer_instance_t dtc_instance; #endif - pin_t ck; - pin_t cmd; - pin_t d0; - pin_t d1; - pin_t d2; - pin_t d3; - pin_t cd; - pin_t wp; + static volatile bool initialized; static volatile bool card_inserted; static volatile CmdStatus st; @@ -99,7 +101,7 @@ class SDCardBlockDevice : public BlockDevice { virtual int write(const void *buffer, bd_addr_t addr, bd_size_t size) override; virtual int open() override; virtual int close() override; - bool opened; + fsp_err_t wait_for_completition(); public: From 1cee16bc2c449762f999714dcc0d5ff00e30156b Mon Sep 17 00:00:00 2001 From: Mattia Pennasilico Date: Mon, 24 Feb 2025 09:28:25 +0100 Subject: [PATCH 7/9] SDCardBlockDevice: avoid double cast Co-authored-by: Daniele <34984733+maidnl@users.noreply.github.com> --- libraries/BlockDevices/SDCardBlockDevice.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/BlockDevices/SDCardBlockDevice.cpp b/libraries/BlockDevices/SDCardBlockDevice.cpp index b410aaeaf..4a40b5976 100644 --- a/libraries/BlockDevices/SDCardBlockDevice.cpp +++ b/libraries/BlockDevices/SDCardBlockDevice.cpp @@ -368,7 +368,8 @@ int SDCardBlockDevice::read(void *buffer, bd_addr_t add, bd_size_t _size) { uint32_t start_add_of_block = (add / read_block_size); rv = FSP_SUCCESS; for(uint32_t i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { - rv = R_SDHI_Read (&ctrl, (uint8_t *)((uint8_t *)buffer + (i * read_block_size)), start_add_of_block + i, 1); + uint8_t *buf = (uint8_t *)buffer; + rv = R_SDHI_Read (&ctrl, buf + (i * read_block_size), start_add_of_block + i, 1); if(rv == FSP_SUCCESS) { rv = wait_for_completition(); } From e79d4ff90d720dbf1eb0fee84ae9ac43f7f005bc Mon Sep 17 00:00:00 2001 From: Mattia Pennasilico Date: Mon, 24 Feb 2025 09:29:32 +0100 Subject: [PATCH 8/9] SDCardBlockDevice: avoid double cast Co-authored-by: Daniele <34984733+maidnl@users.noreply.github.com> --- libraries/BlockDevices/SDCardBlockDevice.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/BlockDevices/SDCardBlockDevice.cpp b/libraries/BlockDevices/SDCardBlockDevice.cpp index 4a40b5976..275b5cfae 100644 --- a/libraries/BlockDevices/SDCardBlockDevice.cpp +++ b/libraries/BlockDevices/SDCardBlockDevice.cpp @@ -405,7 +405,8 @@ int SDCardBlockDevice::write(const void *buffer, bd_addr_t add, bd_size_t _size) uint32_t start_block_number = (add / write_block_size); rv = FSP_SUCCESS; for(uint32_t i = 0; i < num_of_blocks && rv == FSP_SUCCESS; i++) { - rv = R_SDHI_Write (&ctrl, (uint8_t *)((uint8_t *)buffer + (i * write_block_size)), start_block_number + i, 1); + uint8_t *buf = (uint8_t *)buffer; + rv = R_SDHI_Write (&ctrl, buf + (i * write_block_size), start_block_number + i, 1); if(rv == FSP_SUCCESS) { rv = wait_for_completition(); } From e8858c0dd62a648cc9908659c51e8ced239751af Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 24 Feb 2025 09:32:50 +0100 Subject: [PATCH 9/9] storage_common: fix signed comparison --- libraries/Storage/storage_common.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/Storage/storage_common.h b/libraries/Storage/storage_common.h index ab5258116..332472259 100644 --- a/libraries/Storage/storage_common.h +++ b/libraries/Storage/storage_common.h @@ -7,8 +7,8 @@ extern "C" { #endif -//#define STORAGE_DEBUG -//#define STORAGE_ASSERT +#define STORAGE_DEBUG +#define STORAGE_ASSERT /* -------------------------------------------------------------------------- */ /* STORAGE DEBUG */ @@ -61,7 +61,7 @@ static inline void rns_storage_dbg_mem(uint8_t *b, uint32_t _size) { if (b != nullptr) { Serial.println(""); - for(int i = 0; i < _size; i++) { + for(uint32_t i = 0; i < _size; i++) { if(i != 0 && i % PRINT_SIZE == 0) { if(i != 0) Serial.println();