Add driver for writing into the internal flash.

Write the OK flag for mcuboot using this driver.
This commit is contained in:
JF
2020-05-24 20:30:06 +02:00
parent 00451ef05b
commit 4717cf0a1d
4 changed files with 63 additions and 27 deletions

View File

@@ -0,0 +1,39 @@
#include <sdk/modules/nrfx/mdk/nrf.h>
#include "InternalFlash.h"
using namespace Pinetime::Drivers;
void InternalFlash::ErasePage(uint32_t address) {
// Enable erase.
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Een;
__ISB();
__DSB();
// Erase the page
NRF_NVMC->ERASEPAGE = address;
Wait();
// Disable erase
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
__ISB();
__DSB();
}
void InternalFlash::WriteWord(uint32_t address, uint32_t value) {
// Enable write.
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
__ISB();
__DSB();
// Write word
*(uint32_t*)address = value;
Wait();
// Disable write
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
__ISB();
__DSB();
}
void InternalFlash::Wait() {
while (NRF_NVMC->READY == NVMC_READY_READY_Busy) {;}
}

View File

@@ -0,0 +1,15 @@
#pragma once
#include <cstdint>
namespace Pinetime {
namespace Drivers {
class InternalFlash {
public:
static void ErasePage(uint32_t address);
static void WriteWord(uint32_t address, uint32_t value);
private:
static inline void Wait();
};
}
}