SPI = Serial Peripheral Interface,是串行外围接口设备,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。
优点:
缺点:
SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave;
信号定义如下:
电路连接如下:
单个主设备和单个从设备:
单个主设备和多个从设备:
摩托罗拉定义的SPI寄存器包括:
SPI通信有四种模式,简单地讲就是设置SCLK时钟信号线的那种信号为有效信号
通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式
时钟极性CPOL,即Clock Polarity,决定时钟空闲时状态电平。对于SPI数据传输格式没有显著影响
CPOL = 0 ,表示当SCLK=0时处于空闲状态,所以有效状态就是SCLK处于高电平状态时
CPOL = 1, 表示当SCLK=1时处于空闲状态,所以有效状态就是SCLK处于低电平状态时
CPHA,即Clock Phase,定义SPI数据传输的两种基本模式。
CPHA = 0 ,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。,在第2个边沿发送数据
CPHA = 1, 在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。,在第1个边沿发送数据
四种模式如下图所示:
先看第一列两张图(CPHA = 0),采样发生在第一个时钟跳变沿,即数据采样发生在SCK奇数边沿;
再看第二列两张图(CPHA = 1),采样发生在第二个时钟跳变沿,即数据采样发生在SCK偶数边沿。
MODE0:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第一个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下沿
MODE1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第一个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿
MODE2:CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采样是在第一个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿
MODE3:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第一个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿
标准SPI读写为例
片选——读指令——地址——数据读出
片选——写指令——地址——数据写入
SPI通信协议
主从设备必须使用相同的工作模式——SCLK、CPOL 和 CPHA,才能正常工作。如果有多个从设备,并且它们使用了不同的工作模式,那么主设备必须在读写不同从设备时需要重新修改对应从设备的模式。以上SPI总线协议的主要内容。
是不是感觉,这就完了? SPI就是如此,他没有规定最大传输速率,没有地址方案,也没规定通信应答机制,没有规定流控制规则。
只要四根信号线连接正确,SPI模式相同,将CS/SS信号线拉低,即可以直接通信,一次一个字节的传输,读写数据同时操作,这就是SPI
一些通信控制都得通过SPI设备自行实现,SPI并不关心物理接口的电气特性,例如信号的标准电压。
refers:
https://www.cnblogs.com/liantang-blog/p/13737146.html