RS-232 Serial Communication

1960/1962: Gordon Bell early UART concept (full board)
1965: IBM 1130 Synchronous Communications Adapter
1970/1972: UART WD1402: Universal Asynchronous Receiver Transmitter (aka TR1402A and others)
c. 1975: Motorola Serial Communication Interface (SCI)
c. 1976: MOS Technology 6551: Asynchronous Communications Interface Adapter (ACIA) [also used in CoCo]
1978: National Semiconductor 8250 (used in NEC PC-8001, IBM PC)
1979: Intel 8251: Programmable Communication Interface
1983: 8b/10b encoding (IBM proposal)
1986: MAX232
1992: FTDI founded
1996: USB 1.0 released

Mo/Dem: Modulator/Demodulator (Bell 101 c. 1959, Bell 103 c. 1962)

Background

Here is an example of an early “pre-UART” serial card (for early PDP).

This was consolidated into a TR1402 chip in around 1971 (about the same time as the development of the microprocessor by Intel).

Which was the ancestor to the 8250 UART introduced around 1978, and used on the IBM Asynchronous Card for use in the 8-bit ISA slot of the IBM PC 5150 released in 1981. That configuration supported up to 9600 baud reliably. Prior to this there were a multitude of UART-solutions in the S-100 bus era of serial cards (see here). And after this, around 1987, the 16550 UART was introduced that helped push past the “9600 baud barrier.”

Digitial serial communication did introduce concepts like flow-control, to better enable faster computers to “talk to” slower computers. Along the way was also the development of CRC checksum, to help quickly verify that a data stream block had been transmitted correctly (and if not, then signal to resend just that block).

With so many computers now communicating with each other, it then also became prudent to standardize the digital encoding of traditional alphanumeric symbols, which became what we still know as ASCII (but it still took a decade before ASCII was more widely adopted). Across IBM’s variety of systems, they internally standardized on EBCDIC a few years before ASCII became more widely known. This is somewhat like Greek vs Latin alphabets (same general intent but just different styles).

But why is RS-232 still slow?

The original IBM PC established a pace of 1.8432 MHz matched to its 4.77 MHz CPU. Technically, the 8250 UART that is used should be able to reach 115200 baud (193Kbps max), but other constraints limit that speed being feasible.

The Commander X16 uses a 14.7456 MHz clock on its serial card and is an 8MHz system. So, 14.7456 / (8 * 2) * 1000000 = 921600MHz (max rate).

It said that the early Intel 4004/8008 weren’t immediately impressive, since at that speed a top-talent human could do calculations by hand faster than the computer.

but then settled on a common rate of 300 baud.

Notes on actual “real world” RS-232 performance.

CASE 1: “Modern PC” to “Modern PC”. Two modern (2022-2024) i7 laptops connected by a null-modem cable across USB-to-serial adapters. TeraTerm did not work for me at the time. Instead, I used ZOC, which supports a nice file transfer capability (requesting a file on one PC will automatically open the file-selection dialog on the other PC). After connecting the terminals together, 921K was already unreliable (dropped or incorrect characters being sent (despite CTS/RTS being enabled, as indicated by the illuminated lights on the USB/serial devices), even at casual “just typing on the keyboard” speeds). Unsure of what the limiting factor is (chipset in the system, driver of the USB/serial adapter, or the overhead of the Windows 10/11 GUI OS). Adjusting both terminals down to 460K seemed fully reliable, 2MB file was transferred without incident at an expected reasonable rate of ~45KB/sec.

CASE 2: “486DX PC” to “Modern PC” (i7). Early terminal programs like PROCOMM and QModem didn’t yet support even 115200 (the UART included with most systems at the time couldn’t support those higher speeds). To find an MS-DOS program that supported 115200, I had to turn to CONEX 7.5 software from 1998. This was easy to configure (ALT+I), and on the “Modern PC” side I stuck with using ZOC. The 486DX (Toshiba T1960CT) had a native serial connection, but the “Modern PC” had the USB/serial adapter (but still a null-modem cable in between them). Issuing a receive (F9 then R) in CONEX sent a signal to ZOC to automatically show the file-selection dialog. The same 2MB file as in CASE 1 was transferring at about 11.5K/sec (but with several transmission errors).

CASE 3: Connecting two PC’s wirelessly across WiModem232 and USB/dongles.

In this setup, using ZOC as the terminal software across both systems, the following was observed:

Reported RSSI of the available WiFi was about -50 dBm (a fairly weak signal). At 460K no file transfer was achievable. Reduced down to 115.2K and that speed also could not complete the file transfer.

9600 baud completed the test file transfer. Increased to 38400 baud, which had a large number of reports errors and failed CRC checks – but the test file didn’t eventually get sent at about 3.3KB/sec. At 115.2K and higher, the file failed to get transferred (despite CTS/RTS being enabled).

OTHER NOTES

Consolidated chart from Understanding Baud Rate: Why is it Important?

PAGE 34 of Universal Asynchronous Receiver Transmitter (UART)

REFERENCES

Chip Hall of Fame: Western Digital WD1402A UART – IEEE Spectrum

Fundamentals of RS-232 Serial Communications | Analog Devices (2001)

2741_EIA_RS-232-E.pdf (RS-232E spec from 1991)

communication – How were standard serial port baud rates chosen? – Electrical Engineering Stack Exchange (discussion related to origins of 50, 75, 110, 300 baud)

So what’s the deal with 115200?? : r/embedded

history – Why did the Bell 103 modem use a data rate of 300 bps? – Retrocomputing Stack Exchange

Chip Hall of Fame: Western Digital WD1402A UART – IEEE Spectrum

Blepper :: Generate modem sounds, text modulator

Chip Hall of Fame: Western Digital WD1402A UART – IEEE Spectrum

Understanding Baud Rate: Why is it Important?

2741_EIA_RS-232-E.pdf

Universal Asynchronous Receiver Transmitter (UART)

RS232 flow control

SOFTWARE

LynxTerm (MS-DOS, high speed multi-port)
HyperTerminal (Microsoft Windows)
CONEX 7.5 (MS-DOS)
ZOC
TeraTerm

SIIG offering 30MHz UART: Dual-Serial Port / RS-232 PCIe Card