supporting feather52832

This commit is contained in:
hathach 2018-08-06 22:02:29 +07:00
parent 64d39e3672
commit 907272b68f
4 changed files with 85 additions and 44 deletions

View File

@ -37,6 +37,7 @@
#define CODE_REGION_1_START SD_SIZE_GET(MBR_SIZE) /**< This field should correspond to the size of Code Region 0, (which is identical to Start of Code Region 1), found in UICR.CLEN0 register. This value is used for compile safety, as the linker will fail if application expands into bootloader. Runtime, the bootloader will use the value found in UICR.CLEN0. */
#define SOFTDEVICE_REGION_START MBR_SIZE /**< This field should correspond to start address of the bootloader, found in UICR.RESERVED, 0x10001014, register. This value is used for sanity check, so the bootloader will fail immediately if this value differs from runtime value. The value is used to determine max application size for updating. */
#define CODE_PAGE_SIZE 0x1000 /**< Size of a flash codepage. Used for size of the reserved flash space in the bootloader region. Will be runtime checked against NRF_UICR->CODEPAGESIZE to ensure the region is correct. */
#if defined(NRF52832_XXAA)
@ -45,7 +46,6 @@
#define BOOTLOADER_SETTINGS_ADDRESS 0x0007F000 /**< The field specifies the page location of the bootloader settings address. */
#define BOOTLOADER_MBR_PARAMS_PAGE_ADDRESS 0x0007E000 /**< The field specifies the page location of the mbr params page address. */
#define CODE_PAGE_SIZE 0x1000 /**< Size of a flash codepage. Used for size of the reserved flash space in the bootloader region. Will be runtime checked against NRF_UICR->CODEPAGESIZE to ensure the region is correct. */
#elif defined(NRF52840_XXAA)
@ -60,8 +60,6 @@
#define BOOTLOADER_SETTINGS_ADDRESS 0x000FF000 /**< The field specifies the page location of the bootloader settings address. */
#define BOOTLOADER_MBR_PARAMS_PAGE_ADDRESS 0x000FE000 /**< The field specifies the page location of the mbr params page address. */
#define CODE_PAGE_SIZE 0x1000 /**< Size of a flash codepage. Used for size of the reserved flash space in the bootloader region. Will be runtime checked against NRF_UICR->CODEPAGESIZE to ensure the region is correct. */
#else
#error No target defined

View File

