SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工的,同步的通信总线。
SPI优点:
支持全双工通信(允许数据同时在两个方向上传输);
通信简单(一条总线只负责发,一条总线只负责收);
数据传输快;
不需要像I2C设备那样寻址,通过片选选择即可。
SPI缺点:
没有应答机制确认是否接收到数据,所以跟I2C总线协议(I2C有ACK响应信号)比较在数据可靠性上有一定的缺陷。
SPI常用于 EEPROM、ADC、DAC、移位寄存器、SRAM等外围IC。
先了解SPI硬件接线:

从图中知道:
1.SPI通常由一个主机和多个从设备组成;
2.SPI主要包含四条总线:
①.SCLK:时钟信号,由主机产生;
②.MOSI:输出信号;
③.MISO:输入信号;
④.CS:片选,主机输出与片选使能同样的电平则选中与此spi设备通信,其余从设备片选不使能;
需要注意的是,SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,
这是不能改变的。因此主机需要通过软件配置为相应的模式才能与SPI从设备正常通信。
SPI模式设置是通过配置CPOL(时钟极性)和CPHA(时钟相位)来控制通信模式。
CPOL:时钟极性,简单说就是配置SCLK空闲状态时是处于低电平还是高电平。
CPOL=0,表示SCLK空闲状态时是低电平;CPOL=1,表示SCLK空闲状态时是高电平;
CPHA:时钟相位,用来表示数据采集(读数据)是在奇数个边沿还是偶数个边沿。
CPHA=0,表示数据采集(读数据)是在奇数个边沿;CPHA=1,表示数据采集(读数据)是在偶数个边沿。
因此由CPOL和CPHA可组合成以下四种通信模式:
模式1:CPOL=0,CPHA=0。此时空闲态时,SCLK处于低电平,数据采集是在奇数个边沿,也就是数据采集是在上升沿,数据发送是在下降沿。
模式2:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据采集是在偶数个边沿,也就是数据采集是在下降沿,数据发送是在上升沿。
模式3:CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在奇数个边沿,也就是数据采集是在下降沿,数据发送是在上升沿。
模式4:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据采集是在偶数个边沿,也就是数据采集是在上升沿,数据发送是在下降沿。
SPI设备也正是根据这样的规则,在SCLK边沿变化时通过输出总线MOSI发送数据和通过输入总线MISO读取数据进行通信。
SPI不像I2C有固定的通信数据格式,SPI只规定了通信有4条总线(如果主机不需要读数据,只需SCLK,MOSI、CS三条)
和4种通信模式,具体的SPI数据通信格式只能看具体芯片手册。
至此,SPI协议基本了解。下一篇将记录NAND学习心得。
网友评论