SPI串行总线

原理介绍:

SPI是同步串行通信接口。英文是serial
peripheral interface的缩写,也就是串行外围设备接口。

SPI是一种高速的、全双工、同步通信总线,标准的SPI也仅仅使用4个引脚,广泛用于EEPROM、Flash、RTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以及数字信号解码器上。SPI通信的速度很容易达到好几兆bps,所以可以用SPI总线传输一些未压缩的音频以及压缩的视频。SPI通信原理比I2C要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的SPI是4根线,分别是SSEL(片选,也写作SCS)、SCLK(时钟,也写作SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和MISO(主机输入从机输出Master Input/Slave Output)。

SSEL:从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。

SCLK:时钟信号,由主机产生,和I2C通信的SCL有点类似。

MOSI:主机给从机发送指令或者数据的通道。

MISO:主机读取从机的状态或者数据的通道。

在某些情况下,我们也可以用3根线的SPI或者2根线的SPI进行通信。比如主机只给从机发送命令,从机不需要回复数据的时候,那MISO就可以不要;而在主机只读取从机的数据,不需要给从机发送指令的时候,那MOSI可以不要;当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么SSEL可以不要;此时如果再加上主机只给从机发送数据,那么SSEL和MISO都可以不要;如果主机只读取从机送来的数据,SSEL和MOSI都可以不要。 3线和2线的SPI大家要知道怎么回事,实际使用也是有应用的,但是当我们提及SPI的时候,一般都是指标准SPI,都是指4根线的这种形式。

先来学习两个名词:

CPOL: Clock Polarity,就是时钟的极性。通信的过程分为空闲时刻和通信时刻,SCLK在数据发送之前和之后的空闲状态是高电平那么CPOL,那么CPOL = 1,如果空闲状态SCLK是低电平,那么CPOL = 0;如果空闲状态SCLK是低电平,那么CPOL = 0;

CPHA: Clock Phase,就是时钟的相位。

CPHA=1,就表示数据的输出是在一个时钟周期的第一个沿上,至于这个沿是上升沿还是下降沿,这要是CPOL的值而定,CPOL=1那就是下降沿,反之就是上升沿。那么数据的采样自然就是在第二个沿上了。

CPHA=0,就表示数据的采样是在一个时钟周期的第一个沿上,同样它是什么沿由CPOL决定。那么数据的输出自然就在第二个沿上了。

主机和从机要交换数据,就牵涉到一个问题,即主机在什么时刻输出数据到MOSI上而从机在什么时刻采样这个数据,或者从机在什么时刻输出数据到MISO上而主机什么时刻采样这个数据。同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样。而一个时钟周期必定包含了一个上升沿和一个下降沿,这是周期的定义所决定的,只是这两个沿的先后并无规定。又因为数据从产生的时刻到它的稳定是需要一定时间的,那么,如果主机在上升沿输出数据到MOSI上,从机就只能在下降沿去采样这个数据了。反之如果一方在下降沿输出数据,那么另一方就必须在上升沿采样这个数据。

每个clock周期内,SPI设备都会发送并接收1 bit数据,相当于有1 bit数据被交换了。数据传输高位在前,低位在后(MSB
first)。SPI主从结构内部数据传输示意图如下图所示
在这里插入图片描述

下面是4种模式:

模式0:CPOL = 0,CPHA = 0。SCK串行时钟线空闲是为低电平,数据的采样是在第一个沿上,也就是上升沿,数据的输出是在第二个沿上,也就是下降沿。
在这里插入图片描述

模式1:CPOL = 0,CPHA =
1。SCK串行时钟线空闲是为低电平,数据的输出是在第一个沿上,也就是上升沿,所以数据的采样是在下降沿。
在这里插入图片描述

模式2:CPOL = 1,CPHA =
0。SCK串行时钟线空闲是为高电平,数据的采样是在第一个沿上,也就是下降沿,所以数据的输出是在下降沿。
在这里插入图片描述

模式3:CPOL = 1,CPHA =
1。SCK串行时钟线空闲是为高电平,数据的输出是在第一个沿上,也就是下降沿,所以数据的采样是在上升沿。
在这里插入图片描述
仿真程序后面补上

猜你喜欢

转载自blog.csdn.net/qq_39921762/article/details/88920766