From d5dcd3a564a6cb1c7f5d230e2fbc02996bf437be Mon Sep 17 00:00:00 2001 From: hathach Date: Fri, 28 Sep 2018 16:27:58 +0700 Subject: [PATCH] rename flash to flash_nrf5x --- Makefile | 4 +- src/flash.c | 85 ------------------ src/flash.h | 58 ------------ src/flash_nrf5x.c | 89 +++++++++++++++++++ src/flash_nrf5x.h | 57 ++++++++++++ src/pstorage_platform.h | 2 +- .../Adafruit_nRF52_Bootloader.emProject | 3 +- src/usb/uf2/ghostfat.c | 2 +- 8 files changed, 152 insertions(+), 148 deletions(-) delete mode 100644 src/flash.c delete mode 100644 src/flash.h create mode 100644 src/flash_nrf5x.c create mode 100644 src/flash_nrf5x.h diff --git a/Makefile b/Makefile index b69aa59..8397856 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ endif # src C_SOURCE_FILES += $(SRC_PATH)/main.c C_SOURCE_FILES += $(SRC_PATH)/boards.c -C_SOURCE_FILES += $(SRC_PATH)/flash.c +C_SOURCE_FILES += $(SRC_PATH)/flash_nrf5x.c C_SOURCE_FILES += $(SRC_PATH)/dfu_ble_svc.c C_SOURCE_FILES += $(SRC_PATH)/dfu_init.c @@ -250,7 +250,7 @@ CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 # keep every function in separate section. This will allow linker to dump unused functions CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing -CFLAGS += -fno-builtin --short-enums +CFLAGS += -fno-builtin --short-enums -fstack-usage # Defined Symbol (MACROS) CFLAGS += -DMK_BOOTLOADER_VERSION=0x0$(SD_VER1)0$(SD_VER2)0$(SD_VER3)0$(SD_VER4)UL diff --git a/src/flash.c b/src/flash.c deleted file mode 100644 index fcf8b56..0000000 --- a/src/flash.c +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************/ -/*! - @file flash.c - @author hathach (tinyusb.org) - - @section LICENSE - - Software License Agreement (BSD License) - - Copyright (c) 2018, Adafruit Industries (adafruit.com) - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the copyright holders nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/**************************************************************************/ - -#include -#include "flash.h" -#include "boards.h" - -#include "nrf_sdm.h" - -#define FLASH_PAGE_SIZE 4096 - -#define FLASH_CACHE_INVALID_ADDR 0xffffffff - -static uint32_t _fl_addr = FLASH_CACHE_INVALID_ADDR; -static uint8_t _fl_buf[FLASH_PAGE_SIZE] __attribute__((aligned(4))); - -void flash_flush(void) -{ - if ( _fl_addr == FLASH_CACHE_INVALID_ADDR ) return; - - if ( memcmp(_fl_buf, (void *) _fl_addr, FLASH_PAGE_SIZE) != 0 ) - { - nrf_nvmc_page_erase(_fl_addr); - nrf_nvmc_write_words(_fl_addr, (uint32_t *) _fl_buf, FLASH_PAGE_SIZE / sizeof(uint32_t)); - } - - _fl_addr = FLASH_CACHE_INVALID_ADDR; -} - -void flash_write (uint32_t dst, void const *src, int len) -{ - uint32_t newAddr = dst & ~(FLASH_PAGE_SIZE - 1); - - if ( newAddr != _fl_addr ) - { - flash_flush(); - _fl_addr = newAddr; - memcpy(_fl_buf, (void *) newAddr, FLASH_PAGE_SIZE); - } - memcpy(_fl_buf + (dst & (FLASH_PAGE_SIZE - 1)), src, len); -} - -void flash_erase(uint32_t addr, uint32_t bytes) -{ - uint32_t page_count = bytes/FLASH_PAGE_SIZE; - if ( bytes%FLASH_PAGE_SIZE ) page_count++; - - for(uint32_t i=0; i -#include - -#include "nrf_nvmc.h" - -#ifdef __cplusplus - extern "C" { -#endif - -//void flash_erase(uint32_t page_addr); -void flash_write(uint32_t dst, const void *src, int len); -void flash_flush(void); -void flash_erase(uint32_t addr, uint32_t bytes); - -#ifdef __cplusplus - } -#endif - -#endif /* FLASH_H_ */ diff --git a/src/flash_nrf5x.c b/src/flash_nrf5x.c new file mode 100644 index 0000000..8d7efee --- /dev/null +++ b/src/flash_nrf5x.c @@ -0,0 +1,89 @@ +/**************************************************************************/ +/*! + @file flash_nrf5x.c + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2018, Adafruit Industries (adafruit.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ + +#include +#include "flash_nrf5x.h" +#include "boards.h" + +#include "nrf_sdm.h" + +#define FLASH_PAGE_SIZE 4096 + +#define FLASH_CACHE_INVALID_ADDR 0xffffffff + +static uint32_t _fl_addr = FLASH_CACHE_INVALID_ADDR; +static uint8_t _fl_buf[FLASH_PAGE_SIZE] __attribute__((aligned(4))); + +void flash_flush(void) +{ + if ( _fl_addr == FLASH_CACHE_INVALID_ADDR ) return; + + if ( memcmp(_fl_buf, (void *) _fl_addr, FLASH_PAGE_SIZE) != 0 ) + { + // nrf_nvmc_page_erase(_fl_addr); + //nrf_nvmc_write_words(_fl_addr, (uint32_t *) _fl_buf, FLASH_PAGE_SIZE/4); + + sd_flash_page_erase(_fl_addr/FLASH_PAGE_SIZE); + sd_flash_write((uint32_t*) _fl_addr, (uint32_t *) _fl_buf, FLASH_PAGE_SIZE/4); + + } + + _fl_addr = FLASH_CACHE_INVALID_ADDR; +} + +void flash_write (uint32_t dst, void const *src, int len) +{ + uint32_t newAddr = dst & ~(FLASH_PAGE_SIZE - 1); + + if ( newAddr != _fl_addr ) + { + flash_flush(); + _fl_addr = newAddr; + memcpy(_fl_buf, (void *) newAddr, FLASH_PAGE_SIZE); + } + memcpy(_fl_buf + (dst & (FLASH_PAGE_SIZE - 1)), src, len); +} + +void flash_erase(uint32_t addr, uint32_t bytes) +{ + uint32_t page_count = bytes/FLASH_PAGE_SIZE; + if ( bytes%FLASH_PAGE_SIZE ) page_count++; + + for(uint32_t i=0; i +#include + +#include "nrf_nvmc.h" + +#ifdef __cplusplus + extern "C" { +#endif + +//void flash_erase(uint32_t page_addr); +void flash_write (uint32_t dst, void const *src, int len); +void flash_flush(void); + +#ifdef __cplusplus + } +#endif + +#endif /* FLASH_NRF5X_H_ */ diff --git a/src/pstorage_platform.h b/src/pstorage_platform.h index ed56e92..a3ac5c6 100644 --- a/src/pstorage_platform.h +++ b/src/pstorage_platform.h @@ -21,7 +21,7 @@ #include #include "nrf.h" -#include "flash.h" +#include "flash_nrf5x.h" static __INLINE uint16_t pstorage_flash_page_size() { diff --git a/src/segger/Adafruit_nRF52_Bootloader.emProject b/src/segger/Adafruit_nRF52_Bootloader.emProject index 20da0c0..8413a67 100644 --- a/src/segger/Adafruit_nRF52_Bootloader.emProject +++ b/src/segger/Adafruit_nRF52_Bootloader.emProject @@ -95,8 +95,9 @@ - + + #include "boards.h"