SPI协议介绍

这篇具有很好参考价值的文章主要介绍了SPI协议介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1- SPI协议介绍

SPI(Serial Peripheral Interface)是一种高速全双工同步串行通信协议,它由一个主设备(Master)和一个或多个从设备(Slave)组成,其中主设备启动与从设备的同步通信,从而完成数据的交换。

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,一般需要4根线,事实上3根也可以。
SPI协议介绍

  • MISO(Master Input Slave Output)/SDI(Serial Data Input)
    主设备数据输入,从设备数据输出。
  • MOSI(Master Output Slave Input)/SDO(Serial Data Output)
    主设备数据输出,从设备数据输入。
  • SCLK(Synchronous Clock)
    同步时钟信号,由主设备产生。
  • CS(Chip Select)
    从设备使能信号,由主设备控制。当总线上有多个从设备的时候,主设备如果需要和某个从设备通信,就将该设备对应的片选引脚拉低使能。

由于SPI采用两根数据线实现全双工的数据通信,从而能达到比12C更快的通信速率。12C协议v2.1规定了100K, 400K和3.4M三种速率(bps)。而SPI是一种事实标准,并没有一个官方标准,已知已有的器件SPI 速率可达到50Mbps,具体到产品中SPI的速率主要看主从器件SPI控制器的性能限制。此外, SPI没有相应的流控和应答机制,这样跟IC协议相比在数据可靠性上有一定的缺陷。


2- SPI总线传输模式

Master设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse),时钟脉冲组成了时钟信号(Clock Signal),钟信号通过时钟极性(CPOL, Clock Polarity)和时钟相位(CPHA, Clock Phase)控制着两个SPI设备间何时数据交换以及何时对接收到的数据进行采样,来保证数据在两个设备之间是同步传输的。

  • CPOL(Clock Polarity,时钟的极性):规约SPI总线在空闲时,时钟信号是高电平还是低电平。
  • CPHA(Clock Phase,时钟的相位):规约 SPI设备是在时钟信号上升沿还是下降沿触发数据采样。

SPI总线传输也就出现了如下四种模式

  • 模式0-CPOL=0, CPHA=0: SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换。
  • 模式1-CPOL=0,CPHA=1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换。
  • 模式2-CPOL=1, CPHA=0:SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换。
  • 模式3-CPOL=1,CPHA=1: SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换。
    SPI协议介绍

其中比较常用的模式是模式0和模式3,为了更清晰的描述SPI总线的时序,下图展现了模式0下的SPI时序图。

从途中我们可以清晰地看出,在模式0下总线空闲时, SCK串行时钟线为低电平,当SS被主机拉低以后,数据传输开始,数据线MOSI和MISO的数据切换(Toggling)发生在时钟的下降沿(下图的黑色虚线),而数据线MOSI和MISO的数据采样(Sampling)发生在数据的正中间(下图中的灰色实线)。

SPI协议介绍


3- SPI总线数据交换

一个Slave设备要想能够接收到Master发过来的控制信号,必须在此之前能够被Master设备进行访问(Access)。所以,Master设备必须首先通过拉低 SS/CS管脚对Slave设备进行片选,把想要访问的Slave设备选上。

SPI设备间的数据传输之所以又被称为数据交换,是因为SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)“或者"接收者(Receiver)”。事实上SPI设备在通信时两边各有1个移位寄存器,这样在发送一个bit的同时将会收到对方1个bit的数据,当发送完8bit数据后,也将收到对方的8bit数据,这也就意味着完成了1个byte的数据交换。

SPI协议介绍

SPI数据传输过程实际上就是主从设备两个移位寄存器的数据交换过程,所以SPI的读功能实际上可以由SPI的写功能实现,即随便写一个字节的无效数据(Dummy Data)即可。在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样,如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致SPI物理模块最级生效,因此,在程序中一般都会在SPI传输完数据后,正在联网识别并翻译。去读取 SPI设备里的数据,即使这些数据(Dummy Data)在我们的程序里是无用的。


3- SPI与I2C对比

