首页 > 其他分享 >通信协议 | 一文搞懂SPI通信协议

通信协议 | 一文搞懂SPI通信协议

时间:2024-07-05 16:58:54浏览次数:8  
标签:主机 通信协议 模式 SPI 从机 信号 搞懂 时钟

SPI 的英文全称为 Serial Peripheral Interface,顾名思义为串行外设接口。

SPI 是一种同步串行通信接口规范,主要应用于嵌入式系统中的短距离通信。该接口由摩托罗拉在20世纪80年代中期开发,后发展成了行业规范。

SPI 是一种高速的、全双工的、同步的通信总线,并且至多仅需使用 4 根线,节约了芯片的管脚,SPI主要应用于EEPROM、FLASH、ADC、DAC等芯片,还有数字信号处理器和数字信号解码器之间

SPI 设备之间采用全双工模式通信,是一个主机和一个或者多个从机的主从模式。主机负责初始化帧,这个数据传输帧可以用于读与写两种操作,片选线可以从多个从机选择一个来响应主机的请求。

来自主机或从机的数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。SPI接口可以是 3 线式或 4 线式。本文重点介绍常用的 4 线 SPI 接口。

接 口

4 线 SPI 器件有四个信号:

  • 时钟(SPICLK,SCLK)
  • 片选(CS)主机输出
  • 从机输入(MOSI)主机输入
  • 从机输出(MISO)

产生时钟信号的器件称为主机。主机和从机之间传输的数据与主机产生的时钟同步。同I2C接口相比,SPI器件支持更高的时钟频率。用户应查阅产品数据手册以了解SPI接口的时钟频率规格。

SPI接口只能有一个主机,但可以有一个或多个从机。图1 显示了主机和从机之间的SPI连接。

图1. 含主机和从机的SPI配置

来自主机的片选信号用于选择从机。这通常是一个低电平有效信号,拉高时从机与SPI总线断开连接。**当使用多个从机时,主机需要为每个从机提供单独的片选信号。**本文中的片选信号始终是低电平有效信号。

MOSI和MISO是数据线。MOSI将数据从主机发送到从机,MISO将数据从从机发送到主机。

数据传输

要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。片选通常是低电平有效信号。因此,主机必须在该信号上发送逻辑0以选择从机。

SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI)上的数据)同时进行。串行时钟沿同步数据的移位和采样。

SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。欲确定使用SPI接口传输的数据位数,请参阅器件数据手册。

时钟极性和时钟相位

在 SPI 中,主机可以选择时钟极性和时钟相位。在空闲状态期间,CPOL 为设置时钟信号的极性。空闲状态是指传输开始时 CS 为高电平且在向低电平转变的期间,以及传输结束时 CS 为低电平且在向高电平转变的期间。CPHA 为选择时钟相位。

根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。根据 CPOL 和 CPHA 位的选择,有四种SPI 模式可用。表1显示了这 4 种 SPI 模式。

表1.通过CPOL和CPHA选择SPI模式

图2至图5显示了四种SPI模式下的通信示例。在这些示例中,数据显示在MOSI和MISO线上。传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。请注意,这些图形仅供参考。要成功进行SPI通信,用户须参阅产品数据手册并确保满足器件的时序规格。

图2 给出了SPI模式0的时序图。在此模式下,时钟极性为0,表示时钟信号的空闲状态为低电平。此模式下的时钟相位为0,表示数据在上升沿采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。

图2. SPI模式0,CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出

图3 给出了SPI模式1的时序图。在此模式下,时钟极性为0,表示时钟信号的空闲状态为低电平。此模式下的时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

图3. SPI模式1,CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出

图4. SPI模式2,CPOL = 1,CPHA = 1:CLK空闲状态 = 高电平,数据在下降沿采样,并在上升沿移出

图4 给出了SPI模式2的时序图。在此模式下,时钟极性为1,表示时钟信号的空闲状态为高电平。此模式下的时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据在时钟信号的上升沿移出(由蓝色虚线显示)。

图5. SPI模式3,CPOL = 1,CPHA = 0:CLK空闲状态 = 高电平,数据在上升沿采样,并在下降沿移出

