A very concise and clear explanation of the two protocols and differences between them. Good article summarizing the origins if the two protocols and their use within embedded systems. A required reading for anyone wanting to use these in their projects.

Both SPI and I2C offer good support for communication with low-speed devices, but SPI is better suited to applications in which devices transfer data streams, while I²C is better at multi master ‘register access’ application.

In short…

  • SPI is faster; it can operate at a much higher frequency than I2C(100-400kHz is typical).
  • I2C only requires 2 lines while SPI needs four lines (3 lines for bi-directional communication and an additional slave select for each device on the bus).
  • I2C is more complex and though extendable; by having multiple masters and slaves.
  • If you are using a microcontroller, preferable if it also has an I2C controller.

Read more at Introduction to I²C and SPI protocols « Byte Paradigm – Speed up embedded system verification.

Here’s another article further elaborates giving specific examples in context of modern microprocessors.