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