图5 给出了SPI模式3的时序图。在此模式下,时钟极性为1,表示时钟信号的空闲状态为高电平。此模式下的时钟相位为0,表示数据在上升沿采样(由橙色虚线显示),并且数据在时钟信号的下降沿移出(由蓝色虚线显示)。

多从机配置

多个从机可与单个 SPI 主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。

常规SPI模式

在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI/MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

从图6可以看出,随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。

图6. 多从机SPI配置

菊花链模式

在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。

使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。例如在图7所示的8位系统中,为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需8个时钟脉冲。

图7. 多从机SPI菊花链配置

图8显示了时钟周期和通过菊花链的数据传播。并非所有SPI器件都支持菊花链模式。请参阅产品数据手册以确认菊花链是否可用。

图8. 菊花链配置:数据传播

ADI公司最新一代支持SPI的开关可在不影响精密开关性能的情况下显著节省空间。本文的这一部分将讨论一个案例研究,说明支持SPI的开关或多路复用器如何能够大大简化系统级设计并减少所需的GPIO数量。

ADG1412是一款四通道、单刀单掷(SPST)开关,需要四个GPIO连接到每个开关的控制输入。图9显示了微控制器和一个ADG1412之间的连接。

图9. 微控制器GPIO用作开关的控制信号

随着电路板上开关数量的增加,所需GPIO的数量也会显著增加。例如,当设计一个测试仪器系统时,会使用大量开关来增加系统中的通道数。

在4×4交叉点矩阵配置中,使用四个ADG1412。

此系统需要16个GPIO,限制了标准微控制器中的可用GPIO。图10显示了使用微控制器的16个GPIO连接四个ADG1412。

图10. 在多从机配置中,所需GPIO的数量大幅增加

如何减少GPIO数量?

一种方法是使用串行转并行转换器,如图11所示。该器件输出的并行信号可连接到开关控制输入,器件可通过串行接口SPI配置。此方法的缺点是外加器件会导致物料清单增加。

图11. 使用串行转并行转换器的多从机开关

另一种方法是使用SPI控制的开关。此方法的优点是可减少所需GPIO的数量,并且还能消除外加串行转并行转换器的开销。

如图12所示,不需要16个微控制器GPIO,只需要7个微控制器GPIO就可以向4个ADGS1412提供SPI信号。

开关可采用菊花链配置,以进一步优化GPIO数量。在菊花链配置中,无论系统使用多少开关,都只使用主机(微控制器)的四个GPIO。

图12. 支持SPI的开关节省微控制器GPIO

图13用于说明目的。ADGS1412数据手册建议在SDO引脚上使用一个上拉电阻。为简单起见,此示例使用了四个开关。随着系统中开关数量的增加,电路板简单和节省空间的优点很重要。

图13. 菊花链配置的SPI开关可进一步优化GPIO

在6层电路板上放置8个四通道SPST开关,采用4×8交叉点配置时,ADI 公司支持 SPI 的开关可节省20%的总电路板空间。

SPI 协议的优缺点

SPI 的优点在于它有着比 I2C 更高的吞吐量,不被最大时钟速度所限制,可实现潜在的高速、极为简单的硬件接口,外围电路使用的上拉电阻是比 I2C 协议更少的。

这意味着它具有比I2C的功耗更低、从机的时钟来源来自主机设备,无需新增精密振荡器、从机不需要唯一的地址、相对于并行接口而言,使用的引脚数目大大减少等优点。

但同时有着一定的缺点,例如SPI没有带内寻址、当使用多个不同模式的从机设备时,主机设备切换模式时重新初始化,会使得访问从机设备速度变慢、SPI从机设备没有硬件流控,只能通过主机自主的延迟下个时钟周期到来的时间、仅能在短距离通信等缺点。

但能在避免SPI的缺点的方向来应用SPI的话,SPI的优点让它远远优于其他协议。


原文链接:一文搞懂SPI通信协议

标签:主机,通信协议,模式,SPI,从机,信号,搞懂,时钟
From: https://blog.csdn.net/weixin_45264425/article/details/140163365

