Serial Bus
SPI is what is known as a serial bus. In other words, it consists of a set of electrical conductors. These connect various functional units of a computer together in such a way that each unit receives transmissions from all other units. Communication takes place via single channel that delivers one binary digit, or bit, at a time. This is in contrast to parallel communications, in which multiple serial channels combine.
Synchronous, Full Duplex Communication
SPI is synchronous, which means that it operates at fixed time intervals, controlled by a clock. It also operates at full duplex, which means that signals carrying data can go in both directions simultaneously. In SPI, data is always exchanged between devices. When a device transmits data, it must read incoming data from other devices before attempting to transmit again. If it doesn't read that incoming data first, the incoming data is lost and the SPI device may be disabled as a result. An SPI device must, however, discern whether incoming data is meaningful or not, so that it can either discard it or generate dummy data in response.
Master-Slave Relationship
SPI devices communicate using a master-slave relationship, in which the master device initiates a data frame. SPI specifies four signals, clock, master out slave in (MOSI), master in slave out (MISO) and slave select. The clock signal is generated by the master device and input to all slave devices, while, as the name suggests, the MOSI and MISO signals carry data from the master device to the slave device and back again. SPI does not have an mechanism to confirm receipt of data and offers no flow control.
Pros &Cons
SPI offers a data transfer rate, or bandwidth, of up to 10 megabits per second. SPI really distinguishes itself in applications -- such as communications between a coder-decoder or codec, and a digital signal processor -- which take advantage of its full duplex capability. SPI is tmostly easy to implement for single master-slave applications, but it lacks built-in addressing, so it can be difficult to implement for multiple slaves.