大家好,我是无际。

上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法。

刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识。

特别是SPI和IIC的,以前写程序都直接复制别人程序,功能实现就行了也没去研究过数据传输的时候时序具体是怎么样的。

那个时候经验也不足,网上搜的资料说的都太学术化了,也看不懂。

后面项目做多了,发现最常用到的通信总线无非就是SPI、IIC、USART、CAN、单口通信。

理解也慢慢深刻了,现在去分析时序图也更加清晰了。

所以,我经常和无际单片机编程的学员灌输一种理念,先学会用,用多了经验丰富了再深入就轻松了

不要在你没经验的时候去死磕,否则会付出很多不必要的时间成本。

下面,我们进入主题。

一、spi四种模式详解

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

一般内置SPI功能的单片机上,都有两个寄存器配置位CPOL和CPHA。

我们拿STM32单片机来举例,可以通过结构体成员配置。

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

下面来介绍下CPOL和CPHA到底有什么用。

CPOL就是决定SCLK这个时钟信号线,在没有数据传输的时候的电平状态。

CPOL=0:空闲状态时,SCLK保持低电平

CPOL=1:空闲状态时,SCLK保持高电平

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

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

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

Ok,理解CPOL和CPHA基本概念以后,下面这两个要开始”合体”了。

CPOL和CPHA合体就形成了SPI四种模式。

声明:部分图片源自网络,并非原创哈。

下面再分析下4种模式的区别,比较重要。

因为从机,从机指的是使用SPI协议通信的芯片,比如说w25q64(Flash)芯片,OLED屏等等。

很多从机没有CPOL和CPHA寄存器设置位,如果你看它们数据手册会一脸懵逼,根本找不到这两个东西。

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

这也是为什么明明自己写了时序用在这个芯片可以,换到别的spi通信的芯片就不行。

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

模式0特性:

CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿

CPHA = 0:数据在第1个跳变沿(上升沿)采样

 

 

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

模式1特性:

CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿

CPHA = 1:数据在第2个跳变沿(下降沿)采样

 

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

CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿

CPHA = 0:数据在第1个跳变沿(下降沿)采样

 

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

CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿

CPHA = 1:数据在第2个跳变沿(上升沿)采样

不知道你有没有发现,不同的模式,其实就是SCLK空闲时间电平状态和数据采样起点不同

你学废了吗?当初我就是这几种模式看得一脸懵逼。

如果不懂,先从开头继续看,这4种模式是后面分析整体时序图的前提。

 

二、spi时序图详解

看到这里恭喜你,你马上就能彻底攻破SPI协议了。

Spi时序图,最好的方式就是通过实际应用去学习。

我们拿W25Q64这个Flash芯片举例,这种芯片在SPI通信里都是作为从机的角色,也就SPI Slave。

一般由单片机或者其它处理器作为主控和它通信,SLCK时钟也是由主控发出。

下面是W25Q64读数据指令的时序图,我们以这个例子来讲解下时序图要怎么看。

 

1.先确定芯片支持什么SPI哪种模式读写数据

确定了用哪种模式,主控,也就是单片机这边才能确定数据采集的方式,主控和从机要保持一致。

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

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

第一步:通过时序图分析CLK空闲时的电平状态,通过上面那个时序图,我们可以得知,高低电平都可以对吧?那我们现在先用CLK空闲时是低电平这种状态继续往下分析。

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

我们主要通过DI和DO在数据有效区时CLK是上升沿还是下降沿,来判断

什么是数据有效区?

大家看上面这张图,我用红色框起来的区域就是数据有效区。

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

相当于数据有效区的电平就是最终要传输的数据位,低电平代表0,高电平代表1

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

什么是无效数据区?

例如上图蓝色框的区域就是无效数据区,就是这个时刻CLK数据采集时钟还没来,所以DI和DO引脚的电平都可以任意变化。

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

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

这样,就可以分析出模式了。

首先上升沿采集数据,通过排除法,这样只有模式0和模式3符合条件。

然后就是CLK空闲时间要为低电平,这样就只有模式0符合了。

所以,知道用模式0以后,单片机那边写程序就知道数据是从CLK上升沿读取,或者发送,还是从下降沿了。

 

2.分析整体时序

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

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

我把整个时序按CLK脉冲顺序拆分成3个部分:

①读指令

这里要注意的是,读指令数据是在W25Q64的DI引脚产生的,DI相当于W25Q64的MISO,就是接收主控(一般是单片机)发送过来的数据。

所以,这个读指令(0x03)是单片机发给W25Q64的

0x03被拆分成8个Bit在DI线上传输,每个CLK上升沿传输1个Bit。

②24位地址

发完读指令以后,单片机继续发24位的内存地址,相当于要读W25Q64哪个内存地址的数据。

这个数据是由单片机程序定的,所以不是固定的,大家可以看到数据位都是可以高电平,也可以是低电平。

③单片机接收数据

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

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

通过这个时序,单片机就可以读到存储在W25Q64指定地址的数据了。

