收集数据的方法一般有(spi协议时序图和四种模式实际应用详解)

大家好,我是无量。

在上一章中,我们解释了spi接口的定义。今天,我们将更深入地解释spi协议时序图以及spi的四种模式的用法。

刚接触单片机开发的时候,最怕看时序图,对我来说是陌生的知识。

尤其是SPI和IIC,以前写的程序都是直接抄袭别人的程序,功能实现就够了,从来不研究数据传输的时序。

当时经验还不够,网上搜的资料太学术,看不懂。

经过多次项目,我发现最常用的通信总线是SPI、IIC、USART、CAN和单口通信。

理解越来越深,现在分析时序图就更清楚了。

所以,我经常给用无限单片机编程的同学灌输一种思想。首先,学会使用它。用多了,就会容易深入

不要在没有经验的时候绊倒,否则会付出很多不必要的时间成本。

接下来,我们进入主题。

一、spi四种模式详解

在讲时序图之前,我们首先要了解spi的四种模式。不同的模式有不同的数据收集方式。

通常,内置SPI功能的MCU上有两个寄存器配置位CPOL和CPHA。

我们以STM32单片机为例,可以用结构成员来配置。



这是由固件库直接配置的,固件库的底层代码也配置相应的寄存器。







让我们介绍一下CPOL和CPHA的用法。

CPOL是确定没有数据传输时时钟信号线SCLK的电平状态。

当CPOL = 0:空空闲时,SCLK保持低电平。

当CPOL = 1:空闲置时,SCLK依然居高不下。



CPHA确定数据位传输是从第一个时钟(SCLK)边沿还是第二个时钟(SCLK)边沿开始。

CPHA=0:数据收集从第一个时钟(SLCK)沿开始。

CPHA=1:数据收集从第二个时钟(SLCK)边沿开始。



好了,理解了CPOL和CPHA的基本概念后,下面两个就开始“合体”了。

CPOL和CPHA结合形成四种SPI模式。



声明:部分图片来自网络,非原创。

更重要的是分析下四种模式的区别。

因为从机指的是使用SPI协议进行通信的芯片,比如w25q64(Flash)芯片,有机发光二极管屏等等。

许多从机没有CPOL和CPHA寄存器设置位。如果你看他们的数据表,你会很疑惑,根本找不到这两个东西。

这些都需要看他们的时序图来分析用的是什么模式。如果模式不对,数据传输就会出现问题。

这就是为什么这个芯片自己写时序可以,换另一个spi通信芯片就不行了。

1。模式0(CPOL=0,CPHA=0)

0模式特征:

Cpol = 0:空空闲时为低电平,第一个跳变沿为上升沿,第二个跳变沿为下降沿。

CPHA = 0:数据在第一个转换沿(上升沿)采样





2。模式1(CPOL=0,CPHA=1)

1模式特征:

Cpol = 0:空空闲时为低电平,第一个跳变沿为上升沿,第二个跳变沿为下降沿。

CPHA = 1:数据在第二个转换沿(下降沿)采样




3。模式2(CPOL=1,CPHA=0)

Cpol = 1:空空闲时为高电平,第一个跳变沿为下降沿,第二个跳变沿为上升沿。

CPHA = 0:数据在第一个转换沿(下降沿)采样




4。模式3(CPOL=1,CPHA=1)

Cpol = 1:空空闲时为高电平,第一个跳变沿为下降沿,第二个跳变沿为上升沿。

CPHA = 1:数据在第二个转换沿(上升沿)采样



不知道大家有没有注意到不同的模式其实是指SCLK空的空闲时间电平状态和数据采样的起点不同

你学业失败了吗?当初就是这些模式让我看起来很傻。

不明白的话从头看。这四种模式是后面分析整体时序图的前提。


二。spi时序图的详细说明

在这里恭喜你,你很快就可以完全破解SPI协议了。

Spi时序图,最好的方法是通过实际应用来学习。

我们以W25Q64为例。这种芯片在SPI通信中起从机的作用,即SPI从机。

一般采用MCU或其他处理器作为主控制器与之通信,SLCK时钟也由主控制器发送。

以下是W25Q64数据读取指令的时序图。我们用这个例子来解释一下如何看时序图。

