spi时序图怎么分析,怎么看懂spi时序图

article/2025/9/18 1:51:20

我做产品的时候,最怕就是做IIC和SPI的通信。

这两种协议时序哪怕是延时时间有误差,都有可能导致通信不上。

出现问题的时候,如果没设备也很难排查问题到底出在哪里。

有时候这个产品写好的时序程序,换一个单片机用同一个程序移植过去就不行了。

而且很多公司都没有设备可以调试这些协议,大多数时候都是完全靠蒙。

今天就拿新手比较头痛的SPI来进行时序图的分析和讲解,看不懂你打我!

我记得第一次SPI通讯的时候,完全是照抄网络上的程序,因为芯片手册的时序图看起来太可怕了,根本看不懂。

后面各种模拟时序写多了,才有了经验,然后用经验去理解数据手册以及网络上的教程

很多新手看各种数据手册和教程被吓到了,其实很多时候不是你的问题,而是数据手册和教程写的太学术化了。

举个例子,就像SPI协议用CPOLCPHA真值表来选择不同的模式。

因为在很多SPI接口芯片的数据手册根本没提CPOLCPHA这两个东西,那要怎么知道芯片的通讯模式?

其实是要我们自己根据芯片手册的时序图去分析模式的,而不会直接告诉你是用的哪个模式。

所以在看时序之前,我们先要了解CPOLCPHA到底有啥区别。

CPHA用来控制数据是在第一个跳变沿还是第二个跳变沿采集的

通过上图可以看到:

CPHA=0的时候,数据是在第一个跳变沿的时候就会被采集

CPHA=1的时候,数据是在第二个跳变沿的时候才会被采集

那问题来了,到底是上升沿还是下降沿采集?

这个就由CPOL来决定了:

CPOL=0的时候是上升沿采集。

CPOL=1的时候是下降沿采集

除此以外,CPOL还决定了我们时钟线SCLK空闲时的状态。

CPOL=0的时候表示SCLK在空闲时为低电平。

CPOL=1的时候表示SCLK在空闲时为高电平

Ok,明白了这个,我们再分析4种模式的时序图

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

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

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

时序图如下:

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

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

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

时序图如下:

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

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

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

时序图如下:

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

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

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

时序图如下:

这样看是不是对4种模式的区别比较清晰了?

下面,我们再拿OLED的驱动芯片SSD1306的时序图来作为实战讲解。

SSD13064线SPI通讯时序如下:

从这个时序图可以看出几个关键点:

  1. 在发送数据之前,要把CS引脚拉低。
  2. D/C一般是用来控制发送命令还是数据的。
  3. 数据在第二个SCLK跳变开始传输。
  4. 数据在SCLK上升沿的时候进行传输,每次发送一个Bit,高位在前。

所以,由这个时序图可以判断出来,用的是SPI模式3的通讯方式。

知道这个之后,你就知道单片机的硬件SPI模式要怎么配置了(下图以STM32为例)

ok,今天时间关系,就先写到这里,如果赞多的话再回来更。


http://chatgpt.dhexx.cn/article/teXkGIJF.shtml

相关文章

怎么看懂单片机时序图?

本人没有上过单片机相关的专业课,是在《计算机系统结构》里遇见的时序图。由于看不懂加之老师没有专门讲,因此自行查阅了相关的视频和博客。(参考视频已放在文末) 网上资源贫瘠,不过我也不需要太过深入的知识。 大家…

UML系列——时序图(顺序图)

引言 用例图、类图、活动图、时序图之间是什么关系? 时序图有什么作用? 先来模拟一下三国演义的赤壁之战的时序图,先知道它到底长什么样子,再深入介绍: 小伙伴惊呆了,这样画战略图,一目了然&…

UML图之五——时序图

一、什么是时序图 序列图表示了系统在参与者互动执行某一个用例期间,系统内部的一群对象的协作情况。一个用例就对应一个时序图。序列图是对系统动态行为进行描述。用于用例分析和设计阶段。 二、对比 1、序列图和协作图 序列图跟协作图相似,两种图传递的意思是一样的。不…

浅谈时序图

前序: 这周基本都在肝txmini项目,不知道是不是我菜,总觉得难度还是挺高的,所以就没太多时间整理知识点了。 项目进展了快大半个月了,最后因为性能问题,我们还是选择重构原来的代码。准备用golang去重构原本…

