6 #include "DrvFlash.hpp"
7 #include "RtosInclude.hpp"
9 void DrvFlash::unlock() {
10 FLASH ->SR |= (FLASH_SR_PGSERR | FLASH_SR_PGPERR | FLASH_SR_PGAERR | FLASH_SR_WRPERR | FLASH_SR_SOP );
11 FLASH ->KEYR = ((uint32_t) 0x45670123);
12 FLASH ->KEYR = ((uint32_t) 0xCDEF89AB);
15 void DrvFlash::lock() {
16 FLASH ->CR |= FLASH_CR_LOCK;
19 bool DrvFlash::erasePage(
unsigned int page) {
20 if (!waitActionComplete()) {
24 FLASH ->CR = (page << 3) | FLASH_CR_SER;
25 FLASH ->CR |= FLASH_CR_STRT;
27 if (!waitActionComplete()) {
34 bool DrvFlash::write(
const void* dst,
const void* src,
size_t len) {
35 if (!waitActionComplete()) {
39 uint8_t* dst8 = (uint8_t*) dst;
40 uint8_t* src8 = (uint8_t*) src;
41 for (
size_t i = 0; i < len; i++) {
42 FLASH ->CR = FLASH_CR_PG;
44 if (!waitActionComplete()) {
47 FLASH ->CR &= ~FLASH_CR_PG;
52 bool DrvFlash::waitActionComplete() {
53 while (FLASH ->SR & FLASH_SR_BSY ) {
55 if (FLASH ->SR & (FLASH_SR_PGSERR | FLASH_SR_PGPERR | FLASH_SR_PGAERR | FLASH_SR_WRPERR | FLASH_SR_SOP )) {