
SPI接口
SPI(Serial Peripheral Interface--串列外设接口)汇流排系统是一种同步串列外设接口,它可以使MCU与各种外围设备以串列方式进行通信以交换信息。SPI汇流排可直接与各个厂家生产的多种标準外围器件相连,包括FLASHRAM、网路控制器、LCD显示驱动器、A/D转换器和MCU等。该接口一般使用4条线:串列时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSS。
基本介绍
- 中文名:串列外设接口
- 外文名:Serial Peripheral Interface(SPI)
- 简称:SPI
- 类别:接口
套用

SPI接口的全称是"Serial Peripheral Interface",意为串列外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要套用在EEPROM、FLASH、实时时钟、AD转换器,还有数位讯号处理器和数位讯号解码器之间。
SPI接口是在CPU和外围低速器件之间进行同步串列数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C汇流排要快,速度可达到几Mbps。
特点
信号线少,协定简单,相对数据速率高。
接口信号
(1)MOSI – 主器件数据输出,从器件数据输入
多个从器件硬体连线示意图

(2)MISO – 主器件数据输入,从器件数据输出
(3)SCLK –时钟信号,由主器件产生,最大为fPCLK/2,从模式频率最大为fCPU/2
(4)NSS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)
在点对点的通信中,SPI接口不需要进行定址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬体上比I2C系统要稍微複杂一些。
SPI接口在内部硬体实际上是两个简单的移位暂存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的上升沿上数据改变,同时一位数据被存入移位暂存器。
原理图
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

工作模式
SPI有四种工作模式,各个工作模式的不同在于SCLK不同, 具体工作由CPOL,CPHA决定
通讯时序图

CPOL: (Clock Polarity),时钟极性
当CPOL为0时,时钟空闲时电平为低;
当CPOL为1时,时钟空闲时电平为高;
CPHA:(Clock Phase),时钟相位
当CPHA为0时,时钟周期的上升沿採集数据,时钟周期的下降沿输出数据;
当CPHA为1时,时钟周期的下降沿採集数据,时钟周期的上升沿输出数据;
CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:
四种工作模式现如下:
