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

App uart error

Hi All

I am working on nrf52832 but not using the SDK. how ever I had created the uart functionality on my nrf but many times I got the communication error.

I had taken the references from the uart example provided in the sdk and using APP uart example I created this uart setup.

I am trying to communicate nrf with esp over uart.

But I am failed in sending and receiving data. 

Can I get some help in that.

/*
 * Copyright (c) 2017, CoolR Group Inc
 * All Rights Reserved.
 *
 * File: uart.c
 *
 * Description:  APIs for accessing SoC uart
 *
 * Author: VAIBHAV
 *
 */

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include "uart.h"
#include "config.h"
#include "nrf_gpio.h"
#include "app_util_platform.h"
#include "coolerBoard.h"
#include "debug.h"
#include "nrf_delay.h"
#include "app_uart.h"
#include "esp.h"
#define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
#define UART_INST 0

//nrf_drv_uart_t  uart_nrf = NRF_DRV_UART_INSTANCE(UART_INST);

/***********************************************************//**
 * Initialization of the uart peripheral. 
 * @param uart_config_t uartConfig 
 * 		  Configuration structure for initialising uart
 * @return error code
 **************************************************************/
void uart_event_handle(app_uart_evt_t * p_event)
{
    static uint8_t data_array[40];
    static uint8_t index = 0;
    uint32_t err_code;
    switch (p_event->evt_type)
        {
            case APP_UART_DATA_READY:
                UNUSED_VARIABLE(app_uart_get(&data_array[index]));
                index++;
                if(data_array[index -1] == 0x0A && data_array[index -2] == 0x0D)
                {
                    esp_parse_data(data_array,index);
                    index = 0;
                }
                break;
            case APP_UART_COMMUNICATION_ERROR:
                print(LL_PRINT,"COMMUNICATION ERROR\r\n");
                break;

            case APP_UART_FIFO_ERROR:
               print(LL_PRINT,"FIFO ERROR\r\n");
                break;

            default:
                break;
        }
}

ret_code_t uartInit(uart_config_t uartConfig, nrf_uart_event_handler_t uart_event_handler)
{
 /*   ret_code_t ret = NRF_SUCCESS;

    const nrf_drv_uart_config_t config =
    {
        .pseltxd = uartConfig.tx_pin,
        .pselrxd = uartConfig.rx_pin,
        .baudrate = (nrf_uart_baudrate_t)uartConfig.baudrate,
        .interrupt_priority = uartConfig.intr_priotity,
        .hwfc = uartConfig.hwfc,
        .parity = uartConfig.parity,
        .p_context = NULL,
    };

    ret = nrf_drv_uart_init( &uart_nrf, &config, uart_event_handler );

    return ret;	*/
    uint32_t err_code;
    app_uart_comm_params_t const comm_params =
        {
            .rx_pin_no = uartConfig.rx_pin,
            .tx_pin_no = uartConfig.tx_pin,
            .flow_control = APP_UART_FLOW_CONTROL_DISABLED,
            .use_parity = false,
            .baud_rate = (nrf_uart_baudrate_t)uartConfig.baudrate,
        };

    APP_UART_FIFO_INIT(&comm_params,UART_RX_BUF_SIZE,UART_TX_BUF_SIZE,uart_event_handle,APP_IRQ_PRIORITY_HIGHEST,err_code);
    return err_code;
}

ret_code_t uartUnInit()
{
    ret_code_t ret = NRF_SUCCESS;
    
//    nrf_drv_uart_uninit(&uart_nrf);

    return ret;	
}
/***********************************************************//**
 * uart Receive
 * @param p_data - Pointer to the data 
 * @param length - Number of bytes to Receive
 *  
 * @return error code
 **************************************************************/
