Serial Peripheral Interface (SPI)

The "Serial Peripheral Interface" defines a 4-wire communication bus. Traditionally the 4 wires are named:

Many peripheral chips use a SPI interface. MultiMediaCard (MMC) uses a SPI interface.

If a microcontroller only needs to talk to 1 SPI peripheral, the CS pin on that slave may be grounded unless the slave uses the CS rise or fall to trigger internal actions. e.g. some A2D chips will start a conversion on each CS fall. When CS is not used, the end of one command is immediatly followed by the start of the next. CS can be "faked" by adding an RC network from the clock pin. This will generate CS when the clock is active and drop it when the clock stops.

If a microcontroller needs to talk to multiple SPI peripherals, there are 2 ways to set things up: "cascaded slaves" or "independent slaves".

"cascaded slaves" or "daisy-chained slaves": All the SCLKs are connected together. All the CS pins are connected together. The data flows out the microcontroller, through each peripheral in turn, and back to the microcontroller:

[uP MOSI] --> [MOSI device2 MISO] --> [MOSI device2 MISO] --> ... --> [MOSI deviceN MISO] --> [MISO uP].

"independent slaves": All the SCLKs are connected together. All the MISOs are connected together. All the MOSIs are connected together. The CS pin from each peripheral must be connected to a seperate pin on the microcontroller.

With a lot of SPI peripherals, a lot of pins on the microcontroller can be tied up in CS selection in a "independent slave" setup. The "daisy-chained slave" setup uses a lot fewer pins. (Alternatively, you could switch to devices that support a different protocol such as I2C that does device selection using address bits on the data line, rather than CS pins.)

(There's a nice picture of "cascaded slaves" vs. "independent slaves" at http://mct.net/faq/spi.html

Memory

SPI based I/O expanders.

Microchip PIC specific SPI

SPI Bug in LTC2400 analog to digital converter from Linear Technology

Related

Questions:

I doubt it is possible to connect a PS/2 keyboard to a SPI bus. Have you read "The PS/2 Mouse/Keyboard Protocol" by Adam Chapweske http://computer-engineering.org/ps2protocol/ ? If you had, you would know that the *both* the clock *and* the data line are driven by *both* the PC *and* the keyboard (at different times, of course). That sounds to me much more like a I2C bus than a SPI bus. Check /techref/microchip/i2c.htm for information on programming a PIC with the I2C protocol. Does that help? -- David Cary

Comments:

Interested:

See also: