Hi all, (First time posting on a Mailing List, I apologize if I'm breaking any rule) (For the record: this work is done during my work hours at Reflex Aerospace)
I believe that I found a bug in the TMS570 BSP, more specifically the receiving part of the SCI driver. Please find attached the git diff with more details. ``` Author: Adrien Chardon <adr...@reflexaerospace.com> Date: Wed Jan 24 18:01:52 2024 +0100 bsp/tms570/sci: fix bug in tms570_sci_read_received_chars() `tms570_sci_interrupt_handler()` is called when an RX interrupt fires. It checks in the register `FLR`, the `RXRDY` bit (Receiver ready flag - indicate that the SCIRD contains new data). If it is set, it calls `tms570_sci_read_received_chars()`. `tms570_sci_read_received_chars()` checks the register `RD` against 0. If it is non zero, it returns 1 to indicate that one byte was read. In the old behavior, if it is zero, the function returns 0 to indicate that no data was read. The new behavior is to not silently drop 0x00 bytes. Ignoring 0x00 bytes is fine when working with printable text (which, I assume, is how this driver was tested), but as soon as the UART is used in non canonical (raw) mode, with potentially 0x00 bytes, these bytes will be silently dropped, causing issues in the data/protocol layer above. diff --git bsps/arm/tms570/console/tms570-sci.c bsps/arm/tms570/console/tms570-sci.c index a14b7dad5d..eb7c381d42 100644 --- bsps/arm/tms570/console/tms570-sci.c +++ bsps/arm/tms570/console/tms570-sci.c @@ -191,11 +191,8 @@ static int tms570_sci_read_received_chars( if ( N < 1 ) { return 0; } - if ( ctx->regs->RD != 0 ) { - buf[0] = ctx->regs->RD; - return 1; - } - return 0; + buf[0] = ctx->regs->RD; + return 1; } ``` Best regards Adrien Chardon
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel