SPI的英文全称是:“Serial Peripheral Interface”,翻译成中文的意思是串口通讯外围设备接口技术。也就是把数据用串口传输方式进行交换。它有一个主控制器,通常咱们采用微处理器,好比经常使用的单片机,以及一些其它的外围设置,好比数码管,液晶显示频,SD卡等外围设备。ide
它通常是由5根线组成的:分别是MOSI,MISO,SCK, SS以及地线,电源线。
MOSI:是由主机向设备发出数据的。
MISO:是由设备向主机发送数据的。
SCK:是起到一个控制数据传输的校准,根据arduino官方的说法,好像还具有有对数据全能的控制做用。
SS线是用于一根使能线,特别是接多个外围设备的时候,能够经过控制SS线,对不一样的外围设备进行通讯。
写一个程序关于SPI必须注意的问题有:
1.
字节的传输是从最高位(MSB)传输,仍是从最低位(LSB)传输呢?这是由SPI.setBitOrder()函数进行设置的。
2.
当数据不传输时,时钟线是高仍是低?
3.
触发方式是上升沿触发仍是降低沿触发呢?这个由SPI.setDataMode()函数进行设置。
4.
SPI运行的速度是多快呢?这个由SPI.setClockDivider()函数进行设置。
在
arduino2009
板上,
10
脚是
SS
,
11
脚是
MOSI, 12
脚是
MISO
,
13
脚是时钟引脚。固然在同时用这几根引脚控制多个外围设备的时候,
SS
引脚能够是其它引脚,好比
arduinoEhthernet
模块,利用第
4
个引脚去控制
SD
卡的
SS
端。第
10
引脚控制
Enthernet
模块的
SS
端,下面是三种不一样的硬件接法示意图:

这是另一种接法,也是同时控制多个外围设备,可是这种占用到主机的引脚相对于第二种来讲会少一点。
下面再补充几个上文没有说到的关于
SPI
的函数:
SPI.begin()
做用是初始化
SPI
总线。设备
SCK, MOSI,
和
SS
为输出。把
SCK
和
MOSI
拉低,把
SS
线进行拉高。
SPI.end()
做用是结束SPI传输,或者准确地说是禁止SPI总线工做。
SPI.transfer(val)
做用是传输一个字节,这里要指出来的是val只能是字节。