ret_code_t uartReceive(uint8_t * p_data,uint8_t length)
{
    ret_code_t ret = NRF_SUCCESS;
 /*   ret = nrf_drv_uart_rx(&uart_nrf, p_data, length);
    if(ret != NRF_SUCCESS)
        {
            print(LL_ERROR,"UART RECEIVE ERROR\r\n");
        }
    else
        {
               
        }    */
    return ret;   
}
/***********************************************************//**
 * uart Transmit 
 * @param p_data - Pointer to the data 
 * @param length - Number of bytes to Send
 *  
 * @return error code
 **************************************************************/
ret_code_t uartTransmit(uint8_t  const * const  p_data,uint32_t length)
{
	ret_code_t ret = NRF_SUCCESS;
    uint8_t data[200];
    if(p_data == NULL)
	{
		ret = NRF_ERROR_INVALID_PARAM;
		return ret;
	}
	
	if(length != 0)
        memcpy(&data[0], &p_data[0], length);

    for (uint32_t i = 0; i < length;i++)
    {
        //print(LL_PRINT, "%X ", data[i]);
        ret  = app_uart_put(data[i]);
        if(ret != NRF_SUCCESS)
            {
                print(LL_PRINT,"UART DATA SENDING FAILED\r\n");
            }
    }
    return ret;
	
}

Please review and let me know the issue.

Parents
  • Then I am tried this setup for my application, but every time I got COMMUNICATION ERROR

    /*
     * Copyright (c) 2017, CoolR Group Inc
     * All Rights Reserved.
     *
     * File: uart.c
     *
     * Description:  APIs for accessing SoC uart
     *
     * Author: VAIBHAV
     *
     */
    
    #include <stdbool.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    #include <stdlib.h>
    #include "uart.h"
    #include "config.h"
    #include "nrf_gpio.h"
    #include "app_util_platform.h"
    #include "coolerBoard.h"
    #include "debug.h"
    #include "nrf_delay.h"
    #include "app_uart.h"
    #include "esp.h"
    #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
    #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
    #define UART_INST 0
    
    nrf_drv_uart_t  uart_nrf = NRF_DRV_UART_INSTANCE(UART_INST);
    static uint8_t data_array[40];
    static uint8_t index_esp = 0;
    uint8_t test_buffer[1];
    /***********************************************************//**
     * Initialization of the uart peripheral. 
     * @param uart_config_t uartConfig 
     * 		  Configuration structure for initialising uart
     * @return error code
     **************************************************************/
    void uart_event_handle(nrf_drv_uart_event_t * p_event,void *p_context)
    {
        uint32_t err_code;
        switch (p_event->type)
            {
                case NRF_DRV_UART_EVT_RX_DONE:
                    nrf_drv_uart_rx(&uart_nrf,test_buffer,1);
                    print(LL_PRINT,"%x",test_buffer[0]);
                    data_array[index_esp] = test_buffer[0];
                    index_esp++;
                    if(data_array[index_esp -1] == 0x0A && data_array[index_esp -2] == 0x0D)
                    {
                        esp_parse_data(data_array,index_esp);
                        index_esp = 0;
                    }
                    break;
                case NRF_DRV_UART_EVT_ERROR:
                    print(LL_PRINT,"COMMUNICATION ERROR\r\n");
                    break;
    
                default:
                    break;
            }
    }
    
    ret_code_t uartInit(uart_config_t uartConfig, nrf_uart_event_handler_t uart_event_handler)
    {
        ret_code_t ret = NRF_SUCCESS;
    
        nrf_drv_uart_config_t config = NRF_DRV_UART_DEFAULT_CONFIG;
        config.pseltxd = uartConfig.tx_pin;
        config.pselrxd = uartConfig.rx_pin;
        config.baudrate = (nrf_uart_baudrate_t)uartConfig.baudrate;
        config.interrupt_priority = uartConfig.intr_priotity;
        config.hwfc = uartConfig.hwfc;
        config.parity = uartConfig.parity;
        config.p_context = NULL;
    
        ret = nrf_drv_uart_init( &uart_nrf, &config, uart_event_handle);
    
        return (nrf_drv_uart_rx(&uart_nrf,test_buffer,1) && ret);
    /*    uint32_t err_code;
        app_uart_comm_params_t const comm_params =
            {
                .rx_pin_no = uartConfig.rx_pin,
                .tx_pin_no = uartConfig.tx_pin,
                .flow_control = APP_UART_FLOW_CONTROL_DISABLED,
                .use_parity = false,
                .baud_rate = (nrf_uart_baudrate_t)uartConfig.baudrate,
            };
    
        APP_UART_FIFO_INIT(&comm_params,UART_RX_BUF_SIZE,UART_TX_BUF_SIZE,uart_event_handle,APP_IRQ_PRIORITY_HIGHEST,err_code);
        return err_code;*/
    }
    
    ret_code_t uartUnInit()
    {
        ret_code_t ret = NRF_SUCCESS;
        
        nrf_drv_uart_uninit(&uart_nrf);
    
        return ret;	
    }
    /***********************************************************//**
     * uart Receive
     * @param p_data - Pointer to the data 
     * @param length - Number of bytes to Receive
     *  
     * @return error code
     **************************************************************/
    ret_code_t uartReceive(uint8_t * p_data,uint8_t length)
    {
        ret_code_t ret = NRF_SUCCESS;
        ret = nrf_drv_uart_rx(&uart_nrf, p_data, length);
        if(ret != NRF_SUCCESS)
            {
                print(LL_ERROR,"UART RECEIVE ERROR\r\n");
            }
        else
            {
                   
            }   
        return ret;   
    }
    /***********************************************************//**
     * uart Transmit 
     * @param p_data - Pointer to the data 
     * @param length - Number of bytes to Send
     *  
     * @return error code
     **************************************************************/
    ret_code_t uartTransmit(uint8_t  const * const  p_data,uint32_t length)
    {
    	ret_code_t ret = NRF_SUCCESS;
        uint8_t data[200];
        if(p_data == NULL)
    	{
    		ret = NRF_ERROR_INVALID_PARAM;
    		return ret;
    	}
    	
    	if(length != 0)
            memcpy(&data[0], &p_data[0], length);
    
        /*for (uint32_t i = 0; i < length;i++)
        {
            //print(LL_PRINT, "%X ", data[i]);
            ret  = app_uart_put(data[i]);
            if(ret != NRF_SUCCESS)
                {
                    print(LL_PRINT,"UART DATA SENDING FAILED\r\n");
                }
        }*/
        while (nrf_drv_uart_tx(&uart_nrf,data, length) != NRF_SUCCESS){;}
        return ret;
    }
    
    

Reply
  • Then I am tried this setup for my application, but every time I got COMMUNICATION ERROR

    /*
     * Copyright (c) 2017, CoolR Group Inc
     * All Rights Reserved.
     *
     * File: uart.c
     *
     * Description:  APIs for accessing SoC uart
     *
     * Author: VAIBHAV
     *
     */
    
    #include <stdbool.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    #include <stdlib.h>
    #include "uart.h"
    #include "config.h"
    #include "nrf_gpio.h"
    #include "app_util_platform.h"
    #include "coolerBoard.h"
    #include "debug.h"
    #include "nrf_delay.h"
    #include "app_uart.h"
    #include "esp.h"
    #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
    #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */
    #define UART_INST 0
    
    nrf_drv_uart_t  uart_nrf = NRF_DRV_UART_INSTANCE(UART_INST);
    static uint8_t data_array[40];
    static uint8_t index_esp = 0;
    uint8_t test_buffer[1];
    /***********************************************************//**
     * Initialization of the uart peripheral. 
     * @param uart_config_t uartConfig 
     * 		  Configuration structure for initialising uart
     * @return error code
     **************************************************************/
    void uart_event_handle(nrf_drv_uart_event_t * p_event,void *p_context)
    {
        uint32_t err_code;
        switch (p_event->type)
            {
                case NRF_DRV_UART_EVT_RX_DONE:
                    nrf_drv_uart_rx(&uart_nrf,test_buffer,1);
                    print(LL_PRINT,"%x",test_buffer[0]);
                    data_array[index_esp] = test_buffer[0];
                    index_esp++;
                    if(data_array[index_esp -1] == 0x0A && data_array[index_esp -2] == 0x0D)
                    {
                        esp_parse_data(data_array,index_esp);
                        index_esp = 0;
                    }
                    break;
                case NRF_DRV_UART_EVT_ERROR:
                    print(LL_PRINT,"COMMUNICATION ERROR\r\n");
                    break;
    
                default:
                    break;
            }
    }
    
    ret_code_t uartInit(uart_config_t uartConfig, nrf_uart_event_handler_t uart_event_handler)
    {
        ret_code_t ret = NRF_SUCCESS;
    
        nrf_drv_uart_config_t config = NRF_DRV_UART_DEFAULT_CONFIG;
        config.pseltxd = uartConfig.tx_pin;
        config.pselrxd = uartConfig.rx_pin;
        config.baudrate = (nrf_uart_baudrate_t)uartConfig.baudrate;
        config.interrupt_priority = uartConfig.intr_priotity;
        config.hwfc = uartConfig.hwfc;
        config.parity = uartConfig.parity;
        config.p_context = NULL;
    
        ret = nrf_drv_uart_init( &uart_nrf, &config, uart_event_handle);
    
        return (nrf_drv_uart_rx(&uart_nrf,test_buffer,1) && ret);
    /*    uint32_t err_code;
        app_uart_comm_params_t const comm_params =
            {
                .rx_pin_no = uartConfig.rx_pin,
                .tx_pin_no = uartConfig.tx_pin,
                .flow_control = APP_UART_FLOW_CONTROL_DISABLED,
                .use_parity = false,
                .baud_rate = (nrf_uart_baudrate_t)uartConfig.baudrate,
            };
    
        APP_UART_FIFO_INIT(&comm_params,UART_RX_BUF_SIZE,UART_TX_BUF_SIZE,uart_event_handle,APP_IRQ_PRIORITY_HIGHEST,err_code);
        return err_code;*/
    }
    
    ret_code_t uartUnInit()
    {
        ret_code_t ret = NRF_SUCCESS;
        
        nrf_drv_uart_uninit(&uart_nrf);
    
        return ret;	
    }
    /***********************************************************//**
     * uart Receive
     * @param p_data - Pointer to the data 
     * @param length - Number of bytes to Receive
     *  
     * @return error code
     **************************************************************/
    ret_code_t uartReceive(uint8_t * p_data,uint8_t length)
    {
        ret_code_t ret = NRF_SUCCESS;
        ret = nrf_drv_uart_rx(&uart_nrf, p_data, length);
        if(ret != NRF_SUCCESS)
            {
                print(LL_ERROR,"UART RECEIVE ERROR\r\n");
            }
        else
            {
                   
            }   
        return ret;   
    }
    /***********************************************************//**
     * uart Transmit 
     * @param p_data - Pointer to the data 
     * @param length - Number of bytes to Send
     *  
     * @return error code
     **************************************************************/
    ret_code_t uartTransmit(uint8_t  const * const  p_data,uint32_t length)
    {
    	ret_code_t ret = NRF_SUCCESS;
        uint8_t data[200];
        if(p_data == NULL)
    	{
    		ret = NRF_ERROR_INVALID_PARAM;
    		return ret;
    	}
    	
    	if(length != 0)
            memcpy(&data[0], &p_data[0], length);
    
        /*for (uint32_t i = 0; i < length;i++)
        {
            //print(LL_PRINT, "%X ", data[i]);
            ret  = app_uart_put(data[i]);
            if(ret != NRF_SUCCESS)
                {
                    print(LL_PRINT,"UART DATA SENDING FAILED\r\n");
                }
        }*/
        while (nrf_drv_uart_tx(&uart_nrf,data, length) != NRF_SUCCESS){;}
        return ret;
    }
    
    

Children
No Data
Related