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

ERRORSRC 0x1 on UART handler

Hello,

On my custom board, I'm receiving chunks of UART data, without flow control, at 115200bps. Sometimes (its quite frequent now... sometimes after 10 chunks, sometimes after 100 chunks), im getting ERRORSRC 1 on APP_ERROR_HANDLER(p_event->data.error_communication); line.

My board doesn't include a 32kHz oscillator, and Im using NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION as my clock source (I don't care about current consumption). I'm also using SDK 8 with SoftDevice 8.0.0.

What would cause this? Any idea how to solve it?

edit Edited title so it makes more clear. Thanks @RK

Parents
  • No you're not getting that error. That field in the event structure doesn't return an NRF_ERROR_* code (look in the documentation or just read the code), it returns the raw error from ERRORSRC in the UART.

    If you then look at the nRF52 series documentation for ERRORSRC you'll see '1', which is the error code you're getting, is an overrun error, which, since you're trying to do no-flow-control at 115,200 is not very surprising.

    You can probably run at that baud rate without flow control if the chip's not doing anything else, I'm going to guess you're trying it whilst using the softdevice and that's not going to work.

  • i found all the timings in the S110 spec version 2. They take a bit of reading but all the data is there. There's times of 510us max in the lower stack for some events during connection, 440us advertising. Then there is time in the upper stack too. Which begs the question .. what priority is your UART interrupt and has that changed? If it's '1' (APP_HIGH) then there should be time to keep the UART serviced at a conservative 80-90kb/s. It certainly would help if the interrupt service code runs at APP_HIGH and only clears the UART to memory and any processing happens at a lower priority later. You can have as little as ~650 instructions between advertising events so clearing the FIFO fast is the best thing. Also check your advert interval and latency - perhaps you can connect less-often and give yourself more time.

Reply
  • i found all the timings in the S110 spec version 2. They take a bit of reading but all the data is there. There's times of 510us max in the lower stack for some events during connection, 440us advertising. Then there is time in the upper stack too. Which begs the question .. what priority is your UART interrupt and has that changed? If it's '1' (APP_HIGH) then there should be time to keep the UART serviced at a conservative 80-90kb/s. It certainly would help if the interrupt service code runs at APP_HIGH and only clears the UART to memory and any processing happens at a lower priority later. You can have as little as ~650 instructions between advertising events so clearing the FIFO fast is the best thing. Also check your advert interval and latency - perhaps you can connect less-often and give yourself more time.

Children
No Data
Related