详解SPI通信协议

article/2025/9/21 13:19:11

一、SPI简介

SPI,即Serial Peripheral Interface的英文缩写。从字面意思看就是串行外部设备接口,是一种全双工、高速、同步的通信总线。

SPI最早是摩托罗拉公司开发的全双工同步串行总线,用于微控制器(MCU)连接外部设备之间的同步串行通信,主要应用于Flash、数模转换器、信号处理器、控制器、EEPROM存储器等外设中。

SPI总线属于一主多从接口,和I2C不同的是,SPI 采用CS片选来控制主机与从机通信。现在的单片机几乎都支持SPI总线,其已经成为一种高速、同步、双工的通用标准,在IoT产品中得到广泛应用。

二、SPI有几根线?

SPI通常有4根线(四线制),可实现全双工通信

【SCK】: 串行时钟(Serial Clock)

【MOSI】:主发从收信号(Master Output, Slave Input)

【MISO】:主收从发信号(Master Input, Slave Output

【CS/CS】:片选信号(Slave Select)
SPI四线制
SPI应用也有3根线(三线制),实现半双工通信。SPI三线制

三、SPI通信原理

SPI模块为了和外部设备进行数据交换,可以根据外设工作要求通过配置CPHA(时钟相位,Clock Phase 决定数据传输采样和移位方式)、CPOL(时钟极性,Clock Polarity 决定时钟空闲状态电平是高电平还是低电平)来控制设备通信。
这两种模式分别对用芯片上的两个引脚,每个引脚有高低电平两种模式,所以SPI协议总共组成了4种通信模式。
SPI四种通信模式时钟极性CPOL用来配置SCLK时钟线的电平在哪种状态时是有效状态或者空闲状态。时钟相位CPHA是用来配置数据采样实在哪个边沿:
CPOL=0,当SCLK=0时处于空闲态,有效状态就是SCLK处于高电平时

CPOL=1,当SCLK=1时处于空闲态,有效状态就是SCLK处于低电平时

CPHA=0,数据采样是在第1个边沿,数据发送在第2个边沿

CPHA=1,数据采样是在第2个边沿,数据发送在第1个边沿

SPI四种通信状态SPI0:
CPOL=0、CPHA=0,SCK为低电平时处于空闲态,数据采样是在第一个边沿,也就是SCK由低电平到高电平跳变时进行采样,所以在该模式下,数据采样是在上升沿,数据发送是在第二个边沿的下降沿状态。

SPI1:
CPOL=0、CPHA=1,SCK为低电平时处于空闲态,数据采样是在第二个边沿,SCK由高电平到低电平跳变时进行采样,所以在该模式下,数据采样是在下降沿,数据发送是在第一个边沿的上升沿状态。

SPI2:
CPOL=1、CPHA=0,SCK为高电平时处于空闲态,数据采样是在第一个边沿,也就是SCK由高电平到低电平跳变时进行采样,所以在该模式下,数据采样是在下降沿,数据发送是在第二个边沿的上升沿状态。

SPI3:
CPOL=1、CPHA=1,SCK为高电平时处于空闲态,数据采样是在第二个边沿,也就是SCK由低电平到高电平跳变时进行采样,所以在该模式下,数据采样是在下降沿,数据发送是在第一个边沿的上升沿状态。

在CPOL=0时

也就是在空闲状态时时钟电平一直处于低电平状态,当他变为有效态时首先拉高电平,然后在整个有效期内进行高低电平的不断交换。
在CPHA=0时,在第一个上升沿进行数据采集,在第二个状态沿也就是下降沿进行数据发送
在CPHA=1时,在第一个上升沿进行数据发送,在第二个状态沿也就是下降沿时进行数据收集;

在CPOL=1时

在空闲状态时时钟电平一直处于高电平状态,当他变为有效态时首先拉低电平,然后在整个有效期内进行高低电平的不断交换。
在CPHA=0时,在第一个下降沿沿进行数据采集,在第二个状态沿也就是上升沿进行数据发送
在CPHA=1时,在第一个下降沿进行数据发送,在第二个状态沿也就是上升沿沿时进行数据收集;

SPI的优缺点

1.在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。但多个从设备系统中,每个从设备需要独立的片选信号,硬件上比I2C系统要稍微复杂一些。
2.SPI没有指定的流控制,没有应答机制确认是否收到数据


http://chatgpt.dhexx.cn/article/7tSm8IFI.shtml

相关文章

stm32中常见的通信协议之SPI

目录 1.SPI总线2.SPI的寻址方式3.SPI的工作原理总结4.SPI的通讯过程5.SPI的极性和相位6.IIC和SPI的异同7.stm32中SPI配置中常用的寄存器8.stm32中相关库函数 1.SPI总线 SPI是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信协议;SPI采用主…

【通信协议】一文搞懂SPI

SPI总线简介 SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 接口定义 SPI接口共有4根信号线,分别是:片选信号、时钟信号、串行输出信号、串行…

SPI 通信协议 最详细解读!!!

SPI(Serial Peripheral Interface,串行外围接口)是一种高速、全双工、同步的通信总线,主要应用在EEPROM、FLASH、实时时钟、AD转换器上,以及数字信号处理器和数字信号解码器之间。 信号线 SPI有四根信号线:…

SPI 通信协议详解

SPI通信协议详解 写在最前: 本文讲述了SPI通信协议的基本内容包括如下 SPI的基础知识SPI的读写时序 本文重点参考 英文维基百科 中文维基百科 百度百科 注意: 倘若读者有足够的耐心和英文水平,强烈建议自行去英文维基百科去阅读相关知识。 相关链接: SPI…

通信协议篇——SPI通信

通信协议篇——SPI通信 1.简介 SPI(Serial Peripheral Interface)是一种高速、同步、全双工串行通信总线,采用主从机通信模式,主要应用在EEPROM,FLASH,实时时钟,AD转换器等。 2.原理 通信方…

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

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

详解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社区中的关键语言。今天,我们拥有的大…