SPI协议及模拟SPI时序

SPI (Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,是一种高速的,全双工,同步的通信总线。
SPI相关缩写:
SS:Slave Select,选中从设备,片选
CKPOL(Clock Polarity) = CPOL = POL = Polarity = (时钟)极性
CKPHA(Clock Phase) = CPHA = PHA = Phase = (时钟)相位
Edge = 边沿,时钟电平变化的时刻,上升沿(rising edge),下降沿(falling edge)

接口:
SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。
4条信号线:
1)SCLK: 串行时钟,用来同步数据传输,由主机输出
2)MOSI: 主机输出从机输入(Master Output Slaver Input)数据线
3)MISO: 主机输入从机输出(Master Input Slaver Output) 数据线
3)SS : 片选线,低电平有效,由主机输出

SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选来确定要通信的从机。
SPI由于接口相对简单,用途广泛,主要应用在EEPREOM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
一个SPI的Master通过SPI与一个从设备进行通讯,首先要保证两者之间的时钟SCLK要一致,即保证时序上的一致才可以正常通讯。SPI中的时钟和相位,指的就是SCLK时钟的特性,只有保证主从设备两者时钟的特性一致了,才可以保证两者正常实现SPI通讯。

时钟极性和时钟相位
在SPI操作中,最重要的设置就是时钟极性(CPOL)和时钟相位(CPHA)。时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。

Clock Polarity = IDLE state of SCK 表示当SCLK空闲的时候,其电平的值是低电平还是高电平;
CPOL = 0,时钟空闲时候的电平是低电平,所以当SCLK有效时,就是高电平active-high;
CPOL = 1,时钟空闲时候的电平是高电平,所以当SCLK有效时,就是低电平active-low;

CPHA相位就是表示数据采样,数据有效的时刻。	
对应数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿。
CPHA=0,对应第一个边沿;
CPHA=1,对应第二个边沿;

CPOL和CPHA的不同组合,看下图:
SPI协议及模拟SPI时序_第1张图片

CP0L=0,CPHA=0,idle时为低电平,数据采样在第一个边沿,此时电平由低到高,上升沿;
CP0L=0,CPHA=1,idle时为低电平,数据采样在第二个边沿,此时电平由搞到低,下降沿;
CP0L=1,CPHA=0,idle时为高电平,数据采样在第一个边沿,此时电平由高到低,下降沿;
CP0L=1,CPHA=1,idle时为高电平,数据采样在第二个边沿,此时电平由低到高,上升沿;

在设置SPI的CPOL和CPHA值时,首先要搞懂从设备的SPI处于何种模式,同步时钟空闲时是高电平还是低电平;设备是在上升沿采样还是在下降沿采样。

假设从设备的时钟是空闲为低电平,上升沿采集数据,那么我们就要设置CP0L=0,CPHA=0;

你可能感兴趣的:(STM32开发)