@ -15,6 +15,7 @@ SDK11_PATH = ../lib/sdk11/components
SRC_PATH = .
TUSB_PATH = ../lib/tinyusb/src
NRFX_PATH = ../lib/nrfx
SD_VER1 = 6
@ -26,7 +27,7 @@ SD_VERSION_FULL = $(SD_VERSION)r$(SD_VER4)
SD_PATH = ../lib/softdevice/$(SD_NAME)/$(SD_VERSION)
SD_HEX = $(SD_PATH)/hex/$(SD_NAME)_nrf52_$(SD_VERSION)_softdevice.hex
LINKER_SCRIPT = $(SRC_PATH)/$(SD_NAME)_$(SD_VERSION).ld
LD_FILE = $(SRC_PATH)/linker/$(SD_NAME)_$(SD_VERSION).ld
OUTPUT_FILENAME = $(BOARD)_bootloader
BOOT_SD_NAME = $(OUTPUT_FILENAME)_$(SD_NAME)_$(SD_VERSION_FULL)
@ -108,10 +109,6 @@ remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-ou
C_SOURCE_FILES += $(SRC_PATH)/main.c
C_SOURCE_FILES += $(SRC_PATH)/dfu_ble_svc.c
C_SOURCE_FILES += $(SRC_PATH)/usb/tusb_descriptors.c
C_SOURCE_FILES += $(SRC_PATH)/usb/usb.c
C_SOURCE_FILES += $(SRC_PATH)/usb/msc_uf2.c
C_SOURCE_FILES += $(SRC_PATH)/usb/uf2/ghostfat.c
# SDK 11 files
C_SOURCE_FILES += $(SDK11_PATH)/libraries/bootloader_dfu/bootloader.c
@ -144,6 +141,15 @@ C_SOURCE_FILES += $(SDK_PATH)/libraries/util/nrf_assert.c
C_SOURCE_FILES += $(SDK_PATH)/drivers_nrf/common/nrf_drv_common.c
C_SOURCE_FILES += $(SDK_PATH)/drivers_nrf/hal/nrf_nvmc.c
ifneq ($(IS_NRF52840),)
C_SOURCE_FILES += $(SRC_PATH)/usb/tusb_descriptors.c
C_SOURCE_FILES += $(SRC_PATH)/usb/usb.c
C_SOURCE_FILES += $(SRC_PATH)/usb/msc_uf2.c
C_SOURCE_FILES += $(SRC_PATH)/usb/uf2/ghostfat.c
C_SOURCE_FILES += $(SDK_PATH)/toolchain/system_nrf52840.c
# Tinyusb stack
@ -157,6 +163,14 @@ C_SOURCE_FILES += $(TUSB_PATH)/class/msc/msc_device.c
C_SOURCE_FILES += $(TUSB_PATH)/class/custom/custom_device.c
C_SOURCE_FILES += $(TUSB_PATH)/tusb.c
else
C_SOURCE_FILES += $(NRFX_PATH)/mdk/system_nrf52.c
endif
#******************************************************************************
# Assembly Files
#******************************************************************************
@ -165,44 +179,48 @@ ASM_SOURCE_FILES = $(SDK_PATH)/toolchain/gcc/gcc_startup_nrf52840.S
#******************************************************************************
# INCLUDE PATH
#******************************************************************************
INC_PATHS += -I$(SRC_PATH)/
INC_PATHS += -I$(SRC_PATH)/usb
INC_PATHS += -I$(TUSB_PATH)/
IPATH += $(SRC_PATH)/
IPATH += $(SRC_PATH)/usb
IPATH += $(TUSB_PATH)/
INC_PATHS += -I$(SDK11_PATH)/libraries/bootloader_dfu/hci_transport
INC_PATHS += -I$(SDK11_PATH)/libraries/bootloader_dfu
INC_PATHS += -I$(SDK11_PATH)/drivers_nrf/pstorage
INC_PATHS += -I$(SDK11_PATH)/ble/common
INC_PATHS += -I$(SDK11_PATH)/ble/ble_services/ble_dfu
INC_PATHS += -I$(SDK11_PATH)/ble/ble_services/ble_dis
INC_PATHS += -I$(SDK11_PATH)/libraries/util
IPATH += $(NRFX_PATH)/mdk
INC_PATHS += -I$(SDK_PATH)/libraries/timer
INC_PATHS += -I$(SDK_PATH)/libraries/scheduler
INC_PATHS += -I$(SDK_PATH)/libraries/crc16
INC_PATHS += -I$(SDK_PATH)/libraries/util
INC_PATHS += -I$(SDK_PATH)/libraries/hci/config
INC_PATHS += -I$(SDK_PATH)/libraries/uart
INC_PATHS += -I$(SDK_PATH)/libraries/hci
IPATH += $(SDK11_PATH)/libraries/bootloader_dfu/hci_transport
IPATH += $(SDK11_PATH)/libraries/bootloader_dfu
IPATH += $(SDK11_PATH)/drivers_nrf/pstorage
IPATH += $(SDK11_PATH)/ble/common
IPATH += $(SDK11_PATH)/ble/ble_services/ble_dfu
IPATH += $(SDK11_PATH)/ble/ble_services/ble_dis
IPATH += $(SDK11_PATH)/libraries/util
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/common
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/hal
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/config
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/delay
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/uart
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/power
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/usbd
IPATH += $(SDK_PATH)/libraries/timer
IPATH += $(SDK_PATH)/libraries/scheduler
IPATH += $(SDK_PATH)/libraries/crc16
IPATH += $(SDK_PATH)/libraries/util
IPATH += $(SDK_PATH)/libraries/hci/config
IPATH += $(SDK_PATH)/libraries/uart
IPATH += $(SDK_PATH)/libraries/hci
INC_PATHS += -I$(SDK_PATH)/device
IPATH += $(SDK_PATH)/drivers_nrf/common
IPATH += $(SDK_PATH)/drivers_nrf/hal
IPATH += $(SDK_PATH)/drivers_nrf/config
IPATH += $(SDK_PATH)/drivers_nrf/delay
IPATH += $(SDK_PATH)/drivers_nrf/uart
IPATH += $(SDK_PATH)/drivers_nrf/power
IPATH += $(SDK_PATH)/drivers_nrf/usbd
INC_PATHS += -I$(SDK_PATH)/toolchain/cmsis/include
INC_PATHS += -I$(SDK_PATH)/toolchain/gcc
INC_PATHS += -I$(SDK_PATH)/toolchain
IPATH += $(SDK_PATH)/device
IPATH += $(SDK_PATH)/toolchain/cmsis/include
IPATH += $(SDK_PATH)/toolchain/gcc
IPATH += $(SDK_PATH)/toolchain
INC_PATHS += -I$(SD_PATH)/common
INC_PATHS += -I$(SD_PATH)/headers
INC_PATHS += -I$(SD_PATH)/headers/nrf52
IPATH += $(SD_PATH)/headers
IPATH += $(SD_PATH)/headers/nrf52
INC_PATHS = $(addprefix -I,$(IPATH))
#******************************************************************************
# Compiler Flags
@ -221,9 +239,8 @@ CFLAGS += -fno-builtin --short-enums
# Defined Symbol (MACROS)
CFLAGS += -DBOOTLOADER_VERSION=0x0$(SD_VER1)0$(SD_VER2)0$(SD_VER3)0$(SD_VER4)UL
CFLAGS += -DNRF52840_XXAA
CFLAGS += -D__HEAP_SIZE=0
CFLAGS += -DS140
CFLAGS += -DCONFIG_GPIO_AS_PINRESET
CFLAGS += -DBLE_STACK_SUPPORT_REQD
CFLAGS += -DBSP_DEFINES_ONLY
@ -235,6 +252,18 @@ CFLAGS += -DDFU_APP_DATA_RESERVED=7*4096
CFLAGS += -DBOARD_$(shell echo $(BOARD) | tr '[:lower:]' '[:upper:]')
ifneq ($(IS_NRF52840),)
CFLAGS += -DNRF52840_XXAA
CFLAGS += -DS140
else
CFLAGS += -DNRF52
CFLAGS += -DS132
endif
#******************************************************************************
# Linker Flags
@ -243,7 +272,7 @@ CFLAGS += -DBOARD_$(shell echo $(BOARD) | tr '[:lower:]' '[:upper:]')
# keep every function in separate section. This will allow linker to dump unused functions
LDFLAGS += -Xlinker -Map=$(BUILD)/$(OUTPUT_FILENAME).map
LDFLAGS += -mthumb -mabi=aapcs -L$(SRC_PATH)/ -T$(LINKER_SCRIPT)
LDFLAGS += -mthumb -mabi=aapcs -L$(SRC_PATH)/ -T$(LD_FILE)
LDFLAGS += -mcpu=cortex-m4
LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16