前面我们讲了I2C,现在我们来对比一下I2C和SPI的区别:文章来源地址https://www.toymoban.com/news/detail-480281.html

  • SPI是全双工,而IIC是半双工
  • I2C支持多主机多从机,SPI只能有一个主机
  • 从GPIO占用上来看,IIC占用更少的GPIO,更节省资源
  • SPI的数据位宽更灵活,可以根据需要选择多位数数据宽度
  • SPI协议没有响应机制,主机无法得知从机是否接收到所发的数据,如果不采用一些方法的话可能会导致数据丢帧
  • 正是因为没有复杂的响应机制,SPI协议可以做到非常高的速率,每一个SCLK都可以进行数的传输,通过引入CRC校验等校验方法,可以即高速传输数据,又能保持数据的准确度。
  • I2C通过期间地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS片选信号选择从机,每增加一个从机就要多占用一个GPIO,当然也可以通过加入译码器来实现多从机控制

到了这里,关于SPI协议介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SystemVerilog interface详细介绍

            System Verilog中引入了接口定义,接口与module 等价的定义,是要在其他的接口、module中直接定义,不能写在块语句中,跟class是不同的。接口是将一组线捆绑起来,可以将接口传递给module。         一)通过接口在module之间或内部进行信号传递,模块的输入列表

    2024年02月11日
    浏览(28)
  • catface,使用Interface定义Controller,实现基于Http协议的RPC调用

    : Interface定义Controller;feign服务端;feign interface;Http RPC;cat-client;cat-server;catface; 概   要: catface ,使用类似 FeignClient 的Interface作为客户端发起Http请求,然后在服务端使用实现了这些Interface的类作为 Controller 角色,将客户端、服务端通过Interface耦合在一起,实

    2024年02月09日
    浏览(48)
  • SPI通信协议&SPI通信外设

    目录 SPI 介绍 硬件电路 移位示意图  软件SPI SPI时序基本单元  SPI时序​编辑 W25Q64  硬件电路 W25Q64框图 Flash操作注意事项 指令集  硬件SPI SPI框图  主模式全双工连续传输 非连续传输  推挽输出 ,高低电平都有很强的驱动能力,使得上升沿和下降沿都很迅速。   当ss为高电

    2024年02月10日
    浏览(48)
  • 通信协议(二)——SPI协议

    1.1 概念 SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于EEPROM、Flash、RTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以

    2023年04月08日
    浏览(36)
  • SPI协议详解(Standard SPI、Dual SPI和Queued SPI)

    (1)SCLK:时钟线; (2)MOSI(master output slave input):主设备输出,从设备输入,单向传输; (3)MISO(master input slave output):主设备输入,从设备输出,单向传输; (4)CS(chip select):片选信号,用于主片选中从片; (1)SPI(serial peripheral interface)是串行外设接口的缩写; (2)SPI是一种高速的、全

    2024年01月21日
    浏览(31)
  • FPGA:三大协议(UART、IIC、SPI)之SPI

    摘要:1、本文介绍SPI物理层面连接(通过哪几条线通信),2、本文介绍SPI时序(通过哪种方式进行器件之间交流)。3、提供主机和从机verilog代码。4、仅供自己参考 一、SPI物理层连接 (1)有四根线连接:CS_N(片选信号--主机发出)、miso(从机发出,主机接收)、mosi(主机发

    2024年02月14日
    浏览(42)
  • 【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

    随着嵌入式系统的迅猛发展,STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中,串行外设接口(SPI)是一种常见且重要的通信协议。为了更便捷地配置和使用SPI,STMicroelectronics提供了一款强大的工具——STM32 CubeMX。本文将着重介绍STM32 CubeMX中SPI的层次结构

    2024年02月20日
    浏览(43)
  • SPI通信协议及基于Arduino的SPI通信例程

    一、SPI通信协议介绍 SPI通信协议(Serial Peripheral Interface)是一种同步串行通信协议,由Motorola公司在1980年代初开发。SPI协议常用于单片机、嵌入式系统和外围设备之间的通信。 SPI协议使用四根线进行通信:时钟线(SCLK)、数据输入线(MOSI)、数据输出线(MISO)和从机选择

    2024年02月07日
    浏览(40)
  • SPI通信协议

    本文重点介绍的是SPI通信协议,内容是来自野火视频教程,本人只是做一些简单的记录和总结。 `

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包