SPI接口协议总文有点介绍,不清楚的请找相关资料再看看。
MISO (主机输入,从机输出)
MOSI (主机输出,从机输入)
SCK (时钟)
SS (从机选择线)
设备SS引脚为LOW则与主机通信,为HIGH则不与主机通信。
Arduino支持SPI协议,因此,有支持SPI的设备直接挂到Arduino的SPI线上就可以了。(如果是Arduino Due板子,用法请参考官网。)
SPI library主要有以下几个函数:
(1)begin()
(2)end()
(3)setBitOrder()
(4)setClockDivider()
(5)setDataMode()
(6)transfer()
begin():
功能:初始化SPI总线,设置SCK,MOSI和SS为输出:将SCK和MOSI拉低,将SS拉高。
形式:SPI.begin()
返回值:none
setBitOrder():
功能:设置进入和输出SPI总线比特(bit)的顺序:LSBFIRST (least-significant bit first) 或者 MSBFIRST (most-significant bit first)。
形式:SPI.setBitOrder(order)
参数:order: LSBFIRST 或者 MSBFIRST
返回值:none
setDataMode():
功能:设置数据模式;(具体请见百科)
形式:SPI.setDataMode(mode)
参数:mode:SPI_MODE0
SPI_MODE1
SPI_MODE2
SPI_MODE3
setClockDivider():
功能:设置SPI时钟为系统的分频。在AVR的板子上,分频系数可以为2,4,8,16,32,64或者128。默认设置为SPI_CLOCK_DIV4,即设置SPI时钟为系统时钟的1/4(如果板子为16MHz则SPI为4MHz)。
形式:SPI.setClockDivider(divider)
参数:divider:SPI_CLOCK_DIV2
SPI_CLOCK_DIV4
SPI_CLOCK_DIV8
SPI_CLOCK_DIV16
SPI_CLOCK_DIV32
SPI_CLOCK_DIV64
SPI_CLOCK_DIV128
返回值:none
transfer():
功能:在SPI上传输一个字节(byte),发送和接收都是用这个函数;
形式:SPI.transfer(val)
参数:val:要发送的字节
返回值:从bus上读取的字节。(读操作使用的时候)
end():
功能:结束传输
这里有两个SPI使用的示例:http://arduino.cc/en/Tutorial/BarometricPressureSensor
http://arduino.cc/en/Tutorial/SPIDigitalPot