This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

No RX on UART

Hi,

I'm using 51822 to control GSM module via UART (57600, no flow control). My device is USB and battery powered. After I program the chip I HAVE to disconnect all the power in order to start system clean and have it working. If I don't completely remove power on start nrf will send commands to GSM module, GSM module will recognize them and send a reply to nrf, but nrf won't get anything on RX (I'm using simple UART without interrupt and without softdevice).

What could it be? I also don't use 32khz xtal, so it synthesises clock from hf crystal.

Parents
  • UART needs HFCLK, not the Low frequency clock. Look at the image below from nRF51 Product Specification V3.1

    image description

    There is not enough information for us to narrow down the problem. Is your nRF device having any BLE activity along with UART traffic? If so then without flowcontrol it is bound to miss packets.

  • You can enable the interrupt when this error event occurs, and in the interrupt handler which is triggered by any error, you can recover the uart by

    uint32_t error;
       if(NRF_UART->EVENTS_ERROR !=0)
       {
            NRF_UART->EVENTS_ERROR = 0;
            error = NRF_UART->ERRORSRC;
            NRF_UART->ERRORSRC = error;
       }
    

    This will clear the error and uart is usable again. But if you have not read the RXD byte before GSM sends next character, then overrun error will occur agan. The above proposed way is brute force and does not handle specific errors uniquely, but is better than restarting the chip.

Reply
  • You can enable the interrupt when this error event occurs, and in the interrupt handler which is triggered by any error, you can recover the uart by

    uint32_t error;
       if(NRF_UART->EVENTS_ERROR !=0)
       {
            NRF_UART->EVENTS_ERROR = 0;
            error = NRF_UART->ERRORSRC;
            NRF_UART->ERRORSRC = error;
       }
    

    This will clear the error and uart is usable again. But if you have not read the RXD byte before GSM sends next character, then overrun error will occur agan. The above proposed way is brute force and does not handle specific errors uniquely, but is better than restarting the chip.

Children
No Data
Related