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

Newbie having trouble getting started...

Hello, I just received my BMD-200 eval board today and cannot get any of the examples working. I started out trying to get blinky to work using GCC and the make files provided. I am able to successfully build the projects. The _build directory has the .hex files. It is not clear what the next step should be here. make soft_device seems to just load the Soft Device so how does the example get loaded in this paradigm? What dictates where in memory it gets loaded in the GCC paradigm? Is this important?

After many attempts, I gave up on the above method and tried using nrfGo Studio. I loaded the 110 Soft Device (I am on the latest SDK version 8), and then loaded several peripheral examples. None of them run.

I gave up on this method and downloaded the Keil tools. I followed the instructions in the manual by first using nrfGo Studio to load the 110 Soft Device, and then moved over to the Keil tool. Made all of the configuration modifcations, downloaded custom_board.h, and the project builds successfully. It even seems to download to Flash successfully but it won't run. blinky does not blink and none of the ble peripheral examples advertise, so I know its not working.

I'm not sure what to try next. Can you please let me know what I am doing wrong based on the above. I don't care which method I use; I just need one that works.

Any help would be greatly appreciated.

Thanks.

Ernest

Parents
  • I suggest that you check the chip revision as well. Chip rev 1 may not work with SDK8.

  • Here is makefile.common:...it seems to be failing here but the error message doesn't tell me where it broke. Can you tell what the problem is? I'm unfortunatley not a makefile expert, but once I get this example running I will be out of your hair..:-)

    DEVICE := NRF51
    DEVICESERIES := nrf51
    
    SDK_INCLUDE_PATH = $(SDK_PATH)/Include/
    SDK_SOURCE_PATH = $(SDK_PATH)/Source/
    TEMPLATE_PATH += $(SDK_SOURCE_PATH)/templates/gcc/
    OUTPUT_BINARY_DIRECTORY := _build
    
    ifeq ($(OS),Windows_NT)
    include $(TEMPLATE_PATH)Makefile.windows
    else
    include $(TEMPLATE_PATH)Makefile.posix
    endif
    
    ifeq ($(LINKER_SCRIPT),)
    	ifeq ($(USE_SOFTDEVICE), S110)
    		LINKER_SCRIPT = gcc_$(DEVICESERIES)_s110_$(DEVICE_VARIANT).ld
    		OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s110_$(DEVICE_VARIANT)
    	else
    		ifeq ($(USE_SOFTDEVICE), S210)
    			LINKER_SCRIPT = gcc_$(DEVICESERIES)_s210_$(DEVICE_VARIANT).ld
    			OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s210_$(DEVICE_VARIANT)
    		else
    			LINKER_SCRIPT = gcc_$(DEVICESERIES)_blank_$(DEVICE_VARIANT).ld
    			OUTPUT_FILENAME := $(OUTPUT_FILENAME)_$(DEVICE_VARIANT)
    		endif
    	endif
    else
    # Use externally defined settings
    endif
    
    CPU := cortex-m0
    
    # Toolchain commands
    CC       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc"
    AS       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as"
    AR       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r
    LD       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld"
    NM       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm"
    OBJDUMP  		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump"
    OBJCOPY  		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy"
    
    MK 				:= mkdir
    RM 				:= rm -rf
    
    OBJECT_DIRECTORY := _build
    LISTING_DIRECTORY := _build
    
    C_SOURCE_FILES += system_$(DEVICESERIES).c
    ASSEMBLER_SOURCE_FILES += gcc_startup_$(DEVICESERIES).s
    
    # Linker flags
    #LDFLAGS += -L"$(GNU_INSTALL_ROOT)/arm-none-eabi/lib/armv6-m"
    #LDFLAGS += -L"$(GNU_INSTALL_ROOT)/lib/gcc/arm-none-eabi/$(GNU_VERSION)/armv6-m"
    LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map
    LDFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT) 
    
    # Compiler flags
    CFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -D$(DEVICE) -D$(BOARD) -D$(TARGET_CHIP) --std=gnu99
    CFLAGS += -Wall -Werror
    CFLAGS += -mfloat-abi=soft
    
    # Assembler flags
    ASMFLAGS += -x assembler-with-cpp
     
    INCLUDEPATHS += -I"../"
    INCLUDEPATHS += -I"$(SDK_PATH)Include"
    INCLUDEPATHS += -I"$(SDK_PATH)Include/gcc"
    INCLUDEPATHS += -I"$(SDK_PATH)Include/ext_sensors"
    
    # Sorting removes duplicates
    BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
    
    ####################################################################
    # Rules                                                            #
    ####################################################################
    
    C_SOURCE_FILENAMES = $(notdir $(C_SOURCE_FILES) )
    ASSEMBLER_SOURCE_FILENAMES = $(notdir $(ASSEMBLER_SOURCE_FILES) )
    
    # Make a list of source paths
    C_SOURCE_PATHS += ../ $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/)  $(wildcard $(SDK_SOURCE_PATH)ext_sensors/*/) $(wildcard $(SDK_SOURCE_PATH)ble/*/)
    ASSEMBLER_SOURCE_PATHS = ../ $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/)
    
    C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILENAMES:.c=.o) )
    ASSEMBLER_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASSEMBLER_SOURCE_FILENAMES:.s=.o) )
    
    # Set source lookup paths
    vpath %.c $(C_SOURCE_PATHS)
    vpath %.s $(ASSEMBLER_SOURCE_PATHS)
    
    # Include automatically previously generated dependencies
    -include $(addprefix $(OBJECT_DIRECTORY)/, $(COBJS:.o=.d))
    
    ### Targets
    debug:    CFLAGS += -DDEBUG -g3 -O0
    debug:    ASMFLAGS += -DDEBUG -g3 -O0
    debug:    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    .PHONY: release
    release: clean
    release:  CFLAGS += -DNDEBUG -O3
    release:  ASMFLAGS += -DNDEBUG -O3
    release:  $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    echostuff:
    	@echo C_OBJECTS: [$(C_OBJECTS)]
    	@echo C_SOURCE_FILES: [$(C_SOURCE_FILES)]
    	@echo C_SOURCE_PATHS: [$(C_SOURCE_PATHS)]
    
    ## Create build directories
    $(BUILD_DIRECTORIES):
    	$(MK) $@
    
    ## Create objects from C source files
    $(OBJECT_DIRECTORY)/%.o: %.c
    # Build header dependencies
    	$(CC) $(CFLAGS) $(INCLUDEPATHS) -M $< -MF "$(@:.o=.d)" -MT $@
    # Do the actual compilation
    	$(CC) $(CFLAGS) $(INCLUDEPATHS) -c -o $@ $<
    
    ## Assemble .s files
    $(OBJECT_DIRECTORY)/%.o: %.s
    	$(CC) $(ASMFLAGS) $(INCLUDEPATHS) -c -o $@ $<
    
    ## Link C and assembler objects to an .out file
    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES)
    	$(CC) $(LDFLAGS) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
    
    ## Create binary .bin file from the .out file
    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
    	$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
    
    ## Create binary .hex file from the .out file
    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
    	$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    ## Default build target
    .PHONY: all
    all: clean release
    
    clean:
    	-del $(OUTPUT_BINARY_DIRECTORY)
    
    ## Program device
    .PHONY: flash
    flash: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    	nrfjprog --reset --program $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    .PHONY: reset
    reset:
    	nrfjprog --reset
    
    .PHONY: erase
    erase:
    	nrfjprog --erase
    
Reply
  • Here is makefile.common:...it seems to be failing here but the error message doesn't tell me where it broke. Can you tell what the problem is? I'm unfortunatley not a makefile expert, but once I get this example running I will be out of your hair..:-)

    DEVICE := NRF51
    DEVICESERIES := nrf51
    
    SDK_INCLUDE_PATH = $(SDK_PATH)/Include/
    SDK_SOURCE_PATH = $(SDK_PATH)/Source/
    TEMPLATE_PATH += $(SDK_SOURCE_PATH)/templates/gcc/
    OUTPUT_BINARY_DIRECTORY := _build
    
    ifeq ($(OS),Windows_NT)
    include $(TEMPLATE_PATH)Makefile.windows
    else
    include $(TEMPLATE_PATH)Makefile.posix
    endif
    
    ifeq ($(LINKER_SCRIPT),)
    	ifeq ($(USE_SOFTDEVICE), S110)
    		LINKER_SCRIPT = gcc_$(DEVICESERIES)_s110_$(DEVICE_VARIANT).ld
    		OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s110_$(DEVICE_VARIANT)
    	else
    		ifeq ($(USE_SOFTDEVICE), S210)
    			LINKER_SCRIPT = gcc_$(DEVICESERIES)_s210_$(DEVICE_VARIANT).ld
    			OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s210_$(DEVICE_VARIANT)
    		else
    			LINKER_SCRIPT = gcc_$(DEVICESERIES)_blank_$(DEVICE_VARIANT).ld
    			OUTPUT_FILENAME := $(OUTPUT_FILENAME)_$(DEVICE_VARIANT)
    		endif
    	endif
    else
    # Use externally defined settings
    endif
    
    CPU := cortex-m0
    
    # Toolchain commands
    CC       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc"
    AS       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as"
    AR       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r
    LD       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld"
    NM       		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm"
    OBJDUMP  		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump"
    OBJCOPY  		:= "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy"
    
    MK 				:= mkdir
    RM 				:= rm -rf
    
    OBJECT_DIRECTORY := _build
    LISTING_DIRECTORY := _build
    
    C_SOURCE_FILES += system_$(DEVICESERIES).c
    ASSEMBLER_SOURCE_FILES += gcc_startup_$(DEVICESERIES).s
    
    # Linker flags
    #LDFLAGS += -L"$(GNU_INSTALL_ROOT)/arm-none-eabi/lib/armv6-m"
    #LDFLAGS += -L"$(GNU_INSTALL_ROOT)/lib/gcc/arm-none-eabi/$(GNU_VERSION)/armv6-m"
    LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map
    LDFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT) 
    
    # Compiler flags
    CFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -D$(DEVICE) -D$(BOARD) -D$(TARGET_CHIP) --std=gnu99
    CFLAGS += -Wall -Werror
    CFLAGS += -mfloat-abi=soft
    
    # Assembler flags
    ASMFLAGS += -x assembler-with-cpp
     
    INCLUDEPATHS += -I"../"
    INCLUDEPATHS += -I"$(SDK_PATH)Include"
    INCLUDEPATHS += -I"$(SDK_PATH)Include/gcc"
    INCLUDEPATHS += -I"$(SDK_PATH)Include/ext_sensors"
    
    # Sorting removes duplicates
    BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
    
    ####################################################################
    # Rules                                                            #
    ####################################################################
    
    C_SOURCE_FILENAMES = $(notdir $(C_SOURCE_FILES) )
    ASSEMBLER_SOURCE_FILENAMES = $(notdir $(ASSEMBLER_SOURCE_FILES) )
    
    # Make a list of source paths
    C_SOURCE_PATHS += ../ $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/)  $(wildcard $(SDK_SOURCE_PATH)ext_sensors/*/) $(wildcard $(SDK_SOURCE_PATH)ble/*/)
    ASSEMBLER_SOURCE_PATHS = ../ $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/)
    
    C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILENAMES:.c=.o) )
    ASSEMBLER_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASSEMBLER_SOURCE_FILENAMES:.s=.o) )
    
    # Set source lookup paths
    vpath %.c $(C_SOURCE_PATHS)
    vpath %.s $(ASSEMBLER_SOURCE_PATHS)
    
    # Include automatically previously generated dependencies
    -include $(addprefix $(OBJECT_DIRECTORY)/, $(COBJS:.o=.d))
    
    ### Targets
    debug:    CFLAGS += -DDEBUG -g3 -O0
    debug:    ASMFLAGS += -DDEBUG -g3 -O0
    debug:    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    .PHONY: release
    release: clean
    release:  CFLAGS += -DNDEBUG -O3
    release:  ASMFLAGS += -DNDEBUG -O3
    release:  $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    echostuff:
    	@echo C_OBJECTS: [$(C_OBJECTS)]
    	@echo C_SOURCE_FILES: [$(C_SOURCE_FILES)]
    	@echo C_SOURCE_PATHS: [$(C_SOURCE_PATHS)]
    
    ## Create build directories
    $(BUILD_DIRECTORIES):
    	$(MK) $@
    
    ## Create objects from C source files
    $(OBJECT_DIRECTORY)/%.o: %.c
    # Build header dependencies
    	$(CC) $(CFLAGS) $(INCLUDEPATHS) -M $< -MF "$(@:.o=.d)" -MT $@
    # Do the actual compilation
    	$(CC) $(CFLAGS) $(INCLUDEPATHS) -c -o $@ $<
    
    ## Assemble .s files
    $(OBJECT_DIRECTORY)/%.o: %.s
    	$(CC) $(ASMFLAGS) $(INCLUDEPATHS) -c -o $@ $<
    
    ## Link C and assembler objects to an .out file
    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES)
    	$(CC) $(LDFLAGS) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
    
    ## Create binary .bin file from the .out file
    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
    	$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
    
    ## Create binary .hex file from the .out file
    $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
    	$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    ## Default build target
    .PHONY: all
    all: clean release
    
    clean:
    	-del $(OUTPUT_BINARY_DIRECTORY)
    
    ## Program device
    .PHONY: flash
    flash: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    	nrfjprog --reset --program $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
    
    .PHONY: reset
    reset:
    	nrfjprog --reset
    
    .PHONY: erase
    erase:
    	nrfjprog --erase
    
Children
No Data
Related