Мелкие фиксы
This commit is contained in:
13
Src/memspi.c
13
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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user