The Serial Peripheral Interface Bus or SPI bus is a very loose standard for controlling almost any digital electronics that accepts a clocked serial stream of bits.

Many real digital systems have peripherals that need to exist, but need not be fast. The advantage of a serial bus is that it minimizes the number of conductors, pins, and the size of the package of an integrated circuit. This reduces the cost of making, assembling and testing the electronics.

A serial peripheral bus is the most flexible choice when many different types of serial peripherals must be present.

In operation, there is a clock, a "data in," a "data out," and a "chip select" for each integrated circuit that is to be controlled. Almost any serial digital device can be controlled with this combination of signals.

Devices differ in a number of predictable ways. Some read data as the clock goes up, others read as it goes down. Some read on the leading edge of the clock, some on the trailing edge. Writing is almost always on the opposite direction of clock movement. Some devices have two clocks, one to "capture" or "display" data, and another to clock it into the device. In practice, many capture clocks are well-designed, and can be run as inversions or direct inputs of a chip select. Chip selects can be either selected high, or selected low. Many devices are designed to be daisy-chained into long chains of identical devices.

This looks at first like a non-standard. However, many programmers that develop embedded systems have a software module somewhere in their past that drives such a bus from a few general-purpose I/O pins, often with the ability to run different clock polarities or clock edges for different devices. In some organizations, these pieces of code have become quite stylized and generalized. Often the serial bus passes through a programmable logic array, making the hardware programmable, as well as the software.

Motorola actually developed a standard microcontroller peripheral for these sorts of busses, which gave them a name.

See also I2C, computer bus