summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarturo182 <arturo182@tlen.pl>2018-02-10 14:43:58 +0100
committerarturo182 <arturo182@tlen.pl>2018-02-10 14:43:58 +0100
commitf1d8a2d149bc84b6633d0fb7cd788bb6a380e427 (patch)
tree21a74dc8d6acddf746841027401669ecd7b3e394
parent381f47bfb08a3a2dc492bfd0d6f2bffc295b6cd9 (diff)
nrf: Fix memory misalignment during flash write
-rw-r--r--ports/nrf/internal_flash.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/ports/nrf/internal_flash.c b/ports/nrf/internal_flash.c
index 9df105146..2f069a2f9 100644
--- a/ports/nrf/internal_flash.c
+++ b/ports/nrf/internal_flash.c
@@ -90,7 +90,7 @@ bool internal_flash_write_block(const uint8_t *src, uint32_t block) {
uint32_t dest = convert_block_to_flash_addr(block);
uint32_t pagenum = dest / FLASH_PAGE_SIZE;
- uint8_t* flash_align = (uint8_t*) (pagenum*FLASH_PAGE_SIZE);
+ uint32_t* flash_align = (uint32_t*) (pagenum*FLASH_PAGE_SIZE);
// Read back current page to update only 512 portion
__ALIGN(4) uint8_t buf[FLASH_PAGE_SIZE];
@@ -105,7 +105,7 @@ bool internal_flash_write_block(const uint8_t *src, uint32_t block) {
return false;
}
- if (NRF_SUCCESS != sd_flash_write((uint32_t*) flash_align, (uint32_t*) buf, FLASH_PAGE_SIZE / sizeof(uint32_t))) {
+ if (NRF_SUCCESS != sd_flash_write(flash_align, (uint32_t*) buf, FLASH_PAGE_SIZE / sizeof(uint32_t))) {
return false;
}
}
@@ -123,14 +123,15 @@ bool internal_flash_write_block(const uint8_t *src, uint32_t block) {
while (NRF_NVMC->READY == NVMC_READY_READY_Busy);
// Write
- uint32_t *src = (uint32_t*) buf;
+ uint32_t *p_src = (uint32_t*) buf;
+ uint32_t *p_dest = flash_align;
uint32_t i = 0;
while (i < (FLASH_PAGE_SIZE / sizeof(uint32_t))) {
NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos);
while (NRF_NVMC->READY == NVMC_READY_READY_Busy);
- *flash_align++ = *src++;
+ *p_dest++ = *p_src++;
while (NRF_NVMC->READY == NVMC_READY_READY_Busy);