SPI bus SPI is a 3 wire, fast (up to 50MHz) serial bus. In microcontroller applications, the microcontroller generates the clock and controls the bus. The 3 wires are: SCL (Serial Clock) SPI Clock output from the microcontroller. MOSI (Master Out Slave In) Data from microcontroller to Slave device MISO (Master In Slave Out) Data from slave to the microcontroller If there are multiple devices on the SPI bus, the microcontroller disables those it doen't want to communicate with by pulling the CHIP SELECT line inactive, (almost always high = inactive, low = active) The microcontroller has 2 lines dedicated to SPI bus, plus the USARTs can be used in SPI mode. Also, it is possible to emulate an SPI master by manipulating IO lines directly. This is known as bit banging. Communicating via SPI is very similar to the RS232 serial communications you have already used. Gotchas: There are unfortunately 4 different SPI modes, numbered 0..3 though almost all devices use mode 0 or 3. The mode is set up as part of the initialisation. If you need to communicate with devices which use a different mode, put each on its own SPI bus. There are two libraries available spi.c is a bit-banging mode 0 library. It uses polling, not interrupts. spi2.c uses the built in support in the microcontroller. It is for mode 0. It uses polling, not interrupts. Changing to the other modes is straightforward. There is also an spi_mode3 library available, using bit banging and polling.