39

I am learning about old computers, and I have found the following image from this article:

UART diagram

They use the terms "UART" instead of "serial port" and "UART driver" instead of "serial port driver", I have also read the same thing on other articles.

Why do they do that?

9
  • 7
    all serial communication is not through UART
    – user17915
    Nov 14, 2017 at 10:26
  • 9
    USB = Universal Serial Bus. The S of SATA is also Serial. Nov 14, 2017 at 23:55
  • 19
    Because they're talking about UARTs and not serial ports, usually.
    – hobbs
    Nov 15, 2017 at 2:04
  • 16
    Long story short: UART, USART, RS232 and "Serial port" are terms that are often conflated but in fact each refer to something different
    – Toby
    Nov 15, 2017 at 11:57
  • 5
    And, for an old computer, saying "UART" characterizes well the hardware and software interfaces. The UART was one of the first task-specific ICs that achieved common use (ca 1973), and the various vendors' versions were pretty much alike.
    – Hot Licks
    Nov 15, 2017 at 23:42

8 Answers 8

59

A UART (Universal Asynchronous Receiver-Transmitter) is a particular kind of hardware device that uses digital sampling to convert serial data that uses embedded start and stop bits for synchronization into and from parallel data. Not all forms of serial communication use start and stop bits, and not all devices that use this form of serial communication uses some sort of UART hardware. A serial port could be something completely different.

In traditional asynchronous serial communication, data has transmitted a series of "mark" and "space" values. How these values are represented depends on the communication medium, for example RS-232C defines mark as being a voltage in the range of -3V to -15V, while space is defined when voltage is in the range of +3V to +15V. In order to know where each byte (or character) starts and ends, each byte is prefixed with a space value (start bit) that indicates the start of the byte, and suffixed with one or more mark values (stop bits) that indicate the end of a byte. In between the start and stop bits each byte is transmitted as a series of mark (1) and space (0) values.

The start and stop bits help in providing the necessary synchronization for this form of serial communication to work by just transmitting mark and space values without needing precisely synchronized clocks or by also transmitting a clock separately. The start bit lets the receiver know that a fixed number of bits will follow at a given rate. The transmitter and receiver must be configured beforehand to use the same parameters, the same number of bits in a byte, the same number of stop bits, and the same baud rate. Once the receiver has received the start bit it samples the communication line at the specified baud rate to obtain each bit of the transmitted byte in sequence.

The receiver ignores the stop bit, but it performs two functions. First, it gives time for the receiver to prepare for the next byte, and this was crucial on old mechanical devices like teletypes. Secondly, it guarantees that the start bit, a space value, is preceded by a mark value, meaning each transmitted byte is preceded by a transition from mark to space. This allows the receiver to resynchronize with the serial data byte steam if starts receiving in the middle of a byte being transmitted or noise or other problem causes it to lose synchronization.

Since the start bit in fact causes the receiver to resynchronize with the transmitter every time a byte is transmitted, this means the receiver doesn't need to be sampling each bit at precisely the same rate as the transmitter is sending them. Since normally only 10 or fewer bits, including start, data, and stop bits, are transmitted before this resynchronization occurs even a relatively large 5% difference in transmitting and receiving baud rates won't cause errors.

A UART does everything necessary to implement asynchronous serial communication in hardware and does so digitally (other earlier asynchronous hardware implementations used analog timing circuits that needed manual calibration.) However, it's also possible to implement an asynchronous serial device in software using a technique called bit banging. This was done on old computers like the Commodore 64 in order to save money and is still done from time to time in modern embedded applications for the same reason.

Finally, there are other ways of transmitting data serially, like synchronous serial communication methods where a separate clock signal is transmitted alongside the serial data. In fact, many modern computer interfaces, like USB, Serial ATA, and PCI Express are actually serial devices. So while a "serial port" normally refers to an asynchronous serial device usually implemented with some sort of UART, strictly speaking, it could potentially mean a wide range of devices. By calling the hardware device used a "UART", and the software driver for it a "UART driver" the diagram you've shown in your question is actually more precise about what it's describing.

