Мелкие фиксы

This commit is contained in:
2026-02-17 18:50:11 +03:00
parent 643391038e
commit 81dc223d98
3 changed files with 16 additions and 7 deletions

View File

@@ -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

View File

@@ -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
}
/**

View File

@@ -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