Serial Communication Protocol
I²C vs SPI: is there a winner?
Let’s compare I²C and SPI on several key protocol aspects:
- Bus topology / routing / resources:
I²C needs 2 lines and that’s it, while SPI formally defines at least 4
signals and more, if you add slaves. Some unofficial SPI variants only
need 3 wires, that is a SCLK, SS and a bi-directional MISO/MOSI line.
Still, this implementation would require one SS line per slave. SPI
requires additional work, logic and/or pins if a multi-master
architecture has to be built on SPI. The only problem I²C when building a
system is a limited device address space on 7 bits, overcome with the
10-bits extension.
From this point of view, I²C is a clear winner over SPI in sparing
pins, board routing and how easy it is to build an I²C network.
- Throughput / Speed:
If data must be transferred at ‘high speed’, SPI is clearly the
protocol of choice, over I²C. SPI is full-duplex; I²C is not. SPI does
not define any speed limit; implementations often go over 10 Mbps. I²C
is limited to 1Mbps in Fast Mode+ and to 3.4 Mbps in High Speed Mode –
this last one requiring specific I/O buffers, not always easily
available.
- Elegance:
It is often said that I²C is much more elegant than SPI, and that
this last one is a very ‘rough’ (if not ‘dumb’) protocol. Actually, we
tend to think the two protocols are equally elegant and comparable on
robustness.
I²C is elegant because it offers very advanced features – such as
automatic multi-master conflicts handling and built-in addressing
management – on a very light infrastructure. It can be very complex,
however and somewhat lacks performance.
SPI, on the other hand, is very easy to understand and to implement
and offers a great deal of flexibility for extensions and variations.
Simplicity is where the elegance of SPI lies. SPI should be considered
as a good platform for building custom protocol stacks for communication
between ICs. So, according to the engineer’s need, using SPI may need
more work but offers increased data transfer performance and almost
total freedom.
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.
Used properly, the two protocols offer the same level of robustness
and have been equally successful among vendors. EEPROM
(Electrically-Erasable Programmable Read-Only Memory), ADC
(Analog-to-Digital Converter), DAC (Digital-to-Analog Converter), RTC
(Real-time clocks), microcontrollers, sensors, LCD (Liquid Crystal
Display) controllers are largely available with I²C, SPI or the 2
interfaces.
Conclusions.
In the world of communication protocols, I²C and SPI are
often considered as ‘little’ communication protocols compared to
Ethernet, USB, SATA, PCI-Express and others, that present throughput in
the x100 megabit per second range if not gigabit per second. Though, one
must not forget what each protocol is meant for. Ethernet, USB, SATA
are meant for ‘outside the box communications’ and data exchanges
between whole systems. When there is a need to implement a communication
between integrated circuit such as a micro-controller and a set of
relatively slow peripheral, there is no point at using any excessively
complex protocols. There, I²C and SPI perfectly fit the bill and have
become so popular that it is very likely that any embedded system
engineer will use them during his/her career.
If
you enjoyed this post plz let us know your views via comments.
This helps us to do much more better.
Thankyou.
This helps us to do much more better.
Thankyou.
0 comments:
Post a Comment