Page 1 of 1

UART flush doesn't clear RX buffer

Posted: Mon Feb 07, 2022 7:30 am
by ESP-Shadow
ESP-IDF version: 4.4
ESP: ESP32-WROOM-32D

Background: I'm trying to make a program that communicates through UART with another device. The other device is usually constantly sending data, which I want to ignore, and only actually process it's messages, when I'm awaiting a response to one of my UART messages.

The problem: I start the UART at the start of the program, but after some time, the RX FIFO buffer gets filled up and can no longer receive any messages. I would expect that the RX FIFO buffer being a ring buffer it would just start overwriting old data when it gets full or at the very least calling uart_flush_input(UART_PORT) before writing my message and waiting for the other devices reply would clear the whole RX FIFO buffer, but it does not.

I have tried setting up the UART events example to see what happens. If I leave the part where it constantly reads the data while it's being received, everything is fine, but if I remove it, but leave the part where when it reaches overflow and it flushes, it gets filled up and stuck. The ESP will happily receive the messages at the start but after receiving a "Ring buffer full" and then "HW FIFO overflow", the FIFO overflow event keeps popping up every time I receive a message and I cannot actually read any data.

So, is uart_flush_input() supposed to do something else, or is it supposed to clear the whole UART RX buffer but is not working correctly?

Re: UART flush doesn't clear RX buffer

Posted: Tue Feb 08, 2022 9:32 am
by AngelVer
We found similar issue using ESP-IDF v4.3.1 on a ESP32-WROOM.

After a while receiving messages through the UART, the event "UART_FULL_BUFFER" triggers and the uart stop receiving messages, when its supposed to be a circular buffer. In other hand the uart_flush() seems that not clean the buffer, so after a UART_FULL_BUFFER event the uart is blocked until the ESP32 reboot.

If we set a bigger RX buffer the problem seems to be delayed in time, but ends up happening anyway.

Someone know how to fix the problem?

Re: UART flush doesn't clear RX buffer

Posted: Tue Feb 22, 2022 8:09 am
by ESP-Shadow
It would appear that this (https://github.com/espressif/esp-idf/issues/8445) issue solves our problem

Re: UART flush doesn't clear RX buffer

Posted: Sat Mar 26, 2022 1:34 am
by jkingdon
Many thanks - this problem has been driving me up the wall for weeks, so it's great to know the solution is on it's way.