kopia lustrzana https://github.com/OpenRTX/OpenRTX
Fixed a bug in STM32 flash driver causing data not being written to the internal flash.
Solves #133.pull/149/head
rodzic
0a1ccbf3bb
commit
6c12a326cc
|
@ -58,14 +58,16 @@ bool flash_eraseSector(const uint8_t secNum)
|
||||||
// Flash busy, wait until previous operation finishes
|
// Flash busy, wait until previous operation finishes
|
||||||
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
||||||
|
|
||||||
FLASH->CR |= FLASH_CR_PSIZE_1 // 32-bit program parallelism
|
FLASH->CR |= FLASH_CR_SER; // Sector erase
|
||||||
| (secNum << 3) // Sector number
|
FLASH->CR &= ~FLASH_CR_SNB;
|
||||||
| FLASH_CR_SER // Sector erase
|
FLASH->CR |= (secNum << 3); // Sector number
|
||||||
| FLASH_CR_STRT; // Start erase
|
FLASH->CR |= FLASH_CR_STRT; // Start erase
|
||||||
|
|
||||||
// Wait until erase ends
|
// Wait until erase ends
|
||||||
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
||||||
|
|
||||||
|
FLASH->CR &= ~FLASH_CR_SER;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,21 +76,18 @@ void flash_write(const uint32_t address, const void *data, const size_t len)
|
||||||
if(unlock() == false) return;
|
if(unlock() == false) return;
|
||||||
if((data == NULL) || (len == 0)) return;
|
if((data == NULL) || (len == 0)) return;
|
||||||
|
|
||||||
// Flash busy, wait until previous operation finishes
|
// Write data to memory, 8 bit at a time
|
||||||
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
|
||||||
|
|
||||||
// Request programming with 8-bit parallelism
|
|
||||||
FLASH->CR = FLASH_CR_PG;
|
|
||||||
|
|
||||||
// Write data to memory
|
|
||||||
const uint8_t *buf = ((uint8_t *) data);
|
const uint8_t *buf = ((uint8_t *) data);
|
||||||
uint8_t *mem = ((uint8_t *) address);
|
uint8_t *mem = ((uint8_t *) address);
|
||||||
for(size_t i = 0; i < len; i++)
|
for(size_t i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
|
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
||||||
|
FLASH->CR = FLASH_CR_PG;
|
||||||
|
|
||||||
*mem = buf[i];
|
*mem = buf[i];
|
||||||
mem++;
|
mem++;
|
||||||
}
|
|
||||||
|
|
||||||
// Wait until the end of the write operation
|
|
||||||
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
while((FLASH->SR & FLASH_SR_BSY) != 0) ;
|
||||||
|
FLASH->CR &= ~FLASH_CR_PG;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue