12#define FLASH_ECC_LINE_SIZE (256 / 8)
17#define FLASH_WRITE_STEP FLASH_ECC_LINE_SIZE
18#define FLASH_WRITE_ADDR_MASK (~(FLASH_WRITE_STEP - 1))
72 return FLASH_BASE + 128 * 1024;
74 return FLASH_BASE + 32 * 1024;
121 static const size_t checksumOffset = 0x1C;
126 size_t imageSize = *
reinterpret_cast<size_t*
>(start + checksumOffset + 4);
128 if (imageSize > 1024 * 1024) {
134 uint32_t calcChecksum = crc32(start, checksumOffset);
136 calcChecksum = crc32inc(start + checksumOffset + 4, calcChecksum, imageSize - (checksumOffset + 4));
138 uint32_t storedChecksum = *
reinterpret_cast<uint32_t*
>(start + checksumOffset);
140 return calcChecksum == storedChecksum ? BLT_TRUE : BLT_FALSE;
146 return (FLASH->OPTCR & FLASH_OPTCR_nDBANK) == 0 ? BLT_TRUE : BLT_FALSE;
return FLASH_RETURN_SUCCESS
int intFlashErase(flashaddr_t address, size_t size)
Erase the sectors containing the span of size bytes starting at address.
int intFlashWrite(flashaddr_t address, const char *buffer, size_t size)
Copy data from a buffer to the flash memory.
bool intFlashIsErased(flashaddr_t address, size_t size)
Check if the size bytes of flash memory starting at address are erased.
blt_bool isFlashDualBank(void)
static blt_int8u flashBuffer[FLASH_ECC_LINE_SIZE]
blt_bool FlashVerifyChecksum()
static blt_bool FlashBufferedWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
blt_addr FlashGetUserProgBaseAddress()
static blt_bool FlashBufferFlush()
static blt_addr flashAddr
blt_bool FlashWriteChecksum()
static void FlashBufferReset()
blt_bool FlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
blt_bool FlashErase(blt_addr addr, blt_int32u len)