勛圖tv 繚 ENGINEERING GUIDE
SPI vs I2C vs UART: Choose the Interface for the Job
SPI, I2C and UART solve different board-level communication tasks. The useful comparison starts with the devices you need to connect, their electrical interfaces, the amount and timing of data, and the pins available. A ranking based only on a generic maximum speed can select an interface that is inconvenient or unsupported by the actual components.
This page compares implementation decisions and provides a small transaction-time calculator. Enter a supported clock or baud rate and an explicit payload. The result is a wire-time estimate for the selected model, not measured application throughput. For a physical bridge between a computer and a logic-level serial port, use the separate USB-to-UART guide.

Compare the transaction, not just the protocol name
SPI commonly uses a controller-generated clock, a select signal and one or more data paths. The exact device defines the command format, clock mode, allowed frequency, timing and whether data is meaningful in both directions. A shared clock and data line arrangement still needs unambiguous device selection and compatible behavior when a target is not selected.
I2C uses addressed transactions on its shared bus. In the usual bidirectional modes, pull-ups and open-drain behavior make bus loading a design concern. Multiple devices can share the same two signal lines, but repeated addresses, voltage compatibility and clock-stretching support can limit an otherwise convenient arrangement. Count the devices and address options before assuming expansion is effortless.
A conventional UART link sends framed characters without a separate clock wire. Both endpoints need compatible baud and framing settings. Logic-level UART pins are not an RS-232 or RS-485 physical interface. A connector labeled serial does not identify voltage levels, polarity or protection. Those electrical requirements belong in the interface drawing, not only in firmware configuration.
Choose by the connection task
| Question | SPI | I2C | UART |
|---|---|---|---|
| Shared connection | Selection and inactive-target behavior need a plan. | Address allocation and pull-up loading need a plan. | A conventional link connects two endpoints; other topologies need additional design. |
| Timing basis | External clock plus exact device mode and timing. | Clocked transaction with acknowledgement and possible stretching. | Independent endpoint timing with agreed baud and framing. |
| Useful fit | Device-defined synchronous transfers and acquisition paths. | Addressed sensors and configuration devices on a suitable shared bus. | Service consoles and framed point-to-point messages. |
| Do not assume | All targets accept the same mode or release a shared output. | Two signal wires make arbitrary cable lengths or voltages safe. | A logic UART header is electrically equivalent to RS-232. |
Serial transaction time comparison
Serial transaction time comparison
Use the current inputs and keep the assumptions
Load the example to learn the worksheet, then clear it before entering your project values. Blank fields are not silently converted to zero. Units and selected conventions belong to the result, so review them together with the numbers. Editing any input invalidates the previous result and disables its download until you calculate again. Edited example data remain labeled as an illustrative example.
This tool runs locally on the values you enter. It does not open a schematic, select approved components, measure signals or inspect a physical board. Keep the exact component documents and a record of measurements with the design. Downloading the text report does not send an enquiry or populate the Contact form. Attach it manually if it helps explain a specific engineering question; completing the worksheet is optional.
| Input | What to establish before using it |
|---|---|
| Review reference | Use a nonconfidential revision reference. |
| Transaction model | Choose the actual transaction form. |
| Payload bytes | For I2C, excludes the one address byte added by this model. |
| Clock or baud 繚 Hz / bit/s | Use your device-supported clock or UART baud, not a generic protocol maximum. |
| Additional clocks / wire bits | SPI command, address and dummy bits; extra framing outside the selected model. |
Translate the payload into clocks or wire bits
The SPI model counts eight clocks per payload byte plus an entered allowance for commands, addresses, dummy cycles or other overhead. It assumes one data bit per clock on the modeled path. Dual, quad or double-data-rate transfers require a different model. Full-duplex operation can transfer simultaneously, but only when both data streams are useful to the application.
The I2C model is deliberately narrow: one seven-bit-address write transaction, with one address byte and an acknowledgement clock for every byte. For N payload bytes, it counts 9 �� (N + 1) clocks. It does not include START/STOP timing, repeated starts, device register-address bytes unless included by you, clock stretching or time spent waiting in software. A combined register read should be broken into its actual phases.
For UART 8N1, each eight-bit payload byte consumes ten wire bits: a start bit, eight data bits and a stop bit. At 115200 bit/s, sixteen bytes occupy about 1.389 milliseconds before additional protocol overhead or idle gaps. The example is an arithmetic comparison, not a recommendation for a particular module, cable or operating system.
| Review item | What to establish |
|---|---|
| Endpoint support | Exact part, interface mode, voltage levels and timing conditions. |
| Transaction | Command, address, payload, acknowledgements, gaps and device processing time. |
| Topology | Select lines, unique addresses, pull-ups, loading and reference paths. |
| Software | Framing, timeout, retry, buffering and reset recovery. |
| Evidence | Documented transaction and measured capture at the intended operating condition. |
Work one example and change one assumption
Suppose a controller sends sixteen bytes. At a declared SPI clock of one megahertz and no additional clocks, the model returns 128 microseconds. A simple I2C write at 400 kilohertz uses 153 clocks and takes 382.5 microseconds before the excluded timing. A UART transfer at 115200 bit/s with 8N1 framing takes approximately 1388.9 microseconds. These are different declared operating rates, not universal protocol limits.
Now add an eight-bit SPI command and twenty-four address bits. Its modeled transfer becomes 160 clocks, or 160 microseconds at the same clock. If the I2C device also needs a register-address byte, include that byte in the transaction accounting rather than treating all sixteen bytes as application data. An extra software pause can outweigh these wire-time differences in a slow polling application.
Use the worksheet to test sensitivity: payload length, supported rate and added overhead. Then compare a captured transaction or documented device sequence with the assumptions. If a measured transfer is longer, identify which excluded portion explains the difference. Do not raise the clock merely to make an ideal estimate match a performance target that includes host latency or sensor conversion time.

