I had purchased a handy little USB-serial adapter with multiple outputs some months ago, and although it checked out on delivery, the next time I wanted to use it, it just didn’t work at all.
Above, a view of the internals. It uses an FTDI FT232RL chip, and MAX232 and Max 485 for the RS-232 and RS-485 outputs.
It turned out that the fault was intermittent, and pressing on the PCB in different places could induce or clear the fault. Since it affected all modes, it seemed to be in the region of the FT232RL, so all the pins were re-soldered (no solder added, just reflowed with a hot clean iron).
That fixed it, above are the waveforms on the RS-485 + and – inputs at 921kbps. The character shown is 0x33 (LSB first), the first single element MARK transition is setting idle condition (RS-485 transmitter enabled by the FT232RL), the next is the START (SPACE polarity) then two bits MARK two bits SPACE for 3, and again two bits MARK two bits SPACE for 3, a STOP element (MARK polarity) and then the driver is disabled.
The line is fail-safe biased to about 500mV. and has 120Ω terminations at both end of 50m of twisted pair (25m of Cat5e in loopback). The small blips at ~500ns after the bit transitions hints the length of the cable, and the quality (or otherwise) of the termination, the reflection coefficient is about 0.4/3.8 or around 0.1… not a bad match at all.
Looking at the single element pulses, one can see that this would sustain twice the speed, 2Mb/s which over 50m of cable is right on the Rule of Thumb limit of length*speed<1e8. One of the constraints on speed here is that the MAX485 driver chips is rated for a maximum speed of 2.5Mb/s.
Above is the other end of the test link, a $6 USB-RS485 adapter off eBay. This one has a 120Ω termination resistor on board, and the two 470Ω resistors soldered on top connect + to VCC and – to GND to provide fail-safe bias which ensures that the link is idle (MARK) when no drivers are enabled.