SPI (Serial Peripheral Interface) library
This library allows you to communicate with SPI devices, with the Arduino as the master device.
A Brief Introduction to the SPI
Serial Peripheral Interface (SPI) is a synchronous serial data
protocol used by microcontrollers for communicating with one or more
peripheral devices quickly over short distances. It can also be used for
communication between two microcontrollers.
With an SPI connection there is always one
master device (usually a microcontroller) which controls the peripheral
devices. Typically there are three lines common to all the devices:
and one line specific for every device:
When a device's Slave Select pin is low, it communicates with the master. When it's high, it ignores the master. This allows you to have multiple SPI devices sharing the same MISO, MOSI, and CLK lines.
To write code for a new SPI device you need to note a few things:
The SPI standard is loose and each
device implements it a little differently. This means you have to pay
special attention to the device's datasheet when writing your code.
Generally speaking, there are four modes of
transmission. These modes control whether data is shifted in and out on
the rising or falling edge of the data clock signal (called the clock phase), and whether the clock is idle when high or low (called the clock polarity). The four modes combine polarity and phase according to this table:
The SPI.setDataMode() function lets you set the mode to control clock polarity and phase.
Every SPI device has a maximum allowed speed
for SPI Bus. The SPI.setClockDivider() allows you to change the clock
speed to make your device working properly (default is 4MHz).
Once you have your SPI parameters set correctly
you just need to figure which registers in your device control which
functions, and you're good to go. This will be explained in the data
sheet for your device.
For more on SPI, see Wikipedia's page on SPI.
ConnectionsThe following table display on which pins the SPI lines are broken out on the different Arduino boards:
Note about Slave Select (SS) pin on AVR based boards
All AVR based boards have an SS pin that is useful when they act as a slave
controlled by an external master. Since this library supports only
master mode, this pin should be set always as OUTPUT otherwise the SPI
interface could be put automatically into slave mode by hardware,
rendering the library inoperative.
It is, however, possible to use any pin as the
Slave Select (SS) for the devices. For example, the Arduino Ethernet
shield uses pin 4 to control the SPI connection to the on-board SD card,
and pin 10 to control the connection to the Ethernet controller.
Extended SPI functionality for the Due
The Arduino Due's SPI interface works differently than any other
Arduino boards. The library can be used on the Due with the same methods
available to other Arduino boards or using the extended methods. The extended methods exploits the the SAM3X hardware and allows some interesting features like:
Arduino Due has three exposed pins for the devices Slave Select (SS) lines (pins 4, 10, and 52).
|