读懂时序图

UML建模之时序图(Sequence Diagram) 时序图简介(Brief introduction)时序图元素(Sequence Diagram Elements) 角色(Actor)对象(Object)生命线(Li…

时序图的概念

一. 时序图 (Sequence Diagram) 时序图 : 显示对象之间的关系, 强调对象之间消息的时间顺序, 显示对象之间的交互; 时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。 1.时序图的…

UML之时序图详解

作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/17927131 动态图概念 : 从静态图中抽取瞬间值的变化描述系统随时间变化的行为, 动态图包括交互图活动图状态图, 这篇博客研究交互图 包括时序图和协作图; – 时序图 : 显示对象之间的关…

时序图简介

什么是时序图 来自百度百科的介绍: “又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或…

时序图

一. 时序图 (Sequence Diagram) 1.时序图的概念 时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图; 时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成消息交换, 时序图描述了类以及类之间的交换…

时序图,程序员的保命技能

最近,各个大厂都在开猿节流,程序员们在公司里,靠什么技能来“保命”? 一方面,大家要有过硬的编程基础,另一方面,对UML图的掌握也很重要。今天,我们就来说一说其中一种重要的UML图&am…

Spring Boot异步任务、异步消息

目录 1.异步任务 1.1.概述 1.2.使用 2.异步消息 2.1.概述 2.2.使用 1.异步任务 1.1.概述 举一个例子,我现在有一个网上商城,客户在界面点击下单后,后台需要完成两步: 1.创建客户订单 2.发短信通知客户订单号 这里面第2…

python_异步

深入理解 Python 异步编程 前言 很多朋友对异步编程都处于“听说很强大”的认知状态。鲜有在生产项目中使用它。而使用它的同学,则大多数都停留在知道如何使用 Tornado、Twisted、Gevent 这类异步框架上,出现各种古怪的问题难以解决。而且使用了异步框架…

httpx 与 异步

前言 HTTPX 是新一代的 python 解析库,它是一个功能齐全的 HTTP 客户端,用于Python 3,较requests(只能发送同步请求)和 aiohttp(只能发送异步请求)不同的是,它同时提供同步和异步 AP…

一文了解异步编程基础

什么是异步编程? 异步编程是指并发编程的范式,其中除了单个主应用程序线程之外,工作可以委托给一个或多个并行工作线程。这被称为非阻塞系统,其中整体系统速度不受订单执行的影响,并且多个进程可以同时发生。 函数从 …

异步函数async

什么是同步异步 在最新的ES7(ES2017)中提出的前端异步特性:async、await。 在了解async和await之前得先明白什么是同步函数,什么是异步函数。 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会…

异步(async、await)

同步与异步 同步:如果一个程序调用某个方法,等待其执行所有处理后才继续执行,我们就称这样的方法是同步的,这是默认的形式异步:异步的方法在处理完成之前就返回到调用方法,C#的async/await特性可以创建并使…

async/awiat和promise之间的区别

今天看到了一段代码 async function async1() {console.log(async1 start);await async2();console.log(async1 end); } async function async2() {console.log(async2); } console.log(script start); setTimeout(function() {console.log(setTimeout); }, 0) async1(); new …

什么是异步

文章目录 前言一、异步是什么?二、举个例子来理解异步 1.异步最典型的例子就是“回调函数”总结 前言 在vue的过程中,我们一定会遇到诸如: function(参数).then(res>{}) 形式的代码。到底怎么编译执行的呢 &#x…

Spring Boot 基础学习之(五)页面通过自定义LocaleResolver组件实现网页页面的的中英文转换

本次项目所有能够使用的静态资源可以免费进行下载 静态资源 在前端网页,是不是看见过这样的功能 基础网页:中文表示 点击下面的English 按钮网页显示文字开始切换 通过功能性按钮实现中英文切换,在浏览器中,都带着一个功能叫翻…

网页中文转英文(国际化)

背景: 我的项目是已经完成的项目,因为要拓展海外市场,需要支持英文。 采用的方式是添加配置文件,见下文详细步骤。 本文基本转自:http://blog.csdn.net/wuhawang/article/details/52228589 在他的基础上给大家一点提示…