一、概述
SPI是英语Serial Peripheral Interface的缩写,也就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚并且可以节省PCB的布局空间,故现在越来越多的芯片集成了这种协议。四根线的端口如下:SDI(数据输入),SDO(数据输出),SCLK(时钟信号),CS(SS,片选,如果只有一个从设备,可以不用)
SPI通信有4种不同模式,不同的从设备在出厂时就配置好了,是不能改变在;但因为通信双方必须在同一模式下,所以我们可以对主SPI设备模式进行配置,通信CPOL(时钟极性)和CPHA(时钟相位)来控制主设备的工作模式以达到和从设备一致。
Mode0:CPOL=0 CPHA=0
Mode1:CPOL=0 CPHA=1
Mode2:CPOL=1 CPHA=0
Mode3:CPOL=1 CPHA=1
CPOL:时钟极性用来表示SCLK电平处在那个状态是空闲状态,当其=0时表示时钟SCLK为低电平时为空闲状态,有效状态是SCLK为高电平时。当其=1时表示时钟SCLK为高电平时为空闲状态,有效状态是SCLK为低电平时。
CPHA:时钟相位用来表示数据采样在那个边沿,当其=0表示数据采样在第一个边沿,数据发送在第二个边沿,当其=1时表示数据采样在第二个边沿,数据发送在第一个边沿。
CPOL/CPHA和数据关系时序图
主设备能够控制时钟,因为SPI通信并不像UART或者IIC通信那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。
二、工作原理:
SPI内部框图
在一个SPI时钟周期内,会完成如下操作:
1) 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;
2) 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。
这是通过移位寄存器来实现的。如下图所示,主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。
SPI数据传输原理
在网上找了个动画,这个很形象的解释了数据传输的过程。
三、优缺点:
SPI接口具有如下优点:
1) 支持全双工操作;
2) 操作简单;
3) 数据传输速率较高。
同时,它也具有如下缺点:
1) 需要占用主机较多的口线(每个从机都需要一根片选线);
2) 只支持单个主机。
3) 没有指定的流控制,没有应答机制确认是否接收到数据。