Buses: The Hidden Language of Microprocessors

GPIO, UART, I²C, SPI - and why the fast, no-drama SPI bus keeps winning in real prototypes.

When you think about microprocessors, it’s easy to picture the flashy stuff - blinking LEDs, motor drivers, maybe even that one sensor that took you three days to finally read properly.

But beneath all that activity lies the quiet backbone of every embedded system: the bus. It’s the way chips talk to each other - and just like human conversations, not every bus is equally polite, efficient, or easy to get along with.

A Quick Bus Tour

If you’ve ever wired up a sensor, display, or memory chip, you’ve probably met a few of these:

GPIO (General Purpose Input/Output)

The “hand signals” of the digital world - simple, direct, but limited. Great for toggling LEDs or reading buttons, but try having a deep conversation this way and you’ll run out of fingers fast.

UART (Universal Asynchronous Receiver/Transmitter)

The small-talker. One line in, one line out, and everyone takes turns speaking. Perfect for debugging or connecting serial devices, but slow and not built for crowded rooms.

I²C (Inter-Integrated Circuit)

A tidy shared bus that lets multiple devices share the same two wires - clock and data. Elegant in concept, but like a polite dinner party, everyone has to wait their turn and must be called by name (address). Start talking out of order, and chaos ensues.

SPI (Serial Peripheral Interface)

Our personal favourite. Fast, simple, and unapologetically direct. Each device gets its own “attention line,” and when it’s your turn, you talk fast. With separate lines for data in, data out, and clock, SPI doesn’t waste time negotiating - it just moves bits.

CAN (the vehicle network champion), USB, PCIe, and the rest

The big leagues. These handle error checking, arbitration, and high-speed data - but come with complexity and overhead that can feel like overkill when you just want to read a sensor. CAN in particular shines in noisy, distributed environments (like vehicles) where you need robust delivery and fault handling.

Why SPI Wins Our Hearts

SPI is the kind of protocol that gets things done without unnecessary ceremony. No address decoding. No shared line arbitration. Just you, your clock, and a clear sense of direction.

SPI bus showing controller with shared clock/data lines and per-device chip selects
SPI layout in practice: shared SCLK/MOSI/MISO, one chip-select per peripheral.

1. Speed

SPI clocks can scream - 10 MHz is typical, 50 MHz isn’t crazy. When you’re pushing pixels to a display or streaming ADC data, that matters.

2. Simplicity

Every device has a chip-select line. Pull it low, start the clock, and data flows. It’s as direct and deterministic as it gets.

3. Full-duplex

Data in and data out happen simultaneously. It’s like a conversation where both people actually listen and speak at once.

4. Debuggability

Put a logic analyzer on it and you can literally see the conversation. Every bit, every edge. There’s something deeply satisfying about that kind of transparency.

5. Scalability (with one small caveat)

You can add more chip-selects to handle more devices (though you’ll need a new GPIO pin for each), or even chain devices using shift registers and multiplexers to expand your bus. SPI bends but rarely breaks.

The Design Perspective

From a design standpoint, SPI hits a sweet spot between performance and simplicity. It’s predictable enough for tight timing loops, but flexible enough to glue together wildly different devices - displays, DACs, SD cards, thermocouples, and more - without resorting to heavyweight protocols.

It’s a reminder that sometimes the best design is the one that just works, not the one that tries to solve every problem at once.

In the End

Every bus has its place. I²C is great for housekeeping, UART for logs, CAN for noisy environments. But when we're prototyping something new - when we need reliable, high-speed data movement without the overhead - We reach for SPI.

It’s the design equivalent of the kotatsu: warm exactly where it’s needed. Efficient, elegant, and deeply human in its simplicity.


Related reading: GD&T - The Designer’s Steering Wheel