View File

@ -64,7 +64,7 @@
void usb_init(void);
void usb_teardown();
void usb_teardown(void);
/* tinyusb function that handles power event (detected, ready, removed)
* We must call it within SD's SOC event handler, or set it as power event handler if SD is not enabled. */
@ -76,6 +76,12 @@ enum {
NRFX_POWER_USB_EVT_REMOVED, /**< USB power removed from the connector. */
NRFX_POWER_USB_EVT_READY /**< USB power regulator ready. */
};
#else
#define usb_init()
#define usb_teardown()
#endif
@ -118,7 +124,12 @@ enum { BLE_CONN_CFG_HIGH_BANDWIDTH = 1 };
// Adafruit for factory reset
#define APPDATA_ADDR_START (BOOTLOADER_REGION_START-DFU_APP_DATA_RESERVED)
#ifdef NRF52840_XXAA
STATIC_ASSERT( APPDATA_ADDR_START == 0xED000);
#else
STATIC_ASSERT( APPDATA_ADDR_START == 0x6D000);
#endif
void adafruit_factory_reset(void);
@ -466,7 +477,8 @@ void adafruit_factory_reset(void)
//--------------------------------------------------------------------+
void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info)
{
verify_breakpoint();
volatile uint32_t* ARM_CM_DHCSR = ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */
if ( (*ARM_CM_DHCSR) & 1UL ) __asm("BKPT #0\n"); /* Only halt mcu if debugger is attached */
NVIC_SystemReset();
}
@ -513,12 +525,14 @@ uint32_t proc_soc(void)
{
pstorage_sys_event_handler(soc_evt);
#ifdef NRF52840_XXAA
/*------------- usb power event handler -------------*/
int32_t usbevt = (soc_evt == NRF_EVT_POWER_USB_DETECTED ) ? NRFX_POWER_USB_EVT_DETECTED:
(soc_evt == NRF_EVT_POWER_USB_POWER_READY) ? NRFX_POWER_USB_EVT_READY :
(soc_evt == NRF_EVT_POWER_USB_REMOVED ) ? NRFX_POWER_USB_EVT_REMOVED : -1;
if ( usbevt >= 0) tusb_hal_nrf_power_event(usbevt);
#endif
}
return err;