9
  • 8
    Good answer (especially the part about USB, PCIe, SATA, SAS, etc. also being serial.) It might also be worth noting that the term "serial port" is also used commonly to refer to things like SPI and I2C, not just UART. All of those remain common in embedded systems even today.
    – reirab
    Nov 14, 2017 at 23:46
  • I thought RS232 was only +/- 5v - I seem to recall it was RS422 that was +/- 12v. Nov 15, 2017 at 13:46
  • @reirab Even (wired) ethernet and PCI-e are in essence serial. (With possibly several serial lines used in a parallel).
    – Tonny
    Nov 15, 2017 at 14:05
  • 3
    @OldCurmudgeon TTL RS232 uses 0-5V. RS422 can go upto +/- 48V if memory serves. The 5V and 12V are just very common because those voltages are readily available from the power-supplies of many devices so don't require additional circuitry to generate the voltages.
    – Tonny
    Nov 15, 2017 at 14:08
  • 6
    RS232C is way, way old. I'm Pretty sure that version of the standard required the voltage levels to swing between something like +12V and -12V. Since then we've had RS232-D, -E, and -F. One of the later standards allowed voltage to swiing between +5 and -5 (but still required to accept +12 & -12), and then a still later one allowed it to go as low as +/- 3V. Nov 15, 2017 at 17:36
22

Simply, a UART is a serial port, but a serial port is not necessarily a UART.

Serial port is a general term for anything serial, without further specification, while a UART defines a transceiver for a specific asynchronous format. That Ports using asynchronous protocols like RS232 or TTY are colloquially simplified as serial port shouldn't promote technical documentation to be as unspecific.

On a more technical side, a SPI is also a serial port, but I doubt that any UART driver will be able to handle its specifications.

12
  • Although you are not wrong, I would clarify that a lot of people consider the RS-232 port on the back of their computer a "serial port" and in that case a "serial port" uses a UART.
    – Sam
    Nov 14, 2017 at 14:52
  • 2
    @Sam Except you're forgetting that there are a number of retro computers that have a standard RS-232 serial port that is not driven by a UART chip. The UART chip and terminology is IBM-PC specific.
    – mnem
    Nov 14, 2017 at 21:43
  • 4
    @mnem Agree to your first sentence, disagree with the second. UART is in no way IBM-PC-specific. The TI TMS 6011 had nothing to do with an IBM-PC, appeared in 1977 and was called an UART, for examle
    – tofro
    Nov 15, 2017 at 12:53
  • 2
    @mnem, UART chips were available to purchase several years prior to the release of the original IBM-PC. en.wikipedia.org/wiki/… Nov 15, 2017 at 17:39
  • 1
    @mnem You'll find an 8251 UART on the Imsai 8080 SIO (Serial I/O) card (ca. 1976). The later Multi-I/O card had a Western Digital (yes, that Western Digital) TR1602.
    – Blrfl
    Nov 22, 2017 at 11:02
5

UART is an initialism for "Universal Asynchronous Receiver/Transmitter", the manufacturer's name for the 8250 that was used in the original PC (and elsewhere) to run the serial port. That initialism continued to be used when labelling the 16550 which succeeded the 8250 and the term has attached itself to the serial port ever since.

8
  • 1
    Serial ports needn't have UART chips (see: Commodore 64; Amiga 500). UARTs have small buffers that reduce the odds of characters getting dropped at higher speeds. So, you could say a UART is always part of a serial port, but a serial port doesn't always have a UART. Nov 14, 2017 at 2:55
  • Right. The Vic-20 used a VIA, the C64 a CIA, it's safe to assume the Spectrum was built intentionally to bit bang, but the IBM PC had always used a chip called a UART, and the name of the PC's chip has attached itself to the port in many cases. Much like how tty is nearly synonymous with 'console', despite almost nobody having seen a teletype in years and a teletype not being required for a console.
    – Tommy
    Nov 14, 2017 at 4:14
  • 1
    @Tommy: Both the VIC-20 and C64 used software-based bit-bang UARTs.
    – supercat
    Nov 14, 2017 at 16:58
  • @supercat yes, but unintentionally. The VIA has that analogue race condition with clock phase and the shifter, and as I understand it, a CIA trace is missing on the C64 board. But, regardless, those are the chips which definitely are not UARTs which are electrically responsible for those serial ports.
    – Tommy
    Nov 14, 2017 at 17:07
  • @Tommy: The VIA and CIA both had synchronous serial ports. I don't think either had the logic necessary to watch for a start bit and generate a bit clock that was delayed half a bit period from the falling edge. The VIA and CIA serial ports were intended to communicate with synchronous serial peripherals; I don't think they were ever intended for use as UARTs.
    – supercat
    Nov 14, 2017 at 17:25
