Chip resets when Rx pin held low for long time

I'm using UART peripheral sample on an nRF52840 and SDK ncs v2.4.2. The Nordic module switches on another device (called UUT) which connects to its Rx and Tx pins.

I discovered that a low-level signal is generated by the UUT on nRF's Rx for 80 msec just after switching on and causes nRF52 chip to be reset after a glitch. The chip gives me this message before resetting:

<err> os: Faulting instruction address (r15/pc): 0x0002d7cc

<err> os: >>> ZEPHYR FATAL ERROR 4: Kernel panic on CPU 0

The problem is that I can't touch the UUT to filter out that long low-level signal but it could be done by disabling UART temporarily through software. Is there any way to disable the UART for a short time?

  • We need to know the context of the faulting thread/interrupt to be able to understand what caused the assert. You can do

    1. Get the exact filename and line number of the faulting instruction using addr2line 
    2. enable CONFIG_THREAD_NAME=y in your prj.conf file to get more info in the log apart from just the address.

    After we know the context, file and line that caused this, we can try to understand what workaround is needed to fix this.

  • Sorry for the delay,

    You can reproduce this on a generic development board as I did.
    This happens when you set the baud rate of UART to 115200 and the Rx pin held low for long enough time like 10ms. In these conditions, the UART receiving buffer is overflew while the ble send buffer is not fast enough. 

    I fixed that issue by adding a blocking circuit to rx pin of nRF52833.

Related