如果你是我们无际单片机编程学员,看文章还不是很理解的话,可以跟我反馈,反馈的人多就直播讲解,如果少就针对性一对一远程电话讲解。

三、单片机程序注意

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

而STM32单片机一般有内置SPI,就不用自己写程序去模拟时序,直接应用。

但是如果用内置SPI有一个细节,特别容易被忽略,就是你读数据的时候,读一个字节之前要先发一个字节任意值数据。

发一个字节任意值数据是为了在CLK总线上产生时钟,给从机的SPI信号提供时钟用的,从机SPI不会自己产生CLK信号的。

比如我下面这个读数据函数:

能理解到这一步,你基本上就已经吃透SPI协议了。

不管从机怎么换,比如说不是W25Q24了,换成OLED屏了,时序原理也是一样的,只是相关的指令和寄存器不同。

如果对你有帮助,麻烦给我安排个三连趴~

spi协议时序图和四种模式实际应用详解相关推荐

  1. Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)

    BrupSuite爆破的四种模式详解 最近看了好多关于暴力破解的博客,其中用的最多的工具就是bp了,但是好多都是一上来给了执行步骤,却没有对爆破的这几个模式选择进行解释,所以今天萌新写个纪录,来阐明这 ...

  2. 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...

    这篇教程是向脚本之家的朋友介绍单反相机中P.A.S.M四种曝光模式的用法,对于摄影爱好者非常值得学习,推荐到脚本之家,喜欢的朋友一起来看看吧 很多朋友在初接触单反相机时对相机的P.A.S.M四种曝光模 ...

  3. python可变参数_Python 的四种共享传参详解

    点击上方"Python数据之道",选择"星标公众号" 精品文章,第一时间送达 作者 | 杨仁聪 编辑 | Lemon 出品 | Python数据之道 本文来自公 ...

  4. 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)

    [虚幻引擎UE]UE5 三种模式调用API详解(案例基于免费Varest插件) 想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Vares ...

  5. java中的json_JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  6. 低速接口之SPI接口,分类,四种模式,特点

    SPI是一个环形总线结构,由ss(cs).sck.sdi.sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换. 上升沿发送.下降沿接收.高位先发送. 上升沿到来的时候 ...

  7. 跨平台应用开发进阶(四十一)使用Xcode打包 iOS 应用 archive 时四种证书的区别详解

    文章目录 一.archive 四种模式 二.相同点 三.安装方式区别 四.iOS开发者账号(企业版)申请攻略 4.1 苹果开发者账号类型 4.2 企业版开发者账号的优势是什么? 4.3 企业版开发者账 ...

  8. 【读MFiX源代码】MFiX中四种传热方式全面详解(对流、导热、辐射、反应热)并且输出以供后处理(2020-12-15更新)

    文章目录 1 目标 2 代码结构 2.1 des_time_step外层总控制 2.2 颗粒导热 2.2.1 颗粒-颗粒导热:calc_force_dem.f和des_thermo_cond_mod. ...

  9. 滤波器有几种?四种滤波器之间对比详解

    转至:http://www.elecfans.com/monijishu/tiaoxie_lvbo/578575.html 如今的滤波器已经广泛的渗透到来日常的生活中.那么最常用的四种滤波器是那种呢? ...

最新文章

  1. 机器学习PAL基本概念
  2. JavaScript frame跨域获取元素、修改元素属性、调用其他frame页面方法
  3. kaggle的kernel-only比赛中出现Your Notebook cannot use internet access in this competition解决方案
  4. html怎么导入js编辑,three.js怎么导入html
  5. web前端开发论文写作_外语论文文献引言格式—MLA Style
  6. adb命令安装apk 来学习吧
  7. cocos2d-x Schedule详解
  8. 剑指offer(C++)-JZ76:删除链表中重复的结点(数据结构-链表)
  9. 信息资源管理——总结
  10. 进阶06 List集合
  11. 组态王 力控 MCGS 瑞尔 杰控等国内组态软件一点看法
  12. 传统IT架构转型,从云原生平台到微服务应用构建
  13. mysql拼接字符串
  14. 操作系统中常用的进程调度算法
  15. mysql的to char data_数据库中的to char
  16. 国内主流加密芯片分析
  17. 点击量、点击率、访客数、的区别与作用
  18. BufferedWriter使用write方法如何换行
  19. Shell脚本之多重循环
  20. 股票数据-股票免费查询AP

热门文章

  1. 有哪些相见恨晚的学习算法的方法和技巧?学到了学到了!
  2. Python设计模式-职责链模式
  3. CSS复合选择器(后代选择器、子元素选择器、并集选择器、伪类选择器、:focus伪类选择器)
  4. Django项目中的子项目中自动生成自己想要的文件内容
  5. 三步问题(求n中方式)
  6. 在O(1)时间删除链表节点
  7. python中json的使用
  8. 我的第一个VUE示例
  9. 使用OpenCV进行图像编辑--绘画和素描
  10. 【OpenCV 4开发详解】图像连接