What is Serial Peripheral Interface?
[[File:SPI_three_slaves.svg|link=//upload.wikimedia.org/wikipedia/commons/thumb/f/fc/SPI_three_slaves.svg/350px-SPI_three_slaves.svg.png|right|thumb|Typical SPI bus: master and three independent slaves|251x251px]]The '''Serial Peripheral Interface''' ('''SPI''') is a synchronous [[serial communication]] interface specification. It is used for short-distance communication, primarily in [[Embedded system|embedded systems]]. SPI devices communicate in full duplex mode using a master-slave architecture. The master (controller) device originates the [[:en:Frame_(networking)|frame]] for reading and writing. The SPI may be accurately described as a synchronous serial interface.<ref>{{cite web|title=What is Serial Synchronous Interface (SSI)?|url=https://digital.ni.com/public.nsf/allkb/862567530005F09C862566BE004E469D|access-date=2015-01-28}}</ref> But it is different from the Synchronous Serial Interface (SSI) protocol. == Developer == The interface was developed by [[:en:Motorola|Motorola]] in the mid-1980s. Later it has become a [[De facto|''de facto'' standard]]. == Pros and cons == === Advantages === * Full duplex communication in the default version of this protocol * Push-pull drivers (as opposed to open drain) provide good signal integrity and high speed * Higher throughput than [[I²C]] or SMBus. Not limited to any maximum clock speed, enabling potentially high speed * Complete protocol flexibility for the bits transferred ** Not limited to 8-bit words ** Arbitrary choice of message size, content, and purpose * Simple software implementation === Disadvantages === * Requires more pins on IC packages than I²C, even in the ''[[:en:Serial_Peripheral_Interface#Three-wire_serial_buses|three-wire]]'' variant * No in-band addressing; out-of-band chip select signals are required on shared buses * SPI does not support hot swapping (dynamically adding nodes) * Some variants like dual SPI, quad SPI, and three-wire serial buses defined below are half-duplex. == Applications == [[File:ATI_Radeon_X1300_256MB_-_Atmel_25