SPI的学习和ESP8266的SPI通讯测试

SPI简介:

SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。

 

 

SPI的通信原理:

它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是:

SCLK, Serial Clock, 主要的作用是 Master 设备往 Slave 设备传输时钟信号, 控制数据交换的时机以及速率;

SS/CS, Slave Select/Chip Select, 用于 Master 设备片选 Slave 设备, 使被选中的 Slave 设备能够被 Master 设备所访问;

SDO/MOSI, Serial Data Output/Master Out Slave In, Master 上面也被称为 Tx-Channel, 作为数据的出口, 主要用于 SPI 设备发送数据;

SDI/MISO, Serial Data Input/Master In Slave Out, Master 上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI 设备接收数据;

其中,CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个SPI设备成为可能。另外SPI没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

 

 

SPI通信模式:

4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:

Mode0CPOL=0CPHA=0

Mode1CPOL=0CPHA=1

Mode2CPOL=1CPHA=0

Mode3CPOL=1CPHA=1

 

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA

是用来配置数据采样是在第几个边沿:

CPHA=0,表示第一个边沿:

对于CPOL=0闲时是低电平,第一个边沿就是从低变到高,所以是上升沿;

对于CPOL=1闲时的是高电平,第一个边沿就是从高变到低,所以是下降沿;

CPHA=1,表示第二个边沿:

 

对于CPOL=0闲时是低电平,第二个边沿就是从高变到低,所以是下降沿;

对于CPOL=1闲时是高电平,第一个边沿就是从低变到高,所以是上升沿;

 

 

另外SCLK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

 

 

 

基于ESP8266SPI通讯测试:

硬件接口:

| Signal              | Slave      | Master |

| ------------------- | ----------- | ---------- |

| SCLK              | GPIO14 | GPIO14 |

| MISO              | GPIO12 | GPIO12 |

| MOSI              | GPIO13 | GPIO13 |

| CS                  | GPIO15 | GPIO15 |

| HANDSHARK | GPIO4  | GPIO4   |

| GND               | GND    | GND        |

利用官方提供的例子,准备两个ESP8266芯片,一个烧录主机程序,一个烧录从机程序:

 

 

对数据进行监视:

 

 完成ESP8266SPI通讯测试。

posted @ 2020-05-21 21:41  丶尘丶  阅读(2943)  评论(0编辑  收藏  举报