良许Linux教程网 干货合集 SPI可以像I2C挂多个设备吗?

SPI可以像I2C挂多个设备吗?

最近我看到一些讨论,关于SPI接口是否可以像I2C一样连接多个设备。

简单来说,这就是一主多从的问题。

实际上,SPI是在I2C之后才出现的,因此在设计时就考虑到了这种情况。

本文将介绍一些关于SPI接口的内容。

SPI全称为Serial Peripheral Interface,是一种串行外设接口。

SPI是由摩托罗拉于1985年前后开发的,是一种适用于短距离设备间通信的同步串行接口。

自那时以来,SPI接口已成为许多半导体制造商、特别是微控制器(MCU)和微处理器(MPU)采用的标准。

SPI总线是一种4线总线,通常由一个主设备和一个或多个从设备组成,至少需要使用4根线,但事实上也可以只用3根。

其中:

  • MOSI(Master Output Slave Input)是主设备的数据输出,从设备的数据输入。
  • MISO(Master Input Slave Output)是主设备的数据输入,从设备的数据输出。
  • SCLK(Serial Clock)是时钟信号,由主设备产生。
  • SS(Slave Select)是从设备的选择信号,由主设备控制。
image-20231030220835503
image-20231030220835503

上面的SS信号,也可以理解为CS信号,一般是低电平有效,所以也是NSS(非)信号;

CS:Chip Select,片选信号(从设备使能/选择信号),由主设备控制;

一主一从

最基本的SPI通信就是一主一从,比如:一个STM32作为主机,一个W25Q16(SPI Flash)作为从机。还有两个MCU之间进行SPI通信等。

image-20231030220839147
image-20231030220839147

上图例子是主机发送一个字节数据(0x53),从机应答一个字节数据(0x46)。

一主多从

SPI可以一主一从(一个主机,一个从机),但也可以一主多从。一主多从常见有两种连接方式。

A.常规

通常,每个从机都需要一条单独的SS线,要与指定的从机通信,将该从机的SS线设为低电平,并将其余的保持为高电平即可。

image-20231030220842342
image-20231030220842342

B.一条SS信号

某些应用只需要一条NSS即可(比如:移位寄存器),对于这种布局,数据从一个从设备移位到另一个从设备。

image-20231030220844725
image-20231030220844725

SPI数据传输

SPI的通信比较简单,一个时钟传输一位数据(主机 -> 从机,或者从机 -> 主机)。

SPI时钟

理论上SPI的时钟频率可以做到很大,一般几MHz~几百MHz,拿常见的W25Q16来说,SPI最高支持80MHz。

SPI通信速率要结合实际情况,不能超过主机或从机支持的最大时钟频率。

SPI数据

SPI的数据分两个方向:

MOSI:****主机 -> 从机

MISO:****从机 -> 主机

SPI通信有一个“缺点”:没有指定的流控制,没有应答机制确认是否接收到数据。

可以理解为:不知道是什么时候主机发给从机,什么时候从机发给主机,到底该发多少字节数据等。

此时,需要通信的主机和从机达成约定,一般由主机进行控制读写的操作。

比如下面这个读写SPI Flash数据的操作:

image-20231030220848145
image-20231030220848145

前面1字节是指令,紧接着再3字节(24位)地址,都是由主机发送给从机。之后,主机读取数据(由从机发送出来)。

时钟极性和相位

除了设置时钟频率外,主机还必须配置与数据有关的时钟极性和相位。

image-20231030220852000
image-20231030220852000

CPOL确定时钟的极性,极性可以通过简单的逆变器进行转换。

CPHA确定相对于时钟脉冲的数据位的时序(即相位)。

一般集成有SPI外设的处理器,都有SPI相关的配置寄存器,拿STM32来说,参考手册里面有详细介绍SPI配置的信息。

建议大家结合时序图理解,不要死记硬背。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部