UART · Module 1
UART vs Other Interfaces: Choosing the Right Link
Serial interfaces differ first in where the receiver's timing comes from, then in what organises a shared medium — and capability is paid for in what the system must already provide. A question order for choosing between UART, SPI, I2C, CAN, USB and Ethernet.
Chapter 1.5 closed on an unresolved trade: the same absent requirements that let UART work during boot make it wrong wherever throughput, sharing, self-description or guaranteed delivery matter. This chapter turns that into something an architect can act on.
The usual way this comparison is presented — a table with a speed column — is close to useless, because speed is the axis along which the answer is most often already obvious and least often the reason for the decision. Nobody chooses between UART and Ethernet on throughput grounds; the situations where both are plausible are decided by something else entirely.
What actually separates these interfaces is structural, and Module 1 has already built the deepest of the axes. This chapter names them, places six interface families along them, and turns the result into a question order.
1. The Axis Module 1 Already Built
Chapter 1.2 established the most consequential question one can ask about a serial link: where does the receiver's sampling reference come from? Three answers exist, and essentially every serial interface belongs to one of them.
The clock is sent. A dedicated conductor carries the sampling reference, generated alongside the data. SPI and I²C work this way. The receiver is told when to sample, so its logic can be modest — but a conductor is spent, and the reach is bounded by how well the clock–data relationship survives the journey rather than by the signalling alone.
The rate is agreed and no clock is sent. Both ends are configured to the same nominal rate in advance and the receiver constructs its own reference. UART works this way, and so does CAN, which additionally resynchronises from edges within a frame. No conductor is spent, and the cost is that a configuration mismatch corrupts data silently, with no mechanism in the link to detect the disagreement.
The clock is embedded in the data. The transmitter encodes the stream so that it is guaranteed to contain transitions, and the receiver recovers a timing reference from those transitions. USB and Ethernet work this way. It scales to rates the other families cannot approach and makes links largely self-describing — at the cost of line coding, recovery hardware, and a start-up sequence that must complete before any data moves.
2. The Second Axis: What Organises a Shared Medium
Clocking decides how one receiver interprets one transmitter. The second axis decides what happens when more than two devices are involved, and it separates the families that the first axis groups together.
A shared medium needs three things, and an interface either defines them or leaves them to a layer above:
Addressing — some way for a transmission to identify its intended recipient. SPI does this out-of-band with a per-device select conductor. I²C, CAN, USB and Ethernet all carry an address or identifier inside the transmission itself. UART carries none.
Arbitration — some way to decide who may transmit. SPI has a single controller that simply decides. I²C and CAN both define genuine multi-controller arbitration resolved on the wire. USB is host-directed: devices transmit when asked. Ethernet on modern switched links largely sidesteps the question by giving each link two endpoints. UART defines nothing.
Error handling — detection, and a defined response. CAN is the strongest here, with frame-level acknowledgement, error signalling and fault confinement built in. USB and Ethernet detect errors and, at their own or a higher layer, retry. UART offers weak per-frame detection and no retry at all.
Chapter 1.4 showed that an electrical layer can make sharing physically possible for UART while supplying none of these three — which is exactly why a protocol like an industrial fieldbus has to be layered on top. The interfaces that define these things natively have already paid for them in complexity. Choosing one of them because sharing is needed is not a compromise; choosing UART and building the three yourself sometimes is.
3. The Comparison
Every row below is a starting hypothesis, generalised over a family with real variation inside it.
| Interface | Clocking model | Typical signal conductors | Topology and arbitration | Throughput class | What the system must already provide |
|---|---|---|---|---|---|
| UART | Rate agreed in advance; no clock sent | 2 (one per direction) | Two endpoints by default; sharing needs a different electrical layer and a protocol above | Low | Two matching configuration values |
| SPI | Clock sent by the controller | 3 shared + 1 select per device | One controller, several targets, selected out-of-band; no arbitration needed | Moderate to high for a board-level link | A controller that decides; a select line per device |
| I²C | Clock sent by the controller, targets may stretch it | 2 shared | Many devices on one pair; in-band addressing; genuine multi-controller arbitration | Low to moderate | Addresses assigned in advance; pull-ups |
| CAN | Rate agreed in advance; resynchronised within a frame | 2 (one differential pair) | Multi-controller bus; priority arbitration on the wire; acknowledgement and fault confinement | Low | A controller with arbitration and error handling; bit-timing configuration |
| USB | Clock embedded in the data | 2 (one differential pair) + power | Host-directed tree; devices enumerate and are addressed by the host | High | A host, a driver stack, enumeration, and working power |
| Ethernet | Clock embedded in the data | 2 to 8 conductors depending on variant | Point-to-point links into switches; addressing and delivery handled by the stack above | Very high | A MAC, a PHY, link negotiation, and a protocol stack |
Read the last column as the chapter's argument. It ascends roughly with capability, and each entry is a precondition that can fail. An interface requiring enumeration and a driver stack is unavailable in exactly the situation Chapter 1.5 described.
4. A Question Order
The table becomes a procedure when the columns are applied in the order that eliminates most effectively. Asking these in sequence resolves most decisions in three questions.
One — must the link work before the system does? If the interface is a boot console, a diagnostic channel or a bring-up aid, availability dominates everything, and the families requiring enumeration, negotiation or a driver stack are eliminated first. This question alone frequently ends the discussion.
Two — how many devices share the medium, and who decides who talks? Two endpoints leave every family viable. More than two eliminates plain UART unless a protocol layer is being built deliberately, and makes the interfaces with native addressing and arbitration the natural starting point.
Three — does the required rate exceed what remains? A threshold test, per the callout above. It usually eliminates nothing that questions one and two have not already settled, which is precisely why leading with it produces poor decisions.
Then the secondary considerations: distance and electrical environment, which are a physical-layer question (Chapter 1.4) rather than a framing one; the software stack the target platform already has; and the verification and bring-up cost of the interface itself.
5. Three Decisions, Worked
A sensor on the same board, read a few times a second, with pins scarce. Question one does not apply. Question two: two endpoints. Question three eliminates nothing. Everything is viable, so the decision falls to secondary factors — and pin cost points at I²C, which shares two conductors across many devices, over SPI, which spends a select conductor per device. If the sensor happens to offer only one of them, the decision was already made by the part. This is the common case where the interface the component provides legitimately outranks architectural preference.
A status channel from an FPGA to an engineer's laptop. Question one dominates: this must work when the design does not, which eliminates anything needing negotiation inside the FPGA. Question two: two endpoints. Question three: a human reads the output, so the rate requirement is trivial. UART, and the USB complexity is absorbed by a bridge that the FPGA never sees (Chapter 1.5). Notice that the link the laptop sees is USB — the choice was about which side of the bridge the design sits on.
Twenty nodes distributed around a vehicle, exchanging short messages, where a failing node must not take the system down. Question one does not apply. Question two is decisive and rules out plain UART: many devices, no central controller, and a requirement — fault confinement — that is a protocol feature rather than a wiring one. CAN defines priority arbitration, acknowledgement and fault confinement natively. Building those on UART over RS-485 is possible (Chapter 1.4) and means implementing and verifying what CAN already specifies.
6. Where the Comparison Stops Being Useful
Three honest limits, because a comparison chapter that does not state them teaches overconfidence.
Family names hide enormous variation. "SPI" covers arrangements differing in edge conventions, data width and transfer structure; "Ethernet" spans conductor counts, reach and rate classes that have little in common. Any row above can be wrong for a specific part, and the table is a hypothesis to check rather than a fact to cite.
The component often decides. A sensor offering one interface has settled the question. Architectural preference matters when designing both ends, and at the system's boundaries it frequently does not apply at all.
Systems use several, and the interesting engineering is at the boundaries. A real product has a high-rate link for data, a low-rate one for control, and a diagnostic channel that works when the others do not. The recurring question is therefore rarely "which one" but "which one here" — and the bridges between them, like the USB-to-serial bridge in Chapter 1.5, are where the layering from Chapter 1.4 earns its keep.
7. Understanding Check
8. Summary
Serial interfaces are not points on a speed scale. They differ first in where the receiver's timing comes from, and the three answers — the clock is sent, the rate is agreed in advance, the clock is embedded in the data — order the field better than any performance figure. Each step along that order removes a conductor and adds logic, which means it also measures what must already be working for the link to exist.
The second axis is what organises a shared medium: addressing, arbitration and error handling. An interface either defines them or leaves them to a layer above. UART leaves all three, which is why sharing requires both a different electrical layer (Chapter 1.4) and a protocol built on top.
Those two axes produce a question order that settles most decisions before throughput is considered: must the link work before the system does; how many devices share the medium and who decides who talks; does the required rate exceed what remains. Throughput is a threshold test, not a ranking, and leading with it produces poor decisions.
The recurring conclusion is that capability and availability are in tension. An interface that can do more requires more to be true before it does anything, and the machinery buying that capability is also a verification and bring-up cost. UART sits at the low-capability, high-availability end — which is why it is the wrong choice for moving data and the right one for the channel that has to work when moving data is not yet possible.
Finally, the comparison has limits worth carrying: family names hide large variation, the component at one end often settles the question outright, and real systems use several interfaces at once, so the live question is almost always "which one here".
9. What Comes Next
Module 1 is complete. A UART is a converter between parallel data and timed line activity; its receiver builds a sampling reference from a configured rate, an event in the signal and its own clock; the link is two independent one-way conductors with a defined idle level; the electrical layer below is a separate choice that decides reach and topology; the whole arrangement survives because it asks almost nothing of the system around it; and it is chosen — or rejected — on availability and sharing long before speed.
Every one of those statements has depended on a question this module deliberately refused to answer: two clocks that were never synchronised and drift apart — how does that work at all?
Module 2 answers it. It establishes the bit as a unit of time, shows how a receiver reconstructs a bit grid from a single alignment event, quantifies how oscillator error accumulates across a frame, and derives where the sampling margin actually comes from. Everything after it — baud generation, receiver architecture, error behaviour — is built on that arithmetic.
Browse the full path on the UART tutorials index. For the comparison's nearest neighbour treated from the other side, SPI vs UART approaches the same clocking distinction from a forwarded-clock interface's perspective.
Continue learning
Related tutorials
- Related topic
What a UART Actually Is
Two digital systems need to exchange a small amount of data over very few wires, and no clock travels with it. A UART is the logic that answers that problem — it converts between locally meaningful parallel data and timed activity on a single line, and the timing agreement it depends on is what the rest of the curriculum builds.
- Related topic
Where UART Lives: Debug Consoles, Boot and Bring-Up
UART survives for a structural reason: its requirements are nearly zero, so it works at the moments when nothing else does yet. The FPGA debug link, the SoC boot console and board bring-up — and the two-pin integration surface a debug UART actually costs.
- Related topic
Frame Configurations: 8N1 and the Configuration Space
8N1 names three of the four choices a UART link depends on and omits the one most likely to be wrong. Reading the shorthand, computing what each configuration costs in intervals and line time, and why a longer frame spends timing margin as well as throughput.
- Related topic
Synchronous vs Asynchronous Serial Links
A forwarded clock is a sampling reference generated by the same source as the data. Remove it and the receiver must assemble one from a configured rate, an observable event in the signal, and its own local clock — the responsibility shift that turns a receiver into a state machine and shapes every UART design decision that follows.
Where this fits
Part of the UART curriculum.
