diff options
| author | Nick Moore <nick@zoic.org> | 2019-04-04 15:42:33 +1100 |
|---|---|---|
| committer | Nick Moore <nick@zoic.org> | 2019-04-16 14:53:44 +1000 |
| commit | 66e8ceafadbeedfa4b1c64d76bbb7589a39c4142 (patch) | |
| tree | e0d6989616c5028feb5d7635abbcd94f201cdb3e /ports | |
| parent | fd83cf2048dbf8e5581b4f5f29681ca20cda56a1 (diff) | |
switch nvm.ByteArray to use new nrf_nvm_safe_flash_page_write
adafruit/circuitpython#1610
Diffstat (limited to 'ports')
| -rw-r--r-- | ports/nrf/common-hal/nvm/ByteArray.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/ports/nrf/common-hal/nvm/ByteArray.c b/ports/nrf/common-hal/nvm/ByteArray.c index 7393ce0a5..d69abbdac 100644 --- a/ports/nrf/common-hal/nvm/ByteArray.c +++ b/ports/nrf/common-hal/nvm/ByteArray.c @@ -29,7 +29,7 @@ #include <stdio.h> #include <string.h> -#include "nrf_nvmc.h" +#include "peripherals/nrf/nvm.h" uint32_t common_hal_nvm_bytearray_get_length(nvm_bytearray_obj_t *self) { return self->len; @@ -38,18 +38,14 @@ uint32_t common_hal_nvm_bytearray_get_length(nvm_bytearray_obj_t *self) { static void write_page(uint32_t page_addr, uint32_t offset, uint32_t len, uint8_t *bytes) { // Write a whole page to flash, buffering it first and then erasing and rewriting // it since we can only clear a whole page at a time. - // TODO (maybe) check if only clearing bits (don't need to erase) - // XXX should this suspend interrupts so erase/write is atomic? if (offset == 0 && len == FLASH_PAGE_SIZE) { - nrf_nvmc_page_erase(page_addr); - nrf_nvmc_write_bytes(page_addr, bytes, FLASH_PAGE_SIZE); + nrf_nvm_safe_flash_page_write(page_addr, bytes); } else { uint8_t buffer[FLASH_PAGE_SIZE]; memcpy(buffer, (uint8_t *)page_addr, FLASH_PAGE_SIZE); memcpy(buffer + offset, bytes, len); - nrf_nvmc_page_erase(page_addr); - nrf_nvmc_write_bytes(page_addr, buffer, FLASH_PAGE_SIZE); + nrf_nvm_safe_flash_page_write(page_addr, buffer); } } |
