From 81dc223d980c912043abb15578e18c647900a422 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Tue, 17 Feb 2026 18:50:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/memspi.c | 13 +++++++------ Src/memspi_core.c | 4 ++++ Src/set_to_mem.c | 6 +++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Src/memspi.c b/Src/memspi.c index 2fc60f5..a5cbb89 100644 --- a/Src/memspi.c +++ b/Src/memspi.c @@ -278,16 +278,17 @@ HAL_StatusTypeDef MEMSPI_FLASH_Program(MEMSPI_HandleTypeDef *hmemspi, uint32_t F hmemspi->hNextAddr = FLASH_Address; // address would automatically increase in this variable hmemspi->hNextPage = firstpage+1; // address would automatically increase in this variable uint16_t bytecnt = 0; + uint16_t bytecnt_to_tx = 0; for(int i = 0; i < lastpage - firstpage; i++) { // calc bytes to next sector - hmemspi->TxSize = hmemspi->hNextPage*MEMSPI_PAGE_SIZE - hmemspi->hNextAddr; + bytecnt_to_tx = hmemspi->hNextPage*MEMSPI_PAGE_SIZE - hmemspi->hNextAddr; - MEMSPI_Status = MEMSPI_FLASH_Program_Page(hmemspi, hmemspi->hNextAddr, &pData[bytecnt], hmemspi->TxSize, &Timeout, &tickstart, 0); // programm page + MEMSPI_Status = MEMSPI_FLASH_Program_Page(hmemspi, hmemspi->hNextAddr, &pData[bytecnt], bytecnt_to_tx, &Timeout, &tickstart, 0); // programm page if(MEMSPI_Status != HAL_OK) // note: no need waiting for end: the next call will wait for unbusy return MEMSPI_Status; // then we shift byte count to data, that shoud be on the next page - bytecnt += hmemspi->TxSize; + bytecnt += bytecnt_to_tx; } // PROGRAM LAST PAGE MEMSPI_Status = MEMSPI_FLASH_Program_Page(hmemspi, hmemspi->hNextAddr, &pData[bytecnt], lastpage_size, &Timeout, &tickstart, WaitForEnd); // programm page @@ -482,7 +483,7 @@ HAL_StatusTypeDef MEMSPI_FLASH_Program_Page(MEMSPI_HandleTypeDef *hmemspi, uint3 #ifndef FLASHTYPE_BYTE_PROGRAMM // PROGRAM WHOLE PAGE // enable writting and waiting for unbusy - if(MEMSPI_WriteEnablingUntilTimeout(hmemspi, &Timeout, &tickstart) != HAL_OK) // if writting isnt enable + if(MEMSPI_WriteEnablingUntilTimeout(hmemspi, Timeout, tickstart) != HAL_OK) // if writting isnt enable return HAL_TIMEOUT; // return timeout // check if flash range is placed at one page @@ -490,13 +491,13 @@ HAL_StatusTypeDef MEMSPI_FLASH_Program_Page(MEMSPI_HandleTypeDef *hmemspi, uint3 return HAL_ERROR; // return error // programm page (instruction) - MEMSPI_Status = MEMSPI_CMD_FLASH_Page_Program(hmemspi, FLASH_Address, pData, Size, Timeout); + MEMSPI_Status = MEMSPI_CMD_FLASH_Page_Program(hmemspi, FLASH_Address, pData, Size, *Timeout); if(MEMSPI_Status != HAL_OK) return MEMSPI_Status; // waiting for ending of writting if need if(WaitForEnd) - if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, &Timeout, &tickstart) != HAL_OK) // if writting isnt done (MEMSPI busy and WEL bit isnt in reset state) + if(MEMSPI_WaitOnFlagsUntilTimeout(hmemspi, MEMSPI_SR_WEL|MEMSPI_SR_BUSY, 0, Timeout, tickstart) != HAL_OK) // if writting isnt done (MEMSPI busy and WEL bit isnt in reset state) return HAL_TIMEOUT; #else // PROGRAM PAGE BY BYTES diff --git a/Src/memspi_core.c b/Src/memspi_core.c index 62b4493..5063525 100644 --- a/Src/memspi_core.c +++ b/Src/memspi_core.c @@ -218,6 +218,7 @@ HAL_StatusTypeDef MEMSPI_CMD_FLASH_Page_Program(MEMSPI_HandleTypeDef *hmemspi, u */ HAL_StatusTypeDef MEMSPI_CMD_FLASH_Byte_Program(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t Byte, uint32_t Timeout) { +#ifdef MEMSPI_BYTE_PROGRAM HAL_StatusTypeDef SPI_RES; // 1 command byte + 3 address bytes + 256 data bytes uint8_t command[1+3+MEMSPI_PAGE_SIZE]; @@ -238,6 +239,9 @@ HAL_StatusTypeDef MEMSPI_CMD_FLASH_Byte_Program(MEMSPI_HandleTypeDef *hmemspi, u printf_memspi_err("Error Program Byte: 0x%08lX", (unsigned long)FLASH_Address); } return SPI_RES; +#else + return HAL_ERROR; +#endif } /** diff --git a/Src/set_to_mem.c b/Src/set_to_mem.c index 1ee5bfa..d5825a6 100644 --- a/Src/set_to_mem.c +++ b/Src/set_to_mem.c @@ -262,12 +262,14 @@ void WriteSettingsToMem(SettingsTypeDef *settings) } #else //SETTINGS_USE_WEAR_LEVELING_FLASH +#ifndef SETTINGS_USE_MEMORY_EEPROM if(MEMSPI_FLASH_Protection(settings->hmemspi, settings->start_adr, settings->settings_size, DISABLE, 1000) != HAL_OK) { settings->settings_error |= MEMORY_ERROR_WRITE; return; } - +#endif //SETTINGS_USE_MEMORY_EEPROM + for(uint8_t i = 0; i < settings->setarr_count; i++) { @@ -275,11 +277,13 @@ void WriteSettingsToMem(SettingsTypeDef *settings) } +#ifndef SETTINGS_USE_MEMORY_EEPROM if(MEMSPI_FLASH_Protection(settings->hmemspi, settings->start_adr, settings->settings_size, DISABLE, 1000) != HAL_OK) { settings->settings_error |= MEMORY_ERROR_WRITE; return; } +#endif //SETTINGS_USE_MEMORY_EEPROM #endif //SETTINGS_USE_WEAR_LEVELING_FLASH