UART Protocol
UART framing, baud-rate generation, oversampling and VHDL implementation points.
What is UART?
UART (Universal Asynchronous Receiver/Transmitter) is an asynchronous serial protocol: unlike SPI and I2C, there is no shared clock between transmitter and receiver. Synchronization is achieved by a predefined communication rate called the baud rate (bits per second).
Key characteristics:
- Asynchronous: no shared clock
- Full-duplex: TX and RX are independent lines
- Point-to-point: 2 devices only (no multi-slave bus)
- Baud rate: both sides must be configured to the same rate
UART Signals
| Signal | Description |
|---|---|
| TX | Transmit - data sent |
| RX | Receive - data received |
| GND | Common ground (required) |
At rest, the TX line is high (logic '1', called "mark").
UART Frame
A standard UART frame (8N1 - 8 data bits, no parity, 1 stop bit):

- Start bit: low level for 1 bit period - signals the beginning of the frame
- Data bits: 5 to 9 bits, LSB first (standard convention)
- Parity bit (optional): even, odd, or none
- Stop bit(s): high level for 1 or 2 bit periods - end of frame
Baud Rate and Clock Divider
The baud rate determines bit duration: T_bit = 1 / baud_rate
| Baud Rate | T_bit |
|---|---|
| 9600 bps | 104.2 µs |
| 115200 bps | 8.68 µs |
| 1 Mbps | 1 µs |
To generate the baud rate from a system clock, calculate a divider:
DIVIDER = SYS_CLK / BAUD_RATE