This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

PCA10040e and s113 bootloader

Hello I am trying to add OTA update functionality to my device which is running the nrf52810 micro with the s113 softdevice. Currently I am trying to convert the PCA10040e/s112 bootloader example to the s113 softdevice however I am running into the device being completely unresponsive after flashing it. Note: I am just flashing the bootloader hex and the softdevice hex.

I changed all the headers in the armgcc/makefile and tried different combinations of RAM/FLASH placement based on the other boot loader examples however I wasn't able to get the boot loader to successfully start advertising. I suspect the culprit is the flash/ram placements in the .ld file however I don't know where to find the correct values to place! If anyone can tell me what I should be doing to get this working, I would appreciate it!

Here is my .ld file,(I cant seem to upload the makefile, this editor isn't accepting it for some reason).

secure_bootloader_gcc_nrf52.ld

Parents
  • So i had to convert the makefile to a txt to post it, so here it is  

    PROJECT_NAME     := secure_bootloader_ble_s113_pca10040e
    TARGETS          := nrf52810_xxaa_s113
    OUTPUT_DIRECTORY := _build
    
    SDK_ROOT := ../../../../..
    PROJ_DIR := ../..
    
    $(OUTPUT_DIRECTORY)/nrf52810_xxaa_s113.out: \
      LINKER_SCRIPT  := secure_bootloader_gcc_nrf52.ld
    
    # Source files common to all targets
    SRC_FILES += \
      $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52810.S \
      $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52810.c \
      $(SDK_ROOT)/components/libraries/util/app_error_weak.c \
      $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \
      $(SDK_ROOT)/components/libraries/util/app_util_platform.c \
      $(SDK_ROOT)/components/libraries/crc32/crc32.c \
      $(SDK_ROOT)/components/libraries/mem_manager/mem_manager.c \
      $(SDK_ROOT)/components/libraries/util/nrf_assert.c \
      $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \
      $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \
      $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage_nvmc.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage_sd.c \
      $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \
      $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \
      $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \
      $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \
      $(SDK_ROOT)/components/libraries/sha256/sha256.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc/micro_ecc_backend_ecc.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc/micro_ecc_backend_ecdh.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc/micro_ecc_backend_ecdsa.c \
      $(SDK_ROOT)/components/boards/boards.c \
      $(SDK_ROOT)/modules/nrfx/hal/nrf_nvmc.c \
      $(SDK_ROOT)/modules/nrfx/soc/nrfx_atomic.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_ecc.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_ecdsa.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_hash.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_init.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_shared.c \
      $(PROJ_DIR)/../dfu_public_key.c \
      $(PROJ_DIR)/main.c \
      $(SDK_ROOT)/components/ble/common/ble_srv_common.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_app_start.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_app_start_final.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_dfu_timers.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_fw_activation.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_info.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_wdt.c \
      $(SDK_ROOT)/external/nano-pb/pb_common.c \
      $(SDK_ROOT)/external/nano-pb/pb_decode.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/nrf_sw/nrf_sw_backend_hash.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/dfu-cc.pb.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu.c \
      $(SDK_ROOT)/components/libraries/bootloader/ble_dfu/nrf_dfu_ble.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_flash.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_handling_error.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_mbr.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_req_handler.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_settings.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_settings_svci.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_transport.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_utils.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_validation.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_ver_validation.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_svci.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_svci_handler.c \
      $(SDK_ROOT)/components/libraries/svc/nrf_svc_handler.c \
      $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \
      $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \
      $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_chacha_poly_aead.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecc.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecdh.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecdsa.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_eddsa.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_hash.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_hmac.c \
    
    # Include folders common to all targets
    INC_FOLDERS += \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc \
      $(SDK_ROOT)/components/libraries/memobj \
      $(SDK_ROOT)/components/libraries/sha256 \
      $(SDK_ROOT)/components/libraries/crc32 \
      $(SDK_ROOT)/components/libraries/experimental_section_vars \
      $(SDK_ROOT)/components/libraries/mem_manager \
      $(SDK_ROOT)/components/libraries/fstorage \
      $(SDK_ROOT)/components/libraries/util \
      $(SDK_ROOT)/modules/nrfx \
      $(SDK_ROOT)/external/nrf_oberon/include \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon \
      $(SDK_ROOT)/components/libraries/crypto/backend/cifra \
      $(SDK_ROOT)/components/libraries/atomic \
      $(SDK_ROOT)/integration/nrfx \
      $(SDK_ROOT)/components/libraries/crypto/backend/cc310_bl \
      $(SDK_ROOT)/components/libraries/log/src \
      $(SDK_ROOT)/components/libraries/bootloader/dfu \
      $(SDK_ROOT)/components/ble/common \
      $(SDK_ROOT)/components/libraries/delay \
      $(SDK_ROOT)/components/softdevice/s113/headers/nrf52 \
      $(SDK_ROOT)/components/libraries/svc \
      $(SDK_ROOT)/components/libraries/stack_info \
      $(SDK_ROOT)/components/libraries/crypto/backend/nrf_hw \
      $(SDK_ROOT)/components/libraries/log \
      $(SDK_ROOT)/external/nrf_oberon \
      $(SDK_ROOT)/components/libraries/strerror \
      $(SDK_ROOT)/components/libraries/crypto/backend/mbedtls \
      $(SDK_ROOT)/components/softdevice/s113/headers \
      $(SDK_ROOT)/components/boards \
      $(SDK_ROOT)/components/libraries/crypto/backend/cc310 \
      $(SDK_ROOT)/components/libraries/bootloader \
      $(SDK_ROOT)/components/libraries/crypto \
      ../config \
      $(SDK_ROOT)/components/libraries/crypto/backend/optiga \
      $(SDK_ROOT)/components/libraries/scheduler \
      $(SDK_ROOT)/modules/nrfx/hal \
      $(SDK_ROOT)/components/toolchain/cmsis/include \
      $(SDK_ROOT)/components/libraries/balloc \
      $(SDK_ROOT)/components/libraries/atomic_fifo \
      $(SDK_ROOT)/external/micro-ecc/micro-ecc \
      $(PROJ_DIR) \
      $(SDK_ROOT)/components/libraries/crypto/backend/nrf_sw \
      $(SDK_ROOT)/modules/nrfx/mdk \
      $(SDK_ROOT)/components/libraries/bootloader/ble_dfu \
      $(SDK_ROOT)/components/softdevice/common \
      $(SDK_ROOT)/external/nano-pb \
      $(SDK_ROOT)/components/libraries/queue \
      $(SDK_ROOT)/components/libraries/ringbuf \
    
    # Libraries common to all targets
    LIB_FILES += \
      $(SDK_ROOT)/external/nrf_oberon/lib/cortex-m4/soft-float/liboberon_3.0.1.a \
      $(SDK_ROOT)/external/micro-ecc/nrf52nf_armgcc/armgcc/micro_ecc_lib_nrf52.a \
    
    # Optimization flags
    OPT = -Os -g3
    # Uncomment the line below to enable link time optimization
    #OPT += -flto
    
    # C flags common to all targets
    CFLAGS += $(OPT)
    CFLAGS += -DBLE_STACK_SUPPORT_REQD
    CFLAGS += -DBOARD_PCA10040
    CFLAGS += -DCONFIG_GPIO_AS_PINRESET
    CFLAGS += -DDEVELOP_IN_NRF52832
    CFLAGS += -DFLOAT_ABI_SOFT
    CFLAGS += -DNRF52810_XXAA
    CFLAGS += -DNRF52_PAN_74
    CFLAGS += -DNRFX_COREDEP_DELAY_US_LOOP_CYCLES=3
    CFLAGS += -DNRF_DFU_SETTINGS_VERSION=2
    CFLAGS += -DNRF_DFU_SVCI_ENABLED
    CFLAGS += -DNRF_SD_BLE_API_VERSION=7
    CFLAGS += -DS113
    CFLAGS += -DSOFTDEVICE_PRESENT
    CFLAGS += -DSVC_INTERFACE_CALL_AS_NORMAL_FUNCTION
    CFLAGS += -DuECC_ENABLE_VLI_API=0
    CFLAGS += -DuECC_OPTIMIZATION_LEVEL=3
    CFLAGS += -DuECC_SQUARE_FUNC=0
    CFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0
    CFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1
    CFLAGS += -mcpu=cortex-m4
    CFLAGS += -mthumb -mabi=aapcs
    CFLAGS += -Wall -Werror
    CFLAGS += -mfloat-abi=soft
    # keep every function in a separate section, this allows linker to discard unused ones
    CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
    CFLAGS += -fno-builtin -fshort-enums
    
    # C++ flags common to all targets
    CXXFLAGS += $(OPT)
    # Assembler flags common to all targets
    ASMFLAGS += -g3
    ASMFLAGS += -mcpu=cortex-m4
    ASMFLAGS += -mthumb -mabi=aapcs
    ASMFLAGS += -mfloat-abi=soft
    ASMFLAGS += -DBLE_STACK_SUPPORT_REQD
    ASMFLAGS += -DBOARD_PCA10040
    ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET
    ASMFLAGS += -DDEVELOP_IN_NRF52832
    ASMFLAGS += -DFLOAT_ABI_SOFT
    ASMFLAGS += -DNRF52810_XXAA
    ASMFLAGS += -DNRF52_PAN_74
    ASMFLAGS += -DNRFX_COREDEP_DELAY_US_LOOP_CYCLES=3
    ASMFLAGS += -DNRF_DFU_SETTINGS_VERSION=2
    ASMFLAGS += -DNRF_DFU_SVCI_ENABLED
    ASMFLAGS += -DNRF_SD_BLE_API_VERSION=7
    ASMFLAGS += -DS113
    ASMFLAGS += -DSOFTDEVICE_PRESENT
    ASMFLAGS += -DSVC_INTERFACE_CALL_AS_NORMAL_FUNCTION
    ASMFLAGS += -DuECC_ENABLE_VLI_API=0
    ASMFLAGS += -DuECC_OPTIMIZATION_LEVEL=3
    ASMFLAGS += -DuECC_SQUARE_FUNC=0
    ASMFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0
    ASMFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1
    
    # Linker flags
    LDFLAGS += $(OPT)
    LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT)
    LDFLAGS += -mcpu=cortex-m4
    # let linker dump unused sections
    LDFLAGS += -Wl,--gc-sections
    # use newlib in nano version
    LDFLAGS += --specs=nano.specs
    
    nrf52810_xxaa_s113: CFLAGS += -D__HEAP_SIZE=0
    nrf52810_xxaa_s113: CFLAGS += -D__STACK_SIZE=2048
    nrf52810_xxaa_s113: ASMFLAGS += -D__HEAP_SIZE=0
    nrf52810_xxaa_s113: ASMFLAGS += -D__STACK_SIZE=2048
    
    # Add standard libraries at the very end of the linker input, after all objects
    # that may need symbols provided by these libraries.
    LIB_FILES += -lc -lnosys -lm
    
    
    .PHONY: default help
    
    # Default target - first one defined
    default: nrf52810_xxaa_s113
    
    # Print all targets that can be built
    help:
    	@echo following targets are available:
    	@echo		nrf52810_xxaa_s113
    	@echo		flash_softdevice
    	@echo		sdk_config - starting external tool for editing sdk_config.h
    	@echo		flash      - flashing binary
    
    TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc
    
    
    include $(TEMPLATE_PATH)/Makefile.common
    
    $(foreach target, $(TARGETS), $(call define_target, $(target)))
    
    .PHONY: flash flash_softdevice erase
    
    # Flash the program
    flash: default
    	@echo Flashing: $(OUTPUT_DIRECTORY)/nrf52810_xxaa_s113.hex
    	nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52810_xxaa_s113.hex --sectorerase
    	nrfjprog -f nrf52 --reset
    
    # Flash softdevice
    flash_softdevice:
    	@echo Flashing: s113_nrf52_7.0.1_softdevice.hex
    	nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s113/hex/s113_nrf52_7.0.1_softdevice.hex --sectorerase
    	nrfjprog -f nrf52 --reset
    
    erase:
    	nrfjprog -f nrf52 --eraseall
    
    SDK_CONFIG_FILE := ../config/sdk_config.h
    CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar
    sdk_config:
    	java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE)
    

