want to add UART communication to nRF52832 with mesh enable.
I have added,
- nrf_drv_uart.c
- nrfc_prs.c
- nrfc_uart.c
- nrfc_uarte.c
files into nRF_Drivers folder in project and added User include directories for them and also I have added
- app_fifo.c
- app_uart_fifo.c
- retarget.c
files into nRF_Libraries folder in project and added User include directories also for them
In sdk_config.h I have made following settings,
- NRFX_UARTE_ENABLED 1
- NRFX_UARTE0_ENABLED 1
- NRFX_UART_ENABLED 1
- NRFX_UART0_ENABLED 1
- NRFX_PRS_ENABLED 1
- NRFX_PRS_BOX_4_ENABLED 1
and
- UART_EASY_DMA_SUPPORT 1
- UART_LEGACY_SUPPORT 1
And project also compiled after setting above configurations.
Code I made as follow (Modified version on light switch server )
#include "app_uart.h" #if defined (UART_PRESENT) #include "nrf_uart.h" #endif #if defined (UARTE_PRESENT) #include "nrf_uarte.h" #endif #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */ #define UART_RX_BUF_SIZE 256 /* other functions same as light switch server example */ void uart_event_handle(app_uart_evt_t * p_event) { static uint8_t data_array[50]; static uint8_t index = 0; uint32_t err_code; __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Handler\n"); //__LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "evt %d\n", p_event->evt_type); switch (p_event->evt_type) { case APP_UART_DATA_READY: __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "app data ready\n"); UNUSED_VARIABLE(app_uart_get(&data_array[index])); index++; if (data_array[index - 1] == '\n') { if (index > 1) { /* Need to implement the function in here */ __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Receive\n"); } index = 0; } break; case APP_UART_COMMUNICATION_ERROR: __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "Communication ERROR\n"); APP_ERROR_HANDLER(p_event->data.error_communication); break; case APP_UART_FIFO_ERROR: __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "FIFO ERROR\n"); APP_ERROR_HANDLER(p_event->data.error_code); break; default: break; } } static void uart_init(void) { // #define RX_PIN_NUMBER 8 // #define TX_PIN_NUMBER 7 // #define CTS_PIN_NUMBER 6 // #define RTS_PIN_NUMBER 5 uint32_t err_code; app_uart_comm_params_t const comm_params = { .rx_pin_no = RX_PIN_NUMBER, .tx_pin_no = TX_PIN_NUMBER, .rts_pin_no = NULL, //RTS_PIN_NUMBER, .cts_pin_no = NULL, //CTS_PIN_NUMBER, .flow_control = APP_UART_FLOW_CONTROL_DISABLED, .use_parity = false, #if defined (UART_PRESENT) .baud_rate = NRF_UART_BAUDRATE_9600 #else .baud_rate = NRF_UART_BAUDRATE_9600 #endif }; APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_event_handle, APP_IRQ_PRIORITY_LOWEST, //NRF_MESH_IRQ_PRIORITY_LOWEST, // err_code); APP_ERROR_CHECK(err_code); } /* initilize uart_init inside initializer */ static void initialize(void) { uart_init(); __LOG_INIT(LOG_SRC_APP | LOG_SRC_ACCESS | LOG_SRC_BEARER, LOG_LEVEL_INFO, LOG_CALLBACK_DEFAULT); __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "----- BLE Mesh Light Switch Server Demo -----\n"); ERROR_CHECK(app_timer_init()); hal_leds_init(); #if BUTTON_BOARD ERROR_CHECK(hal_buttons_init(button_event_handler)); #endif ble_stack_init(); #if MESH_FEATURE_GATT_ENABLED gap_params_init(); conn_params_init(); #endif mesh_init(); }
Following result got through debugging,
<t: 0>, main.c, 438, ----- BLE Mesh Light Switch Server Demo ----- <t: 13810>, main.c, 380, Initializing and adding models <t: 13813>, main.c, 224, App OnOff Model Handle: 2 <t: 18763>, main.c, 479, Device UUID : 005955AA00000000E5F8D4197B5E9BA2 <t: 245432>, main.c, 308, Handler <t: 245433>, main.c, 331, Communication ERROR <t: 245436>, app_error_weak.c, 119, Mesh error 4 at 0x00000000 (:0)
according to above result once development board receive a signal through RX pin uart_event_handler function calls as expected, and inside that handler I got APP_UART_COMMUNICATION_ERROR
So what would be the cause for this error.
Is there any .c file missing or something with the code