Budget pins, addresses and electrical loading
Pin economy is not the same as implementation simplicity. SPI may need a separate select signal for each target, while an I2C bus may need an address-changing option or a bus switch when devices collide. UART often serves a point-to-point connection, though the wider system can use transceivers and additional protocols. State the intended topology explicitly.
For I2C, include all fitted pull-ups when calculating the effective resistance. Parallel resistors can become too strong for a device to pull low, even though each module works independently. The bus capacitance includes device pins, board routing, connectors and relevant wiring. The sensor integration worksheet checks an entered pull-up range against stated sink-current and rise-time limits.
For SPI and UART, review the real edge rates, reference path and receiver thresholds. A device operating at one supply may not tolerate another device's output voltage. A level translator has direction, loading and timing limitations of its own. Keep its documentation with the chosen interface rather than treating translation as a generic two-way wire.
Include timing, firmware and recovery behavior
A sensor can offer a fast serial port while producing new data much more slowly. Conversely, a burst-producing device can overrun a software service routine despite a modest average data rate. Record conversion time, burst length, service intervals and buffering separately. The FPGA USB interface page provides a buffer-budget model when a downstream host cannot drain data continuously.
Define what happens when a transaction fails. Address acknowledgement, an application checksum, a timeout and a valid sensor value answer different questions. A received character or acknowledgement does not prove that the final application state is correct. Choose retry behavior that avoids repeatedly applying a command whose first execution may already have succeeded.
Consider startup and partial power. A peripheral can be held in reset while the controller runs, or remain powered while the controller is off. Check whether signals can back-power an unpowered device, whether outputs release the shared line, and how the firmware reinitializes after a reset. These interactions should be test cases, not assumptions made after the first working demonstration.
Choose a practical next step for the board
Create a small interface contract for every connection: exact endpoint parts, pin names and physical identifiers, voltage domain, protocol settings, supported timing, startup behavior and error response. Include the matching firmware configuration. A scope or logic-analyzer capture should be labeled with the board revision and conditions so it can support a later layout or component change.
For assembly review, the useful files remain the schematic, board data, BOM and test requirements. Describe which interfaces need fixture access and what constitutes a valid functional response. A manufacturing team cannot infer an application's timeout, address allocation or expected message from a connector footprint alone.
Select the simplest supported interface that meets the complete task with suitable margin. A low-data-rate configuration register often values shared-bus convenience; a continuous acquisition path may value deterministic timing and buffering; a service console may value straightforward UART access. The comparison table and calculator help expose those tradeoffs without declaring one protocol universally superior.
Validate an interface from both ends
Compare the transmitter specification with the receiver requirement under the same supply and temperature conditions. Include connectors, protection devices, translators and relevant wiring in the path. A nominal clock or baud rate is only one part of the contract; input thresholds, timing, loading and partial-power behavior can determine whether the link is reliable.
Test a representative transaction with known data, then exercise the conditions that stress the application: long bursts, delayed service, reset recovery and an unavailable peripheral. Keep electrical measurements separate from protocol decoding. A decoder displaying plausible bytes does not establish noise margin, and a clean waveform does not prove the application interpreted the message correctly. Record each observation with the exact settings and revision so it remains useful after a later component or firmware change.
Standards, source context and limits
The referenced manufacturer documentation supports specific devices, interfaces or design methods. Apply the version and operating conditions appropriate to the actual part. A similar product name is not evidence that pin functions, voltage tolerance, startup behavior or package dimensions match. Worked examples illustrate reasoning and arithmetic; they are not released schematics or independent hardware test results.
For fabrication scope and the agreed construction requirements, see PCB manufacturing.