3

Adding to the other answers:

Other than distinguishing pure asynchronous operation from asynchronous/synchronous transmission/receive (opposing the term USART), the term could also have been used for other reasons:

A denomination of UART serial port could distinguish your product from a non-UART serial port as "has some chip that relieves the CPU from the burden of transmitting bits".

The Sinclair ZX Spectrum with its IF1 had, for example, a (asynchronous) serial port that was bit-banged by the CPU, so kept the CPU pretty busy while transmitting/receiving, which also limited the maximum speed at which this port could operate (while keeping hardware cost at a limit).

UARTs instead were known to reach acceptable bandwidth transmissions and known to relieve the CPU from bit transmission and were thus a unique selling point.

1
  • My family having first acquired a PC in the 486 era, having a 16550 rather than an 8250 was something some clone manufacturers still bothered to advertise. I guess that in the not-quite-yet-internet era others were still cheaping out. But I think this adds credibility to your argument, even if I didn't turn up until the sales boast had evolved from "we're asynchronous" to "we're even more asynchronous than those guys".
    – Tommy
    Nov 15, 2017 at 15:49
2

The UART is one of the functional blocks required to implement what was traditionally called a serial port (aka RS-232 port) - the other one is an RS-232 line driver / receiver. Originally the UART and line driver/receiver were separate chips, but more recently they are just blocks within a chipset.

So the serial port is the entire set of functionality (or the connector, depending on how you view things :)) while the UART is one of the pieces that makes it work.

1
  • Welcome to Retrocomputing Stack Exchange. Please read the tour. This answer is true as of a certain point, but it might be useful to note that all of the lines were controlled "manually" by the program in the days before UARTs were common in hardware.
    – wizzwizz4
    Nov 15, 2017 at 19:10
1

Your article is wrong. A UART is a specific device (universal asynchronous receiver/transmitter) dealing with all the timing (and some buffering and framing error detection) of an asynchronous serial line transmission. They are usually employed for serving serial lines since they take load and timing requirements off the main CPU.

However, they do not include the line level drivers: those are conspicuously absent from your diagram. For RS232, eventually Maxim came up with notorious drivers working at 5V and including the respective switching voltage multipliers/inverters at a time switching drivers were kind of unusual (outside of memory chips where they started being a thing with, uh, 4164 dynamic RAM chips and 2716 EPROMs? since the 12V and -5V requirements of earlier RAM and EPROM chips were becoming a nuisance because of pin count and PCB layout).

0
1

A UART is a Univeral Asynchronous Receiver and Transmitter. It is an electronic circuit which handles communication over an asynchronous serial interface - very often an RS232 interface.

Serial Port or RS232 is a specification for serial communications between a DCE and DTE (For example communication between computer and modem); it defines electrical characteristics, the 25-way 'D' connector and the various functions of the various signal lines.

2
  • 3
    There are many kinds of serial port besides RS232 and not all RS232 connectors are DB25, that was largely superseded by DB9.
    – Chenmunka
    Nov 16, 2017 at 10:36
  • @Chenmunka True, except, that the connector in use is a DE9. SCNR :))
    – Raffzahn
    Nov 16, 2017 at 13:48
0

Serial ports include line drivers, whereas UARTs are used to frame asynchronous data streams. UARTs precede line drivers.

"UART driver" is not even hardware -- it is software -- notice that it is part of the kernel in your diagram, so -- they are referring to the operating system there. In IBM PCs that ran DOS -- that was not the case. There were a couple of BIOS service calls in the firmware, but -- the 8250 style UART was not controlled by the "kernel" at all -- it was controlled largely by user written code, or a third party driver until DOS 5.0 / Win3.1 -- Many flavors of BASIC contained routines for serial communications at that time.

Your diagram also refers to TTYs -- teletypes -- which -- are primarily driven by RS-232 as well.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .