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

beaconing example for nrf52840 stopped by vector

Dear Sir,

I am using Example beaconing_nrf52840_xxAA_s140_6_1_0 in nrf5 SDK for Mesh_v3.0.0 get stopped after running for sort period. I have tried to debug but could not find any solution. I am using MINEW make MS88SF2 module. I am also attaching pictures for the problem. Kindly suggest remedial solution.

  • Hi, 

    Are you using unmodified version of the example? Could you try to add the define DEBUG in your Preprocessor(Project -> Edit Options -> Preprocessor -> Preprocessor Definitions), then add a breakpoint on app_error_fault_handler() to see which error you get. You will see which error you get and which function is returning this error.

  • Hi,

    Thanks for your reply. i have checked as per your suggestion. But It was observed program stops at beacon_scan_uart. Same problem is observed in beaconning older and newer version for nrf52840 only and it is working on nrf52832. But Uart portion which is added to original beaconing example

    /* Copyright (c) 2010 - 2018, Nordic Semiconductor ASA
     * 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, except as embedded into a Nordic
     *    Semiconductor ASA integrated circuit in a product or a software update for
     *    such product, 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 Nordic Semiconductor ASA nor the names of its
     *    contributors may be used to endorse or promote products derived from this
     *    software without specific prior written permission.
     *
     * 4. This software, with or without modification, must only be used with a
     *    Nordic Semiconductor ASA integrated circuit.
     *
     * 5. Any software provided in binary form under this license must not be reverse
     *    engineered, decompiled, modified and/or disassembled.
     *
     * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
     * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
     * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS 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 <stdio.h>
    #include "nrf_delay.h"
    #include "nrf_gpio.h"
    #include "ble.h"
    #include "boards.h"
    #include "simple_hal.h"
    #include "nrf_mesh.h"
    #include "log.h"
    #include "advertiser.h"
    #include "mesh_app_utils.h"
    #include "mesh_stack.h"
    #include "ble_softdevice_support.h"
    #include "mesh_provisionee.h"
    #include "nrf_mesh_config_examples.h"
    #include "app_timer.h"
    #include "example_common.h"
    #include "SEGGER_RTT.h"
    #include "app_uart.h"
    #include "app_error.h"
    #if defined (UART_PRESENT)
    #include "nrf_uart.h"
    #endif
    #if defined (UARTE_PRESENT)
    #include "nrf_uarte.h"
    #endif
    
    #if defined(NRF51) && defined(NRF_MESH_STACK_DEPTH)
    #include "stack_depth.h"
    #endif
    
    #define MAX_TEST_DATA_BYTES     (100U)                /**< max number of test bytes to be used for tx and rx. */
    #define UART_TX_BUF_SIZE 512                         /**< UART TX buffer size. */
    #define UART_RX_BUF_SIZE 512                         /**< UART RX buffer size. */
    
    void uart_error_handle(app_uart_evt_t * p_event)
    {
        if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
        {
            SEGGER_RTT_printf(0,"APP_UART_COMMUNICATION_ERROR\n");
            APP_ERROR_HANDLER(p_event->data.error_communication);
            
        }
        else if (p_event->evt_type == APP_UART_FIFO_ERROR)
        {
            SEGGER_RTT_printf(0,"APP_UART_FIFO_ERROR\n");
            APP_ERROR_HANDLER(p_event->data.error_code);
        }
    }
    /* When UART is used for communication with the host do not use flow control.*/
    #define UART_HWFC APP_UART_FLOW_CONTROL_DISABLED    //APP_UART_FLOW_CONTROL_ENABLED
    
    #define STATIC_AUTH_DATA        {0x6E, 0x6F, 0x72, 0x64, 0x69, 0x63, 0x5F, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x31}
    #define ADVERTISER_BUFFER_SIZE  (64)
    
    /** Single advertiser instance. May periodically transmit one packet at a time. */
    static advertiser_t m_advertiser;
    
    static uint8_t      m_adv_buffer[ADVERTISER_BUFFER_SIZE];
    static bool         m_device_provisioned;
    
    
    static void rx_cb(const nrf_mesh_adv_packet_rx_data_t * p_rx_data)
    {
        LEDS_OFF(BSP_LED_0_MASK);  /* @c LED_RGB_RED_MASK on pca10031 */
        char msg[64];
        (void) sprintf(msg, "$ [@%u]: RSSI: %3d ADV TYPE: %x ADDR: [%02x:%02x:%02x:%02x:%02x:%02x]",
                       p_rx_data->p_metadata->params.scanner.timestamp,
                       p_rx_data->p_metadata->params.scanner.rssi,
                       p_rx_data->adv_type,
                       p_rx_data->p_metadata->params.scanner.adv_addr.addr[0],
                       p_rx_data->p_metadata->params.scanner.adv_addr.addr[1],
                       p_rx_data->p_metadata->params.scanner.adv_addr.addr[2],
                       p_rx_data->p_metadata->params.scanner.adv_addr.addr[3],
                       p_rx_data->p_metadata->params.scanner.adv_addr.addr[4],
                       p_rx_data->p_metadata->params.scanner.adv_addr.addr[5]);
        __LOG_XB(LOG_SRC_APP, LOG_LEVEL_INFO, msg, p_rx_data->p_payload, p_rx_data->length);
        printf(msg);
        printf("\n");
        //LEDS_ON(BSP_LED_0_MASK);  /* @c LED_RGB_RED_MASK on pca10031 */
    }
    
    static void adv_init(void)
    {
        advertiser_instance_init(&m_advertiser, NULL, m_adv_buffer, ADVERTISER_BUFFER_SIZE);
    }
    
    static void adv_start(void)
    {
        advertiser_enable(&m_advertiser);
        static const uint8_t adv_data[] =
        {
            0x11, /* AD data length (including type, but not itself) */
            0x09, /* AD data type (Complete local name) */
            'N',  /* AD data payload (Name of device) */
            'o',
            'r',
            'd',
            'i',
            'c',
            ' ',
            'S',
            'e',
            'm',
            'i',
            ' ',
            'M',
            'e',
            's',
            'h'
        };
    
        /* Allocate packet */
        adv_packet_t * p_packet = advertiser_packet_alloc(&m_advertiser, sizeof(adv_data));
        if (p_packet)
        {
            /* Construct packet contents */
            memcpy(p_packet->packet.payload, adv_data, sizeof(adv_data));
            /* Repeat forever */
            p_packet->config.repeats = ADVERTISER_REPEAT_INFINITE;
    
            advertiser_packet_send(&m_advertiser, p_packet);
        }
    
    }
    
    static void node_reset(void)
    {
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "----- Node reset  -----\n");
       // hal_led_blink_ms(LEDS_MASK, LED_BLINK_INTERVAL_MS, LED_BLINK_CNT_RESET);
        /* This function may return if there are ongoing flash operations. */
        mesh_stack_device_reset();
    }
    
    static void config_server_evt_cb(const config_server_evt_t * p_evt)
    {
        if (p_evt->type == CONFIG_SERVER_EVT_NODE_RESET)
        {
            node_reset();
        }
    }
    
    static void device_identification_start_cb(uint8_t attention_duration_s)
    {
        hal_led_mask_set(LEDS_MASK, false);
        hal_led_blink_ms(BSP_LED_2_MASK  | BSP_LED_3_MASK, 
                         LED_BLINK_ATTENTION_INTERVAL_MS, 
                         LED_BLINK_ATTENTION_COUNT(attention_duration_s));
    }
    
    static void provisioning_aborted_cb(void)
    {
        hal_led_blink_stop();
    }
    
    static void provisioning_complete_cb(void)
    {
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Successfully provisioned\n");
    
        dsm_local_unicast_address_t node_address;
        dsm_local_unicast_addresses_get(&node_address);
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Node Address: 0x%04x \n", node_address.address_start);
    
       // hal_led_blink_stop();
        //hal_led_mask_set(LEDS_MASK, LED_MASK_STATE_OFF);
       // hal_led_blink_ms(LEDS_MASK, LED_BLINK_INTERVAL_MS, LED_BLINK_CNT_PROV);
    }
    
    static void mesh_init(void)
    {
        mesh_stack_init_params_t init_params =
        {
            .core.irq_priority = NRF_MESH_IRQ_PRIORITY_LOWEST,
            .core.lfclksrc     = DEV_BOARD_LF_CLK_CFG,
            .models.config_server_cb = config_server_evt_cb
        };
        ERROR_CHECK(mesh_stack_init(&init_params, &m_device_provisioned));
    
        /* Start listening for incoming packets */
        nrf_mesh_rx_cb_set(rx_cb);
    
        /* Start Advertising own beacon */
        adv_init();
    }
    
    static void initialize(void)
    {
    #if defined(NRF51) && defined(NRF_MESH_STACK_DEPTH)
        stack_depth_paint_stack();
    #endif
    
        ERROR_CHECK(app_timer_init());
       // hal_leds_init();
    
        __LOG_INIT(LOG_SRC_APP, LOG_LEVEL_INFO, log_callback_rtt);
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "----- Bluetooth Mesh Beacon Example -----\n");
    
        ble_stack_init();
    
        mesh_init();
    
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Initialization complete!\n");
    }
    
    static void start(void)
    {
        if (!m_device_provisioned)
        {
            static const uint8_t static_auth_data[NRF_MESH_KEY_SIZE] = STATIC_AUTH_DATA;
            mesh_provisionee_start_params_t prov_start_params =
            {
                .p_static_data    = static_auth_data,
                .prov_complete_cb = provisioning_complete_cb,
                .prov_device_identification_start_cb = NULL, //device_identification_start_cb,
                .prov_device_identification_stop_cb = NULL,
                .prov_abort_cb = provisioning_aborted_cb,
                .p_device_uri = NULL
            };
            ERROR_CHECK(mesh_provisionee_prov_start(&prov_start_params));
        }
        adv_start();
    
        ERROR_CHECK(mesh_stack_start());
    
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Bluetooth Mesh Beacon example started!\n");
    
       // hal_led_mask_set(LEDS_MASK, LED_MASK_STATE_OFF);
       // hal_led_blink_ms(LEDS_MASK, LED_BLINK_INTERVAL_MS, LED_BLINK_CNT_START);
    }
    
    static void uart_init(void)
    {
          uint32_t err_code;
          const app_uart_comm_params_t comm_params =
          {
              RX_PIN_NUMBER,
              TX_PIN_NUMBER,
              RTS_PIN_NUMBER,
              CTS_PIN_NUMBER,
              UART_HWFC,
              false,
          #if defined (UART_PRESENT)
              NRF_UART_BAUDRATE_115200
          #else
              NRF_UARTE_BAUDRATE_115200
          #endif
          };
        APP_UART_FIFO_INIT(&comm_params,
                             UART_RX_BUF_SIZE,
                             UART_TX_BUF_SIZE,
                             uart_error_handle,
                             APP_IRQ_PRIORITY_LOWEST,
                             err_code);
          APP_ERROR_CHECK(err_code);
          printf("Uart Service Started\n");
          //err_code=app_uart_put('A');
          //err_code=app_uart_put('B');
         // err_code=app_uart_put('c');
     }
    
    int main(void)
    {
        initialize();
        start();
        uart_init();
        for (;;)
        {
            (void)sd_app_evt_wait();
        }
    }
    
    is not working in nrf52832 board.

  • Hi,

    Have you included all the necessary code files for the UART module and paths to the corresponding SES project file? Have a look at this.

    Do the function return any error codes?

  • Thanks again I have added all required code files and uart module and program. More over there is also same problem with original beaconning example in nrf5 SDK for Mesh from v2.0.1 to v3.2.0. Program run for some time and get halted on nrf52840 but original program run without any problem on nrf52832. But if I add uart routine on beaconning example for nrf52832 and check on RTT Viewer after running program APP_UART_COMMUNICATION_ERROR is observed immediately after power on. 

Related