Reply
  • So i had to convert the makefile to a txt to post it, so here it is  

    PROJECT_NAME     := secure_bootloader_ble_s113_pca10040e
    TARGETS          := nrf52810_xxaa_s113
    OUTPUT_DIRECTORY := _build
    
    SDK_ROOT := ../../../../..
    PROJ_DIR := ../..
    
    $(OUTPUT_DIRECTORY)/nrf52810_xxaa_s113.out: \
      LINKER_SCRIPT  := secure_bootloader_gcc_nrf52.ld
    
    # Source files common to all targets
    SRC_FILES += \
      $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52810.S \
      $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52810.c \
      $(SDK_ROOT)/components/libraries/util/app_error_weak.c \
      $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \
      $(SDK_ROOT)/components/libraries/util/app_util_platform.c \
      $(SDK_ROOT)/components/libraries/crc32/crc32.c \
      $(SDK_ROOT)/components/libraries/mem_manager/mem_manager.c \
      $(SDK_ROOT)/components/libraries/util/nrf_assert.c \
      $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \
      $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \
      $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage_nvmc.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage_sd.c \
      $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \
      $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \
      $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \
      $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \
      $(SDK_ROOT)/components/libraries/sha256/sha256.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc/micro_ecc_backend_ecc.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc/micro_ecc_backend_ecdh.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc/micro_ecc_backend_ecdsa.c \
      $(SDK_ROOT)/components/boards/boards.c \
      $(SDK_ROOT)/modules/nrfx/hal/nrf_nvmc.c \
      $(SDK_ROOT)/modules/nrfx/soc/nrfx_atomic.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_ecc.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_ecdsa.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_hash.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_init.c \
      $(SDK_ROOT)/components/libraries/crypto/nrf_crypto_shared.c \
      $(PROJ_DIR)/../dfu_public_key.c \
      $(PROJ_DIR)/main.c \
      $(SDK_ROOT)/components/ble/common/ble_srv_common.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_app_start.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_app_start_final.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_dfu_timers.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_fw_activation.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_info.c \
      $(SDK_ROOT)/components/libraries/bootloader/nrf_bootloader_wdt.c \
      $(SDK_ROOT)/external/nano-pb/pb_common.c \
      $(SDK_ROOT)/external/nano-pb/pb_decode.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/nrf_sw/nrf_sw_backend_hash.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/dfu-cc.pb.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu.c \
      $(SDK_ROOT)/components/libraries/bootloader/ble_dfu/nrf_dfu_ble.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_flash.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_handling_error.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_mbr.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_req_handler.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_settings.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_settings_svci.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_transport.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_utils.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_validation.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_ver_validation.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_svci.c \
      $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_svci_handler.c \
      $(SDK_ROOT)/components/libraries/svc/nrf_svc_handler.c \
      $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \
      $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \
      $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_chacha_poly_aead.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecc.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecdh.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_ecdsa.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_eddsa.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_hash.c \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon/oberon_backend_hmac.c \
    
    # Include folders common to all targets
    INC_FOLDERS += \
      $(SDK_ROOT)/components/libraries/crypto/backend/micro_ecc \
      $(SDK_ROOT)/components/libraries/memobj \
      $(SDK_ROOT)/components/libraries/sha256 \
      $(SDK_ROOT)/components/libraries/crc32 \
      $(SDK_ROOT)/components/libraries/experimental_section_vars \
      $(SDK_ROOT)/components/libraries/mem_manager \
      $(SDK_ROOT)/components/libraries/fstorage \
      $(SDK_ROOT)/components/libraries/util \
      $(SDK_ROOT)/modules/nrfx \
      $(SDK_ROOT)/external/nrf_oberon/include \
      $(SDK_ROOT)/components/libraries/crypto/backend/oberon \
      $(SDK_ROOT)/components/libraries/crypto/backend/cifra \
      $(SDK_ROOT)/components/libraries/atomic \
      $(SDK_ROOT)/integration/nrfx \
      $(SDK_ROOT)/components/libraries/crypto/backend/cc310_bl \
      $(SDK_ROOT)/components/libraries/log/src \
      $(SDK_ROOT)/components/libraries/bootloader/dfu \
      $(SDK_ROOT)/components/ble/common \
      $(SDK_ROOT)/components/libraries/delay \
      $(SDK_ROOT)/components/softdevice/s113/headers/nrf52 \
      $(SDK_ROOT)/components/libraries/svc \
      $(SDK_ROOT)/components/libraries/stack_info \
      $(SDK_ROOT)/components/libraries/crypto/backend/nrf_hw \
      $(SDK_ROOT)/components/libraries/log \
      $(SDK_ROOT)/external/nrf_oberon \
      $(SDK_ROOT)/components/libraries/strerror \
      $(SDK_ROOT)/components/libraries/crypto/backend/mbedtls \
      $(SDK_ROOT)/components/softdevice/s113/headers \
      $(SDK_ROOT)/components/boards \
      $(SDK_ROOT)/components/libraries/crypto/backend/cc310 \
      $(SDK_ROOT)/components/libraries/bootloader \
      $(SDK_ROOT)/components/libraries/crypto \
      ../config \
      $(SDK_ROOT)/components/libraries/crypto/backend/optiga \
      $(SDK_ROOT)/components/libraries/scheduler \
      $(SDK_ROOT)/modules/nrfx/hal \
      $(SDK_ROOT)/components/toolchain/cmsis/include \
      $(SDK_ROOT)/components/libraries/balloc \
      $(SDK_ROOT)/components/libraries/atomic_fifo \
      $(SDK_ROOT)/external/micro-ecc/micro-ecc \
      $(PROJ_DIR) \
      $(SDK_ROOT)/components/libraries/crypto/backend/nrf_sw \
      $(SDK_ROOT)/modules/nrfx/mdk \
      $(SDK_ROOT)/components/libraries/bootloader/ble_dfu \
      $(SDK_ROOT)/components/softdevice/common \
      $(SDK_ROOT)/external/nano-pb \
      $(SDK_ROOT)/components/libraries/queue \
      $(SDK_ROOT)/components/libraries/ringbuf \
    
    # Libraries common to all targets
    LIB_FILES += \
      $(SDK_ROOT)/external/nrf_oberon/lib/cortex-m4/soft-float/liboberon_3.0.1.a \
      $(SDK_ROOT)/external/micro-ecc/nrf52nf_armgcc/armgcc/micro_ecc_lib_nrf52.a \
    
    # Optimization flags
    OPT = -Os -g3
    # Uncomment the line below to enable link time optimization
    #OPT += -flto
    
    # C flags common to all targets
    CFLAGS += $(OPT)
    CFLAGS += -DBLE_STACK_SUPPORT_REQD
    CFLAGS += -DBOARD_PCA10040
    CFLAGS += -DCONFIG_GPIO_AS_PINRESET
    CFLAGS += -DDEVELOP_IN_NRF52832
    CFLAGS += -DFLOAT_ABI_SOFT
    CFLAGS += -DNRF52810_XXAA
    CFLAGS += -DNRF52_PAN_74
    CFLAGS += -DNRFX_COREDEP_DELAY_US_LOOP_CYCLES=3
    CFLAGS += -DNRF_DFU_SETTINGS_VERSION=2
    CFLAGS += -DNRF_DFU_SVCI_ENABLED
    CFLAGS += -DNRF_SD_BLE_API_VERSION=7
    CFLAGS += -DS113
    CFLAGS += -DSOFTDEVICE_PRESENT
    CFLAGS += -DSVC_INTERFACE_CALL_AS_NORMAL_FUNCTION
    CFLAGS += -DuECC_ENABLE_VLI_API=0
    CFLAGS += -DuECC_OPTIMIZATION_LEVEL=3
    CFLAGS += -DuECC_SQUARE_FUNC=0
    CFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0
    CFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1
    CFLAGS += -mcpu=cortex-m4
    CFLAGS += -mthumb -mabi=aapcs
    CFLAGS += -Wall -Werror
    CFLAGS += -mfloat-abi=soft
    # keep every function in a separate section, this allows linker to discard unused ones
    CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
    CFLAGS += -fno-builtin -fshort-enums
    
    # C++ flags common to all targets
    CXXFLAGS += $(OPT)
    # Assembler flags common to all targets
    ASMFLAGS += -g3
    ASMFLAGS += -mcpu=cortex-m4
    ASMFLAGS += -mthumb -mabi=aapcs
    ASMFLAGS += -mfloat-abi=soft
    ASMFLAGS += -DBLE_STACK_SUPPORT_REQD
    ASMFLAGS += -DBOARD_PCA10040
    ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET
    ASMFLAGS += -DDEVELOP_IN_NRF52832
    ASMFLAGS += -DFLOAT_ABI_SOFT
    ASMFLAGS += -DNRF52810_XXAA
    ASMFLAGS += -DNRF52_PAN_74
    ASMFLAGS += -DNRFX_COREDEP_DELAY_US_LOOP_CYCLES=3
    ASMFLAGS += -DNRF_DFU_SETTINGS_VERSION=2
    ASMFLAGS += -DNRF_DFU_SVCI_ENABLED
    ASMFLAGS += -DNRF_SD_BLE_API_VERSION=7
    ASMFLAGS += -DS113
    ASMFLAGS += -DSOFTDEVICE_PRESENT
    ASMFLAGS += -DSVC_INTERFACE_CALL_AS_NORMAL_FUNCTION
    ASMFLAGS += -DuECC_ENABLE_VLI_API=0
    ASMFLAGS += -DuECC_OPTIMIZATION_LEVEL=3
    ASMFLAGS += -DuECC_SQUARE_FUNC=0
    ASMFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0
    ASMFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1
    
    # Linker flags
    LDFLAGS += $(OPT)
    LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT)
    LDFLAGS += -mcpu=cortex-m4
    # let linker dump unused sections
    LDFLAGS += -Wl,--gc-sections
    # use newlib in nano version
    LDFLAGS += --specs=nano.specs
    
    nrf52810_xxaa_s113: CFLAGS += -D__HEAP_SIZE=0
    nrf52810_xxaa_s113: CFLAGS += -D__STACK_SIZE=2048
    nrf52810_xxaa_s113: ASMFLAGS += -D__HEAP_SIZE=0
    nrf52810_xxaa_s113: ASMFLAGS += -D__STACK_SIZE=2048
    
    # Add standard libraries at the very end of the linker input, after all objects
    # that may need symbols provided by these libraries.
    LIB_FILES += -lc -lnosys -lm
    
    
    .PHONY: default help
    
    # Default target - first one defined
    default: nrf52810_xxaa_s113
    
    # Print all targets that can be built
    help:
    	@echo following targets are available:
    	@echo		nrf52810_xxaa_s113
    	@echo		flash_softdevice
    	@echo		sdk_config - starting external tool for editing sdk_config.h
    	@echo		flash      - flashing binary
    
    TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc
    
    
    include $(TEMPLATE_PATH)/Makefile.common
    
    $(foreach target, $(TARGETS), $(call define_target, $(target)))
    
    .PHONY: flash flash_softdevice erase
    
    # Flash the program
    flash: default
    	@echo Flashing: $(OUTPUT_DIRECTORY)/nrf52810_xxaa_s113.hex
    	nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52810_xxaa_s113.hex --sectorerase
    	nrfjprog -f nrf52 --reset
    
    # Flash softdevice
    flash_softdevice:
    	@echo Flashing: s113_nrf52_7.0.1_softdevice.hex
    	nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s113/hex/s113_nrf52_7.0.1_softdevice.hex --sectorerase
    	nrfjprog -f nrf52 --reset
    
    erase:
    	nrfjprog -f nrf52 --eraseall
    
    SDK_CONFIG_FILE := ../config/sdk_config.h
    CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar
    sdk_config:
    	java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE)
    

Children
No Data
Related