相关文章

  • 【SPIE 独立出版 | 高录用稳检索 | 过往4届均已检索】第五届计算机视觉和数据挖掘国际
    第五届计算机视觉与数据挖掘国际学术会议(ICCVDM2024)将于2024年7月19-21日在中国长春举行。此前,ICCVDM系列会议于2020年在中国西安、2021年在中国长沙(线上)、2022年在中国呼伦贝尔(线上+线下)、2023年在中国长春(线上+线下)皆已成功举办。ICCVDM为世界各地该领域的专家、学者......
  • 脉冲神经网络(Spiking Neural Network,SNN)相关论文最新推荐(一)
    用稀疏代理梯度直接训练时态脉冲神经网络论文链接:www.sciencedirect.comBenchmarkingArtificialNeuralNetworkArchitecturesforHigh-PerformanceSpikingNeuralNetworks论文链接:www.mdpi.comHierarchicalspikingneuralnetworkauditoryfeaturebaseddry-typet......
  • sping-10
    什么是bean装配   在Java中,bean装配是一种将对象(也称为bean)与其他对象之间建立关联关系的方法。这种装配可以通过手动编写代码来实现,也可以使用依赖注入框架(如Spring)来自动完成。在bean装配中,有三种主要的方式:构造函数注入、setter方法注入和自动装配。构造函数注入......
  • 一文搞懂到底什么是 AQS
    前言日常开发中,我们经常使用锁或者其他同步器来控制并发,那么它们的基础框架是什么呢?如何实现的同步功能呢?本文将详细讲解构建锁和同步器的基础框架--AQS,并根据源码分析其原理。一、什么是AQS?1.AQS简介AQS(AbstractQueuedSynchronizer),抽象队列同步器,它是用来构建锁或其他......
  • SpingMvc-Day02
    SpringMVC:表述层作用:1.接受前端参数[SpringMVC简化] 2.调用业务逻辑 3.响应前端数据[SpringMVC简化]SpringMVC组件: 1.DispatcherServlet:处理全部请求 2.handlerMapping:缓存handler方法和地址 3.handlerAdapter:适配器、参数和相应简化 4.ViewResovler视图解释器:查找视图页面......
  • STM32L073RZT 调试SPI问题
    现象描述:spi通信一次后,第二次通信spi的SR寄存器异常0xFF31(MODF,CRCERR,RXNE),通信失败。以下为调用流程及相关代码:NFC_ID();NFC_REG_B_TEST(); //SPI读voidSPI_Read_Data(uint8_t*w_data,uint32_tw_size,uint8_t*r_data,uint32_tr_size){SET_SPI......
  • DEV中SpinEdit使用
    属性:      spinEdit1.BorderStyle=DevExpress.XtraEditors.Controls.BorderStyles.Office2003;//设置边框样式      spinEdit1.EnterMoveNextControl=true;//但用户按Enter键时是否将焦点移动到下一个控件      spinEdit1.ForeColor=......
  • 一文搞懂Nginx配置:轻松驾驭多域名管理的实战
    1.nginx.conf如何配置多个域名在Nginx中配置多个域名,可以通过创建单独的配置文件来实现,这样可以让配置更加清晰且易于管理。以下是配置多个域名的一个基本步骤指南:1.1.步骤1:创建域名配置文件首先,在Nginx的配置目录下创建一个用于存放各域名配置文件的目录(如果还没有......
  • C++ 彻底搞懂指针(3)
    1.数组指针、二维数组指针、字符串指针1.1定义一个数组指针前面说过,指针变量存放的是地址,它可以存放普通变量的地址,可以存放另一个指针变量的地址,当然也可以存放数组、结构体、函数的地址。如果一个指针指向了数组,就称它为数组指针,比如下面的代码就定义了一个指针p指向......
  • GuavaCache、EVCache、Tair、Aerospike 缓存框架比较
    GuavaCache、EVCache、Tair、Aerospike是不同类型的缓存解决方案,它们各有特点和应用场景。下面我会逐一分析这些缓存系统的优势、应用场景,并提供一些基本的代码示例。GuavaCache优势特点:内置在Guava库中,易于集成和使用。提供了丰富的缓存配置选项,如过期策略、缓存加载策略......