My concern is FTDI USB-to-UARTs will actually send more bytes after RTS is negated, up to 3 or 4 I think depending on where it is in the USB packet (can't find this in the datasheet at the moment but I know I read it somewhere).
I ran into this issue on my SBC using an FTDI USB->Serial cable and ended up using Garth's interrupt driven receive for the 65C51 (essentially a software 256 byte FIFO) and I de-assert RTS when there are 16 bytes left. This has worked very reliably with all of the USB->Serial adapters I have including FTDI and Prolific chips and I commonly transmit 20K to 100K files over to my board in plain text (eg. no additional error detection/correction). Some of these are tests for Tali Forth 2 that take a second or two to run, so it's definitely using the handshaking a lot.
This information about the extra bytes when handshaking is not in the datasheet and is getting harder to find as it's on an "old" support page. It is currently available here
https://www.ftdichip.com/old2020/Suppor ... htm#HwGen3 and I'm including the relevant text in case that link goes dead. Everything below is from that FAQ:
How does RTS/CTS flow control work in an FTDI chip?
FTxxx RTS# pin is an output. It should be connected to the CTS# input pin of the device at the other end of the UART link.
If RTS# is logic 0 it is indicating the FTxxx device can accept more data on the RXD pin.
If RTS# is logic 1 it is indicating the FTxxx device cannot accept more data.
RTS# changes state when the chip buffer reaches its last 32 bytes of space to allow time for the external device to stop sending data to the FTxxx device.
FTxxx CTS# pin is an input. It should be connected to the RTS# output pin of the device at the other end of the UART link.
If CTS# is logic 0 it is indicating the external device can accept more data, and the FTxxx will transmit on the TXD pin.
If CTS# is logic 1 it is indicating the external device cannot accept more data. the FTxxx will stop transmitting within 0~3 characters, depending on what is in the buffer.
This potential 3 character overrun does occasionally present problems. Customers shoud be made aware the FTxxx is a USB device and not a "normal" RS232 device as seen on a PC. As such the device operates on a packet basis as opposed to a byte basis.
Word to the wise. Not only do RS232 level shifting devices (e.g. MAX232) level shift, but they also invert the signal.