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

nRF Uart v2.0 not Receiving

I am using the eval board, sdk v5.2.0, s110 v5.0 and a galaxy nexus with the UART Nordic app. I have not been able to receive any data on the android end. After

void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length)

is called i turn toggle an led. I can verifty that when i type something in my android device that it receives the message because the led will toggle. However i never get any messages back.

Much Thanks,

Nick

Parents
  • Hi, are you using a terminal on your computer to pick up the data received by your board? There is no automatic echoing implemented in ble_app_uart, so it does in other words not respond to received strings via ble. There is a startup message on the board, but it is only sent over the UART when the application starts.

    Assuming that you didn't use a terminal. What you need to do is opening the corresponding com port in a terminal with 38400 baud rate and 1 stop bit.

    Best regards,

    Vidar

    Edit: Code snippet to echo rx data to tx

    void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length)
      {  
          uint32_t err_code;
          /*Echo incoming data*/
          err_code = ble_nus_send_string(&m_nus, p_data, length);
    
          //err_code = ble_nus_send_string(&m_nus, p_data, length);
          
          if (err_code != NRF_ERROR_INVALID_STATE)
             {
                  APP_ERROR_CHECK(err_code);
             }
       }
    
Reply
  • Hi, are you using a terminal on your computer to pick up the data received by your board? There is no automatic echoing implemented in ble_app_uart, so it does in other words not respond to received strings via ble. There is a startup message on the board, but it is only sent over the UART when the application starts.

    Assuming that you didn't use a terminal. What you need to do is opening the corresponding com port in a terminal with 38400 baud rate and 1 stop bit.

    Best regards,

    Vidar

    Edit: Code snippet to echo rx data to tx

    void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length)
      {  
          uint32_t err_code;
          /*Echo incoming data*/
          err_code = ble_nus_send_string(&m_nus, p_data, length);
    
          //err_code = ble_nus_send_string(&m_nus, p_data, length);
          
          if (err_code != NRF_ERROR_INVALID_STATE)
             {
                  APP_ERROR_CHECK(err_code);
             }
       }
    
Children
  • My intentions were to use the ble uart app on the phone to help debug a non-connected device. I am not able to use USB-UART also because this is a production device not a dev board.

    So am i correct in understanding that the UART v2.0 app for android is not capable of receiving just sending? The screenshots of the app in the app store demonstrate RX not just TX. Is the app not supposed to send a string over bluetooth and receive the same string over bluetooth from the nRF? This is my point of confusion when you say "it does in other words not respond to received strings via ble".

  • The android app is capable of receiving data from a device with an UART BLE service implemented. It does however require the peripheral to try to send data to the central (UART 2.0 app). This is not the case if you are using the ble_app_uart project in your peripheral firmware which only relays received data to the UART.

    So the fact that the LED actually starts to blink, indicates that your code works as intended.

    if you want data from the peripheral sent to the phone you have to either program the peripheral firmware to respond to incoming data or send data through the UART connection.

    If this doesn’t help, I might be able to provide a better answer if you are able to provide me with more details of what you are trying to achieve and more about your setup.

    I see that you are having issues with a production device, what kind of issues are there, and what are you trying to debug with the UART service?

  • Much Thanks Vidar, we are designing the firmware in two stages. In stage one we are writing drivers for multiple sensors and testing the each of them using the BLE UART. We would like to send sensor and debug data to the UART Android App for this stage. In the second stage we will be developing a custom BLE service and profile to send the data more efficiently and hence removing BLE UART.

    Is there an example which does both RX and TX to the android device? Our production device does not have the necessary UART over USB hardware and this would save us quite a bit of time if it worked.

  • There are unfortunately no examples that do all this, but it should however be quite easy to add this functionality in the existing example. I have edited my answer with a code snippet that enables echoing of received strings. You could change the echoing to send your debug information instead. Although, if you only want to test the functioning of your sensors it sounds like it would be faster to just use a J-link debugger instead?

  • Much Thanks Vidar, that code you gave me worked. Thanks for all the help.

Related