/* * Created on: Jul 29, 2024 * * routines for fucking around with built in flash memory. */ #include #include // reads from flash in 32-bit mode uint8_t flash_read(uint32_t *flash_addr, uint32_t *data, uint32_t len) { uint32_t *addr = (uint32_t *)flash_addr; while (len >= 4) { *data++ = *addr++; len -= 4; } return 0; } // erases flash page, then writes 256-byte data buffer to flash page // flash page must be at 256-byte boundary uint8_t flash_write256(uint32_t *flash_addr, uint32_t *data) { FLASH_Status s; // erase flash page s = FLASH_ROM_ERASE((uint32_t)flash_addr, 256); if (s != FLASH_COMPLETE) { return s; } s = FLASH_ROM_WRITE((uint32_t)flash_addr, data, 256); if (s != FLASH_COMPLETE) { return s; } return 0; }