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.

  • Well have you turned it on and enabled it? Do you have other interrupts which you're servicing which are higher priority?

    I can find zero documentation in the S110 docs about the guarantees when the CPU blocking mutex is disabled, only the questions here which makes it rather hard to say what exactly is guaranteed. eg you may be unblocked after a maximum of 250us but how long do you get after that before you are blocked again? I'll file a support case for better documentation.

    The point remains that you're overrunning the UART receive buffer so it's not getting serviced for one reason or another.

    I see another claim that with SD 8 you don't even need to set the flag manually, it's automatically set, however I still can't find a good discussoin of what's guaranteed in the release notes.

    If you have a logic analyser, now is the time to get it out and start looking.

Reply
  • Well have you turned it on and enabled it? Do you have other interrupts which you're servicing which are higher priority?

    I can find zero documentation in the S110 docs about the guarantees when the CPU blocking mutex is disabled, only the questions here which makes it rather hard to say what exactly is guaranteed. eg you may be unblocked after a maximum of 250us but how long do you get after that before you are blocked again? I'll file a support case for better documentation.

    The point remains that you're overrunning the UART receive buffer so it's not getting serviced for one reason or another.

    I see another claim that with SD 8 you don't even need to set the flag manually, it's automatically set, however I still can't find a good discussoin of what's guaranteed in the release notes.

    If you have a logic analyser, now is the time to get it out and start looking.

Children
No Data
Related