Мелкие фиксы
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->hNextAddr = FLASH_Address; // address would automatically increase in this variable
|
||||||
hmemspi->hNextPage = firstpage+1; // 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 = 0;
|
||||||
|
uint16_t bytecnt_to_tx = 0;
|
||||||
for(int i = 0; i < lastpage - firstpage; i++)
|
for(int i = 0; i < lastpage - firstpage; i++)
|
||||||
{
|
{
|
||||||
// calc bytes to next sector
|
// 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
|
if(MEMSPI_Status != HAL_OK) // note: no need waiting for end: the next call will wait for unbusy
|
||||||
return MEMSPI_Status;
|
return MEMSPI_Status;
|
||||||
// then we shift byte count to data, that shoud be on the next page
|
// then we shift byte count to data, that shoud be on the next page
|
||||||
bytecnt += hmemspi->TxSize;
|
bytecnt += bytecnt_to_tx;
|
||||||
}
|
}
|
||||||
// PROGRAM LAST PAGE
|
// PROGRAM LAST PAGE
|
||||||
MEMSPI_Status = MEMSPI_FLASH_Program_Page(hmemspi, hmemspi->hNextAddr, &pData[bytecnt], lastpage_size, &Timeout, &tickstart, WaitForEnd); // programm 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
|
#ifndef FLASHTYPE_BYTE_PROGRAMM
|
||||||
// PROGRAM WHOLE PAGE
|
// PROGRAM WHOLE PAGE
|
||||||
// enable writting and waiting for unbusy
|
// 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
|
return HAL_TIMEOUT; // return timeout
|
||||||
|
|
||||||
// check if flash range is placed at one page
|
// 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
|
return HAL_ERROR; // return error
|
||||||
|
|
||||||
// programm page (instruction)
|
// 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)
|
if(MEMSPI_Status != HAL_OK)
|
||||||
return MEMSPI_Status;
|
return MEMSPI_Status;
|
||||||
|
|
||||||
// waiting for ending of writting if need
|
// waiting for ending of writting if need
|
||||||
if(WaitForEnd)
|
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;
|
return HAL_TIMEOUT;
|
||||||
#else
|
#else
|
||||||
// PROGRAM PAGE BY BYTES
|
// 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)
|
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;
|
HAL_StatusTypeDef SPI_RES;
|
||||||
// 1 command byte + 3 address bytes + 256 data bytes
|
// 1 command byte + 3 address bytes + 256 data bytes
|
||||||
uint8_t command[1+3+MEMSPI_PAGE_SIZE];
|
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);
|
printf_memspi_err("Error Program Byte: 0x%08lX", (unsigned long)FLASH_Address);
|
||||||
}
|
}
|
||||||
return SPI_RES;
|
return SPI_RES;
|
||||||
|
#else
|
||||||
|
return HAL_ERROR;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -262,12 +262,14 @@ void WriteSettingsToMem(SettingsTypeDef *settings)
|
|||||||
}
|
}
|
||||||
#else //SETTINGS_USE_WEAR_LEVELING_FLASH
|
#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)
|
if(MEMSPI_FLASH_Protection(settings->hmemspi, settings->start_adr, settings->settings_size, DISABLE, 1000) != HAL_OK)
|
||||||
{
|
{
|
||||||
settings->settings_error |= MEMORY_ERROR_WRITE;
|
settings->settings_error |= MEMORY_ERROR_WRITE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif //SETTINGS_USE_MEMORY_EEPROM
|
||||||
|
|
||||||
for(uint8_t i = 0; i < settings->setarr_count; i++)
|
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)
|
if(MEMSPI_FLASH_Protection(settings->hmemspi, settings->start_adr, settings->settings_size, DISABLE, 1000) != HAL_OK)
|
||||||
{
|
{
|
||||||
settings->settings_error |= MEMORY_ERROR_WRITE;
|
settings->settings_error |= MEMORY_ERROR_WRITE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif //SETTINGS_USE_MEMORY_EEPROM
|
||||||
#endif //SETTINGS_USE_WEAR_LEVELING_FLASH
|
#endif //SETTINGS_USE_WEAR_LEVELING_FLASH
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user