I²C vs SPI vs UART: Choosing an Embedded Serial Interface (Wires, Addressing, Speed)
Which serial interface for connecting peripherals to an MCU? Three axes decide: wire count, how many devices share the line (addressing vs one CS each), and speed. UART is two devices point-to-point (async, no clock); I²C is a row of addressable low-speed devices on two wires (needs pull-ups); SPI trades one CS per device for high speed. This guide breaks each down and maps to FMD FT24C, GigaDevice GD25Q and WIZnet WizFi360.
A one-line mental model + three axes
When you connect peripherals to an MCU, “which serial interface” really comes down to three axes: wire count (pin budget), how many devices share the line (addressing vs one CS each), and how fast you need to go. Start with a one-line mental model: UART is “two devices talking point-to-point” (no clock, no addressing); I²C is “a whole row of addressable low-speed devices on two wires”; SPI is “add one chip-select (CS) line for high speed — one CS per device.” Below we take each apart, then map straight to the common parts for that interface.
UART: two devices, point-to-point
UART is an asynchronous interface: just two wires (TX, RX) cross-connected, with no clock line — both ends agree on the same baud rate beforehand and align sampling with the start bit before each byte; a baud-rate mismatch yields garbage. It is fundamentally “two devices point-to-point” — no master/slave, no addressing, not a bus you can hang many devices on — and it’s full-duplex (separate TX/RX carry data both ways at once). Speed is modest (commonly 9600–115200 bps, up to the low hundreds of kbps in practice). So UART suits module-to-module links and debug consoles — for example a Wi-Fi module driven by AT commands over UART, like WIZnet’s WizFi360.
I²C: a row of addressable devices on two wires
I²C uses two wires (SDA data, SCL clock) and is a synchronous, addressable multi-drop bus: each device has its own address, and the master picks the target by address on the shared two wires — so “add devices without adding wires” is its big draw (7-bit addressing can theoretically host ~127 devices, with practical limits from bus capacitance). The costs are lower speed and half-duplex, and because SDA/SCL are open-drain they require external pull-up resistors to return the lines high (the faster the speed and heavier the load, the smaller the pull-up usually needs to be). Speed grades: Standard 100kHz, Fast 400kHz, Fast-mode Plus 1MHz, High-speed 3.4MHz. Best for: a row of slow, addressable devices on two wires — EEPROM, RTC, sensors. Matching parts: I²C EEPROM → FMD FT24C series (2-wire, 2K–1Mb, 1.8–5.5V); I²C RTC → Micro Crystal RV series (RV-3028-C7, ultra-low 45nA).
SPI: one CS per device for high speed
SPI uses four wires (MOSI master-out, MISO master-in, SCK clock, CS chip-select), is synchronous and full-duplex, and is the fastest of the three — the protocol itself defines no speed ceiling, tens of MHz is routine, and real parts run to 133MHz. It uses no addressing; instead there is “one dedicated CS per device”: MOSI/MISO/SCK are shared, and the master pulls the target’s CS low to select it. The cost is that more devices strain the CS pin budget. Best for: high speed with few devices (often just one or two) — NOR/NAND Flash, displays, fast ADCs. Matching parts: SPI NOR Flash → GigaDevice GD25Q series (single/dual/quad SPI, 2Mb–256Mb, up to 133MHz); SPI NAND → GigaDevice GD5F (Gb-class, with on-die ECC).
How to choose (mapped to parts)
The one-line decision: only two devices, or debug / a comms module → UART (just match the baud rate; Wi-Fi AT-command module WizFi360). A row of slow, addressable devices on two wires, saving pins → I²C (add devices without wires, remember the pull-ups; EEPROM FT24C, RTC RV series). High speed with few devices → SPI (one CS per device, speed traded for pins; NOR GD25Q, NAND GD5F). The three-axis trade-off in one sentence: many slow devices, save wires → I²C; need speed, few devices → SPI; only two things talking → UART. JLink Technology is an authorized distributor for GigaDevice, FMD, Micro Crystal and WIZnet, supplying the matching parts for each interface — I²C (FT24C EEPROM, RV RTC), SPI (GD25Q NOR, GD5F NAND) and UART (WizFi360 module); tell us your device types, counts and speed needs and we will help pick the interface and parts, and reply with samples, datasheets and pricing.
Products mentioned
FT24C Series I²C EEPROM (2K ~ 256K bit)
The FT24C series are standard I²C serial EEPROMs spanning 2K to 256K bit (FT24C02 ~ FT24C256), compatible with industry-standard pinouts, with a wide 1.8V ~ 5.5V supply — widely used to store configuration parameters, calibration data, and serial numbers.
GD25Q128 128Mbit SPI NOR Flash
The GD25Q128 is a 128Mbit (16MB) serial SPI NOR Flash, 2.7~3.6V supply, up to 133MHz, with Dual/Quad I/O, 4KB sector and 32/64KB block erase, and 256-byte page program. In SOP8 / WSON8 with a standard JEDEC pinout and command set, it is a common second source for the Winbond W25Q128.
WizFi360 Industrial-Grade Wi-Fi Module
The WizFi360 is a cost-effective industrial-grade Wi-Fi module from WIZnet, compliant with IEEE 802.11 b/g/n and supporting Station, SoftAP, and combined modes. Add Wi-Fi to any MCU over UART with AT commands; it has a built-in TCP/IP stack and an industrial -40~85°C operating range.
Need these components or design help?
JLink Technology provides parts, datasheets, and engineering support.
Request a Quote