Module 88 min

UART: Clockless Asynchronous Serial

No clock wire, agreed baud rate, simple framing

UART, the Universal Asynchronous Receiver/Transmitter, is the classic point-to-point serial link. Its defining feature is that it has no clock wire at all, which makes it the odd one out among these protocols.

No shared clock

SPI and I2C send a clock alongside the data. UART does not. Instead both ends are configured in advance to the same baud rate (bits per second), and each side uses its own internal clock to time the bits. Because there is no shared clock, it is called asynchronous.

The frame

Since there is no clock, the data itself must tell the receiver where a byte begins and ends. That is the frame:

  1. The line idles high. A start bit (a low) tells the receiver a byte is coming and starts its timing.
  2. The data bits follow, usually 8, sent least significant bit first.
  3. An optional parity bit allows a simple error check.
  4. One or more stop bits (high) end the frame and return the line to idle.

Two wires, point to point

A UART link is typically just TX and RX between two devices: each side transmits on its TX and listens on its RX. There is no addressing and usually only two endpoints, which keeps it simple.

The three serial protocols side by side

SPII2CUART
Wires4 (+1 select per slave)2 (SDA, SCL)2 (TX, RX)
ClockShared (SCLK)Shared (SCL)None (agreed baud)
DevicesMany (one select each)Many (addressed)Two (point to point)
SpeedFastestModerateSlowest
AcknowledgeNonePer byteNone (optional parity)
Pro tip

the one-line memory aid: SPI is fast with more wires, I2C is two wires and addressable, UART has no clock and just talks point to point at an agreed baud rate. If both ends of a UART are set to different baud rates, you get garbage - that mismatch is a favourite interview gotcha.