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

Strange behavior make vs. default hex.

Hello there,

I am encountering an issue with the zigbee light_control example on the SDK v3.1.

Before I explain the the problem, here's some detail about the system setup. I have three nrf52840 pca10056 development kits. One board acts as a coordinator with the Zigbee CLI install, another board acts as a switch, and the final board as a bulb. 

The goal is to press button 4 on the bulb to activate find-and-bind mode via the zb_bdb_finding_binding_target() function which puts it into identify mode, then press button 4 on the switch to find the bulb via the zb_bdb_finding_binding_initiator() function. Once the switch has found the bulb and has bound to it, the switch then sends out a 

ZB_ZCL_IDENTIFY_SEND_IDENTIFY_REQ() request with identify_time = 0 in order to stop the bulb from advertising further.
The issue occurs when uploading the bulb code to the development board. For the current tests, the default code that ships with the bulb example is sufficient, hence we just upload the hex file located in SDK3.1/examples/zigbee/light_control/light_bulb/hex/nrf52840_xxaa_pca10056.hex using NRF Connect. This works completely fine. The issues arise when trying to compile the code myself instead of using the default hex.
Using the original code (no modifications), I move into pca10056/blank/armgcc/ of the project folder, run "make clean", followed by "make" to compile the code, and finally "make flash" to upload the bulb code to the development board. The flashing happens without a problem, and the bulb connects to the zigbee network created by the coordinator (I have checked this using the zdo match_desc 0xfffd 0xfffd 0x0104 1 0 0 command on the CLI). However, when I press button 4 on the bulb in order to activate find-and-bind mode, the bulb immediately drops out the network (again, confirmed using the zdo match_desc 0xfffd 0xfffd 0x0104 1 0 0 command on the CLI).
I have attempted to use the light_bulb code from SDK v4.1 instead to see if it fares any better, but the 4.1 version does not even connect the coordinators network to begin with. It is possible I would need to upgrade the coordinators CLI code to v4.1 too and see if that works.
I would like some guidance on why this is occurring, or if this kind of discrepancy between making a hex vs using the factory default hex has occurred before.
Thank you very much,
Angry Oatmeal
Parents
  • Hello,

    Does the log on the light bulb say anything when you press the button and it drops out of the network.

    I am not really sure what the precompiled .hex file does (how it is set up and configured). Perhaps there is an issue with the application, and one of the APP_ERROR_CHECK(err_code) or ZB_ERROR_CHECK(zb_err_code) receives a (zb_)err_code != 0?

    If I don't modify anything, I can still use button 4 on the light bulb example (compiled with make). Did you do any changes to the project? E.g. while using another IDE, such as Segger Embedded Studio?

    BR,

    Edvin

Reply
  • Hello,

    Does the log on the light bulb say anything when you press the button and it drops out of the network.

    I am not really sure what the precompiled .hex file does (how it is set up and configured). Perhaps there is an issue with the application, and one of the APP_ERROR_CHECK(err_code) or ZB_ERROR_CHECK(zb_err_code) receives a (zb_)err_code != 0?

    If I don't modify anything, I can still use button 4 on the light bulb example (compiled with make). Did you do any changes to the project? E.g. while using another IDE, such as Segger Embedded Studio?

    BR,

    Edvin

Children
  • Unfortunately, there is no log before it drops out. It just silently leaves the network.

    It's certainly possible that there is an error thrown, but using the shipped example code which I assume is thoroughly tested, it's much more likely the issue is from me :D 

    I am using VScode to make the file, and am using the 7 2018-q2-update GNU ARM Embedded Toolchain as recommended in the Getting Started with Thread and Zigbee page in the Nordic Infocenter.

    Is it possible for you to send the pca10056 Makefile you are using so that I can compare to my own? That way I can eliminate at least one variable from this issue.

    Thank you.

  • I am not allowed to upload it, so I copied the content:

    PROJECT_NAME     := zigbee_light_bulb_pca10056
    TARGETS          := nrf52840_xxaa
    OUTPUT_DIRECTORY := _build
    
    SDK_ROOT := ../../../../../../..
    PROJ_DIR := ../../..
    
    $(OUTPUT_DIRECTORY)/nrf52840_xxaa.out: \
      LINKER_SCRIPT  := zigbee_light_bulb_gcc_nrf52.ld
    
    # Source files common to all targets
    SRC_FILES += \
      $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \
      $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \
      $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \
      $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \
      $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \
      $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \
      $(SDK_ROOT)/components/boards/boards.c \
      $(SDK_ROOT)/external/zboss/zb_error/zb_error_to_string.c \
      $(SDK_ROOT)/external/zboss/osif/zb_nrf52_common.c \
      $(SDK_ROOT)/external/zboss/osif/zb_nrf52_nrf_logger.c \
      $(SDK_ROOT)/external/zboss/osif/zb_nrf52_nvram.c \
      $(SDK_ROOT)/external/zboss/osif/zb_nrf52_sdk_config_deps.c \
      $(SDK_ROOT)/external/zboss/osif/zb_nrf52_timer.c \
      $(SDK_ROOT)/external/zboss/osif/zb_nrf52_transceiver.c \
      $(SDK_ROOT)/external/zboss/addons/zcl/zb_zcl_common_addons.c \
      $(SDK_ROOT)/external/zboss/addons/zcl/zb_zcl_ota_upgrade_addons.c \
      $(SDK_ROOT)/components/libraries/button/app_button.c \
      $(SDK_ROOT)/components/libraries/util/app_error.c \
      $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \
      $(SDK_ROOT)/components/libraries/gpiote/app_gpiote.c \
      $(SDK_ROOT)/components/libraries/pwm/app_pwm.c \
      $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \
      $(SDK_ROOT)/components/libraries/timer/app_timer2.c \
      $(SDK_ROOT)/components/libraries/util/app_util_platform.c \
      $(SDK_ROOT)/components/libraries/assert/assert.c \
      $(SDK_ROOT)/components/libraries/timer/drv_rtc.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)/external/fprintf/nrf_fprintf.c \
      $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage.c \
      $(SDK_ROOT)/components/libraries/fstorage/nrf_fstorage_nvmc.c \
      $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \
      $(SDK_ROOT)/components/libraries/pwr_mgmt/nrf_pwr_mgmt.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/sortlist/nrf_sortlist.c \
      $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \
      $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \
      $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_ppi.c \
      $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_rng.c \
      $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \
      $(SDK_ROOT)/modules/nrfx/hal/nrf_ecb.c \
      $(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd/nrf_nvic.c \
      $(SDK_ROOT)/modules/nrfx/hal/nrf_nvmc.c \
      $(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd/nrf_soc.c \
      $(SDK_ROOT)/modules/nrfx/soc/nrfx_atomic.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_ppi.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_pwm.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_rng.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_systick.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_timer.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \
      $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \
      $(SDK_ROOT)/components/libraries/bsp/bsp.c \
      $(PROJ_DIR)/main.c \
      $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \
      $(SDK_ROOT)/components/zigbee/common/zigbee_helpers.c \
      $(SDK_ROOT)/components/zigbee/common/zigbee_logger_eprxzcl.c \
      $(PROJ_DIR)/../../app_utils/ws2812/drv_ws2812.c \
    
    # Include folders common to all targets
    INC_FOLDERS += \
      $(SDK_ROOT)/external/zboss/include/zcl \
      $(SDK_ROOT)/components/libraries/gpiote \
      $(SDK_ROOT)/external/fprintf \
      $(PROJ_DIR) \
      $(SDK_ROOT)/integration/nrfx/legacy \
      $(SDK_ROOT)/components/libraries/experimental_section_vars \
      $(SDK_ROOT)/external/zboss/osif \
      $(SDK_ROOT)/components/libraries/atomic_fifo \
      ../config \
      $(SDK_ROOT)/external/nRF-IEEE-802.15.4-radio-driver/src \
      $(SDK_ROOT)/external/nRF-IEEE-802.15.4-radio-driver/src/fem/three_pin_gpio \
      $(SDK_ROOT)/components/libraries/delay \
      $(SDK_ROOT)/external/zboss/include \
      $(SDK_ROOT)/components/toolchain/cmsis/include \
      $(SDK_ROOT)/components/libraries/balloc \
      $(PROJ_DIR)/../../app_utils/ws2812 \
      $(SDK_ROOT)/components/libraries/log \
      $(SDK_ROOT)/components/libraries/memobj \
      $(SDK_ROOT)/components/libraries/atomic \
      $(SDK_ROOT)/components \
      $(SDK_ROOT)/modules/nrfx/mdk \
      $(SDK_ROOT)/components/libraries/scheduler \
      $(SDK_ROOT)/components/libraries/strerror \
      $(SDK_ROOT)/integration/nrfx \
      $(SDK_ROOT)/modules/nrfx/drivers/include \
      $(SDK_ROOT)/components/zigbee/common \
      $(SDK_ROOT)/components/libraries/pwm \
      $(SDK_ROOT)/components/libraries/ringbuf \
      $(SDK_ROOT)/external/zboss/include/ha \
      $(SDK_ROOT)/modules/nrfx \
      $(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd \
      $(SDK_ROOT)/components/libraries/log/src \
      $(SDK_ROOT)/external/zboss/addons \
      $(SDK_ROOT)/external/zboss/include/osif \
      $(SDK_ROOT)/components/libraries/sortlist \
      $(SDK_ROOT)/external/zboss/zb_error \
      $(SDK_ROOT)/modules/nrfx/hal \
      $(SDK_ROOT)/components/libraries/mutex \
      $(SDK_ROOT)/components/libraries/queue \
      $(SDK_ROOT)/components/libraries/pwr_mgmt \
      $(SDK_ROOT)/components/libraries/bsp \
      $(SDK_ROOT)/components/libraries/fstorage \
      $(SDK_ROOT)/components/boards \
      $(SDK_ROOT)/components/libraries/timer \
      $(SDK_ROOT)/components/libraries/button \
      $(SDK_ROOT)/external/nRF-IEEE-802.15.4-radio-driver/src/fem \
      $(SDK_ROOT)/components/libraries/util \
    
    # Libraries common to all targets
    LIB_FILES += \
      $(SDK_ROOT)/external/zboss/lib/gcc/libzboss.a \
      $(SDK_ROOT)/external/zboss/lib/gcc/nrf52840/nrf_radio_driver.a \
    
    # Optimization flags
    OPT = -Os -ggdb3
    # Uncomment the line below to enable link time optimization
    #OPT += -flto
    
    # C flags common to all targets
    CFLAGS += $(OPT)
    CFLAGS += -DAPP_TIMER_V2
    CFLAGS += -DAPP_TIMER_V2_RTC1_ENABLED
    CFLAGS += -DBOARD_PCA10056
    CFLAGS += -DCONFIG_GPIO_AS_PINRESET
    CFLAGS += -DENABLE_FEM
    CFLAGS += -DFLOAT_ABI_HARD
    CFLAGS += -DNRF52840_XXAA
    CFLAGS += -DZB_TRACE_LEVEL=0
    CFLAGS += -DZB_TRACE_MASK=0
    CFLAGS += -mcpu=cortex-m4
    CFLAGS += -mthumb -mabi=aapcs
    CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
    # 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 -Wno-packed-bitfield-compat
    
    # C++ flags common to all targets
    CXXFLAGS += $(OPT)
    # Assembler flags common to all targets
    ASMFLAGS += -ggdb3
    ASMFLAGS += -mcpu=cortex-m4
    ASMFLAGS += -mthumb -mabi=aapcs
    ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
    ASMFLAGS += -DAPP_TIMER_V2
    ASMFLAGS += -DAPP_TIMER_V2_RTC1_ENABLED
    ASMFLAGS += -DBOARD_PCA10056
    ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET
    ASMFLAGS += -DENABLE_FEM
    ASMFLAGS += -DFLOAT_ABI_HARD
    ASMFLAGS += -DNRF52840_XXAA
    
    # Linker flags
    LDFLAGS += $(OPT)
    LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT)
    LDFLAGS += -mcpu=cortex-m4
    LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
    # let linker dump unused sections
    LDFLAGS += -Wl,--gc-sections
    # use newlib in nano version
    LDFLAGS += --specs=nano.specs
    
    nrf52840_xxaa: CFLAGS += -D__HEAP_SIZE=8192
    nrf52840_xxaa: CFLAGS += -D__STACK_SIZE=8192
    nrf52840_xxaa: ASMFLAGS += -D__HEAP_SIZE=8192
    nrf52840_xxaa: ASMFLAGS += -D__STACK_SIZE=8192
    
    # 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 -lstdc++
    
    
    .PHONY: default help
    
    # Default target - first one defined
    default: nrf52840_xxaa
    
    # Print all targets that can be built
    help:
    	@echo following targets are available:
    	@echo		nrf52840_xxaa
    	@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 erase
    
    # Flash the program
    flash: default
    	@echo Flashing: $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex
    	nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52840_xxaa.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)
    

    I don't think I did any changes to it. If so, I removed the line containing the -Werror (I do that sometimes to check things quickly with out caring about compiler warnings, although this is bad practice). 

  • Hello Edvin,

    The issue is resolved. The problem was coming from the fact that the coordinator was running SDK version 4.1 which was incompatible with the older board version (0.9.3), causing unpredictable behavior.

    I have since upgrade all boards to 2.0.1 and am using SDK 4.1 on all of them. This has resolved the issue.

    Thank you,
    Angry Oatmeal

Related