SPI接口通信协议详解:SPI时序、2线、3线、4线SPI及4种常用工作模式

article/2025/9/21 13:58:25

简介

SPI通信原理比I2C要简单,它主要是主从方式通信。这种模式通常只有一个主机和一个或者多个从机,标准的SPI是4根线,分别是SSEL(片选,也写作 SCS)、SCLK(时钟,也写作SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和MISO(主机输入从机输出Master Input/Slave Output)。

单片机系统中最常用的通信协议有三种,分别是UART、I2C和SPI。

SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速的、全双工、同步通信总线,标准的SPI也仅仅使用4个引脚,常用于单片机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。

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根线的这种形式。

SPI的四种工作模式

SPI通信的主机就是我们的单片机,在读写数据时序的过程中,有四种模式。要了解这四种模式,首先我们得学习两个名词。

CPOL

CPOL即Clock Polarity,就是时钟的极性。

时钟的极性是什么概念呢?

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

 

CPHA

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

主机和从机要交换数据,牵涉到一个问题:主机在什么时刻输出数据到MOSI上而从机在什么时刻采样这个数据?

同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样。而一个时钟周期必定包含了一个上升沿和一个下降沿,这是周期的定义所决定的,只是这两个沿的先后并无规定。

又因为数据从产生的时刻到它的稳定是需要一定时间的,那么,如果主机在上升沿输出数据到MOSI上,从机就只能在下降沿去采样这个数据了。反之如果一方在下降沿输出数据,那么另一方就必须在上升沿采样这个数据。

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

CPHA=0,就表示数据的采样是在一个时钟周期的第一个沿上,同样它是什么沿由 CPOL 决定。那么数据的输出自然就在第二个沿上了。仔细想一下,这里会有一个问题:就是当一帧数据开始传输第一个 bit 时,在第一个时钟沿上就采样该数据了,那么它是在什么时候输出来的呢?有两种情况:一是 SSEL 使能的边沿,二是上一帧数据的最后一个时钟沿,有时两种情况还会同时生效。

四种工作模式

CPOL=1,CPHA=1为例,把时序图画出来给大家看一下,如图1所示。
 

图1 SPI通信时序图(一)

大家看图1,当数据未发送时以及发送完毕后,SCK都是高电平,因此CPOL=1。可以看出,在SCK第一个沿的时候,MOSI和MISO会发生变化。同时SCK第二个沿的时候,数据是稳定的,此刻采样数据是合适的,也就是上升沿即一个时钟周期的后沿锁存读取数据,即CPHA=1。注意最后最隐蔽的SSEL片选,这个引脚通常用来决定是哪个从机和主机进行通信。

剩余的三种模式,也把图画出来了。简化起见把MOSI和MISO合在一起了,大家仔细对照看看研究一下,把所有的理论过程都弄清楚,有利于你对SPI通信的深刻理解,如图2所示。

图2 SPI通信时序图(二)

结语

在时序上,SPI是不是比I2C要简单的多?

没有了起始、停止和应答,UART和SPI在通信的时候,只负责通信,不管是否通信成功;而I2C却要通过应答信息来获取通信成功失败的信息。相对来说,UART和SPI的时序都要比I2C简单一些。

 

 


http://chatgpt.dhexx.cn/article/0d62Nnhv.shtml

相关文章

详解UART、I2C、SPI常用通信协议(全是细节)

前言 UART、I2C和SPI是我们在嵌入式开发中比较常见的通信协议了,没有最好的通信协议,每个通信协议都有自己的优缺点。如果想要通信速度快,SPI 将是理想的选择;如果用户想要连接多个设备而不是过于复杂,I2C 将是理想的选…

【总线】SPI 通信协议

目录 SPI总线协议概述 串行与并行通信 SPI通信介绍 SPI的工作原理 时钟 从属选择 多个从机 常规方法 菊花链方法 MOSI 和 MISO SPI 数据传输的步骤 SPI 的优缺点 优点 缺点 文章参考 SPI总线协议概述 SPI是许多不同设备使用的通用通信协议。例如,SD卡…

SPI通信协议详解,一篇就够!

一、什么是SPI? SPI 的英文全称为 Serial Peripheral Interface,顾名思义为串行外设接口。SPI 是一种同步串行通信接口规范,主要应用于嵌入式系统中的短距离通信。该接口由摩托罗拉在20世纪80年代中期开发,后发展成了行业规范。 …

2021年游戏项目的十大编程语言:C++、Java、C#均上榜

在这个技术驱动的世界里,游戏行业是全球增长最快的行业之一。在每一款华丽精美的电子游戏背后,都有一种编程语言,为用户提供优质的体验。游戏开发者利用顶级的编程语言来构建游戏。不同的游戏项目使用了不同的编程语言,这取决于游…

2021 编程语言排行榜

点击“终码一生”,关注,置顶公众号 每日技术干货,第一时间送达! IEEE Spectrum 发布了 2021 年编程语言排行榜,官方的标题是:Python 在新技术领域依然是主导地位。 Python 近几年随着大数据、数据挖掘、人…

2020 年最牛逼的 10 门编程语言

先看再点赞,给自己一点思考的时间,微信搜索【沉默王二】关注这个有颜值却假装靠才华苟且的程序员。 本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题。 对于很多初学编程的人来说,尤其是马上要入…

世界上到底有多少种编程语言?

最近,网站上看到一个很有意思的问题:世界上到底有多少种编程语言? 查遍网络之后,仍然没有找到准确答案,只知道几千的数量是有的,但是我们常用的也就几十来个,其中最常见的便是Java、Python、C、…

世界上最难的5种编程语言

世界上最难的5种编程语言 每个程序员都熟悉许多编程语言。许多编程语言都是高级的,它们的语法是人类可读的。然而,也有一些低级语言,对于一个人来说,读起来很困难,但是可以理解。然而,您是否遇到过一种既不…

2018年最流行的十大编程语言,有你用的吗?

对于编程界的初学者来说,最大的困难是决定从何处入手,或者应掌握哪种语言才能在职场上平步青云。有时,专业程序员也面临学习一门新语言似乎更卓有成效的情形。 无论是什么原因,下面列出了世界上最流行的编程语言,以便了…

5月编程排行榜出炉,最佳编程语言是谁?

技术的发展日新月异,作为开发者,应该时刻关注这些变化,不断学习才能跟上时代步伐。 编程语言层出不穷,关于“ 最佳编程语言 ”的争论也从未停止,网友们各抒己见...... 网友A: 人生苦短,我选Pyt…

十大热门编程语言的介绍

小编给大家分享一篇关于现阶段十大热门编程语言的文章:经过流行的搜索引擎,如谷歌,必应,雅虎,维基百科,亚马逊,YouTube和百度,用于计算评级;得出十大热门编程语言排行榜的…

GitHub2022年十大热门编程语言榜单

全球知名代码托管平台 GitHub发布的2022年GitHub Octoverse年度报告公布了全球最流行的十大编程语言,其中JavaScript蝉联第一,Python位列次席。 编程是技术革新的核心,对于所有的编程开发人员来说,对世界范围内编程语言发展和趋势…

2021年十大热门编程语言

几乎可以肯定,每个人都知道,在当今数字先进的世界中,技术是如何快速变化的。经常通过定期更新和改进来观察替代技术之间的相互超越已成为一种正常现象。在这一切之中,一个领域因技术世界的如此多变的性质而受到很大的影响&#xf…

十大编程语言,每一个都不容易学,但每一个又很有用,黑客必备

一定要注意,您选择的编程将在很大程度上取决于您要定位的系统类型和计划使用的漏洞。因此,根据您的策略,任何语言都会很棒。 1. C语言 它被称为“所有编程语言之母”,也是Hacking社区中的关键语言。今天,我们拥有的大…

抖音照片图集怎么制作,如何将图片做成视频上传抖音?

抖音最近被很多人当做茶余饭后不可或缺的娱乐项目,丰富了很多人的业余生活,也成就了很多抖音人,经常在抖音上会看到很多不是直接拍摄的视频,而是通过图片图集的方式展示出来的视频,图片中还可以配上相应的文字&#xf…

手把手教你抖音怎么用图片做视频!

抖音是一款短视频APP,在抖音里人们可以上传视频,录制视频,看到别人的视频,抖音目前很受年轻人的欢迎,使用抖音的人高达几个亿;我们在抖音上看到的照片视频,其实大部分是在电脑制作后上传的一般比…

如何用照片做抖音视频?这样剪辑电子相册

如果只是在抖音中拍摄视频的话,相信这个操作大家都会吧?毕竟现如今的抖音可以说是全民在用了,关于如何拍摄视频发布到抖音,这个操作也几乎是人人都会的。但是拍摄视频你会,你又知道应该如何用照片来制作一个抖音视频吗…

[短视频运营] 抖音最新风口,漫改图文号,变现模式非常简单

这几天抖音出现了一个新的风口,千万不要错过,抖音召开了抖音创作者大会,在大会上有几件事的披露引起了广泛关注,对于每一个在抖音上的创作者来说都是重大的事件。 ​第一、抖音在大会上确定未来一年将会把更多的重点放在图文和中…

抖音开放平台-视频切片-视频分片上传-不合法的参数ID-不合法的对象ID

问题描述 1、最近遇到个问题,做业务需要管理几个抖音账号,用抖音开放平台做分片上传视频,多次返回不合法参数id,提交工单之后给的回复没有任何参考价值。 2、例如视频文件按15M进行切片,调用分片上传初始化接口&#…

抖音上css照片动态旋转怎么做,抖音里单张图片平移视频怎么制作?影音制作实现一张图片从左到右滑动视频效果...

今天的影音制作,是实现视频画面中有一张图片从左往右慢慢滑动的视频效果。一张横屏图片要制作成竖视频的时候,要么就会出现图片显示不全的情况,要么显示全了就会出现上下有黑边的情况,基本很难解决这个问题~但是小编今天通过这款常…