收集数据的方法




1。首先确定芯片支持哪种SPI和哪种模式来读写数据

确定采用哪种模式,就是主控制器,也就是MCU端可以确定数据采集模式,主控制器和从机要一致。

从时序图不难发现,W25Q64的数据手册直接告诉你,通信支持SPI模式0和模式3。

芯片的一些数据手册没有告诉你,那你怎么知道用哪种模式的芯片呢?



第一步:通过时序图分析CLK空的空闲电平状态。从上面的时序图可以知道高低电平可以是正确的吧?那我们就以CLK空空闲时低的状态继续分析吧。

第二步:分析DI和DO是在CLK的上升沿还是下降沿采集数据,注意DI代表从机的MISO引脚(W25Q64),DO代表从机的MoSi引脚(W25Q64)。

我们主要判断CLK在有效数据区是DI和DO的上升沿还是下降沿。

什么是数据有效区?



看上图。红色框中的区域是数据有效区域。

一般通过DI和DO引脚传输数据,所以数据有效区是这两个引脚的此时只能是稳定的高电平或低电平。

有效数据区对应的电平是最终要传输的数据位,低电平代表0,高电平代表1

传输8位,代表1个字节的数据。

什么是无效数据区?



例如,上面蓝框中的区域是无效数据区,即CLK数据采集时钟此时尚未到来,因此DI和DO引脚的电平可以随意改变。

理解了这两个概念后,我们要重点看DI和DO在有效数据区时,CLK是上升沿还是下降沿。



从上图可以看出,DI和DO在有效数据区时,CLK为上升沿,下降沿时,DI和DO在电平可以任意变化的无效数据区。

通过这种方式,可以分析模式。

首先在上升沿采集数据,然后通过排除法只有模式0和模式3满足条件。

那么CLK空空闲时间应该是低电平,这样只有模式0满足要求。

因此,在知道使用了模式0之后,MCU编写的程序就会知道数据是从CLK的上升沿读取,还是发送,还是从下降沿发送。


2。分析整体时序

要分析时序,首先要熟悉这个时序会实现什么功能。虽然不同函数的定时不同,但是发送数据的顺序和定义也不同。

我们现在分析的时序是从W25Q64闪存芯片读取存储的数据。



我根据CLK脉冲序列,将整个时序分成三部分:

①阅读说明

这里需要注意的是,读指令数据是在W25Q64的DI引脚产生的,DI相当于W25Q64的MISO,即接收主控制器(通常是单片机)发送的数据。

因此,该读取指令(0x03)由MCU发送至W25Q64

0x03分为8位,在DI线上传输,CLK的每个上升沿传输1位。



②24位地址

发送完读取指令后,MCU继续发送24位内存地址,相当于W25Q64要读取哪个内存地址。

这个数据是由MCU程序决定的,所以不是固定的。可以看到,数据位可以是高电平,也可以是低电平。

③ MCU接收数据

这时通信双方的角色发生了变化,单片机成为数据接收方,W25Q64成为数据发送方。

因为数据是从W25Q64的DO,也就是W25Q64的MOSI引脚发出的。

通过这个时序,MCU可以读取存储在W25Q64指定地址的数据。

如果你是我们无限微控制器编程的学生,对文章不太理解,可以给我反馈。如果反馈的人多,可以现场讲解,如果人少,可以有针对性的一对一远程电话讲解。

三。MCU程序注意

51单片机一般没有内置SPI模块,所以整个序列需要自己编写程序来模拟,简称模拟SPI。

而STM32单片机一般内置SPI,不需要自己编写程序模拟时序,可以直接应用。

但是,如果使用内置的SPI,有一个很容易被忽略的细节,就是在读取数据的时候,要先发送一个字节的任意数据,然后再读取一个字节。

发送一个字节的任意数据以在CLK总线上产生一个时钟,从而为从机SPI信号提供时钟,从机SPI本身不会产生CLK信号。

例如,我下面的数据读取功能:



如果你能理解这一步,你就基本上对SPI协议有了透彻的理解。

不管从机怎么改,比如把W25Q24换成有机发光二极管屏,计时原理都是一样的,只是相关指令和寄存器不一样。

如果对你有帮助,请帮我安排一个三方聚会~

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友