首页 > 其他分享 >通信协议:SPI协议的组成和基本原理

通信协议:SPI协议的组成和基本原理

时间:2022-11-08 22:37:26浏览次数:49  
标签:SCK 主机 通信协议 通信 SPI 基本原理 数据 时钟

SPI协议最早是由摩托罗拉公司提出的一种串行外围设备通信接口,是一种高速全双工的通信总线。它被广泛地使用在很多种产品中,比如ADC模块、LCD显示屏、存储器等设备中,包括一些需要与MCU之间有较高通讯速率要求的场合中,应用也是很广泛的。

那SPI协议到底是一种什么样的协议呢?它有什么特点?别急,一步一步来分析。

1、SPI 的硬件层

首先,SPI本质上是一种数据的通信协议,按照某些规定的协议规则进行数据的传输,完成数据的收发。

SPI通信上采用的是主从模式的通信方式,它支持一主一从、一主多从,但是不支持多主机模式。

注:主从模式指的是主机和从机之间的通信。

常见的一主多从的连接方式如下:

通信协议:SPI协议的组成和基本原理_通信协议

SPI器件的一主多从连接示意图

1.1、SPI接口的信号线

SPI协议接口总共有四根信号线,分别为SCLK、MOSI、MISO、NSS,它们的作用分别如下:

SCLK:时钟信号线。由主机产生并控制。

MOSI:主机数据输出,从机数据输入。(主出从入)

MISO:主机数据输入,从机数据输出。(主入从出)

NSS:从机片选使能信号线。该信号由主机进行控制。在一主对多从的模式下,每一个从机都需要一个NSS,用于主机选择和那个从机进行通信(一般为低电平有效)。当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备。

可知,MISO和MOSI是数据流的方向,指明了数据是从主机到从机,还是从机到主机;SCLK是时钟信号,用于数据发送过程中同步数据传输的;NSS是片选信号,用于在一主多从的通信时选择和哪个从机通信。

1.2、SPI 通信常见的连接方式

下面列举了一些SPI通信的连接方式,如下:

(1)SPI 通信配置为全双工的连接方式:

通信协议:SPI协议的组成和基本原理_通信协议_02

注:这种连接方式允许主从机之间互相进行通信,时钟均由主机产生。

(2)单工模式 —— 主机接收,从机发送

通信协议:SPI协议的组成和基本原理_通信协议_03

注:这种模式下由主机产生时钟SCK,主机只能收到从机上报的数据,不能向从机下发数据。

(3)单工模式 —— 主机发送,从机接收

通信协议:SPI协议的组成和基本原理_通信协议_04

注:这种模式下由主机产生时钟SCK,主机只能向从机下发数据,不能接收从机上报的数据。常见的应用有带SPI接口的LCD显示屏。

(4)双向通信的连接方式

通信协议:SPI协议的组成和基本原理_通信协议_05

2、SPI 的通信协议

上面说了SPI的硬件组成和一些常用的连接方式,下面分析一下SPI的协议层面的组成。

SPI 协议定义了通信的起始信号、停止信号、数据有效性、时钟同步等。它的通讯时序如下:

通信协议:SPI协议的组成和基本原理_通信协议_06

SPI通信时序图

这是一个主机的通信时序,信号线 NSS、SCK、MOSI 都是由主机控制,MISO 是由从机进行控制。其中 MOSI 和 MISO 上的数据仅在 NSS 为低时才有效,并且每个SCK 时钟周期只交换一位数据。

他的每一部分组成分别如下:

(1)起始信号

SPI通信时序图中的①为通信的起始信号,由主机控制NSS从高电平到低电平,从而选择要进行通信的从机,再通过主机产生时钟信号SCK,启动一次数据的传输。如下图:

通信协议:SPI协议的组成和基本原理_通信协议_07

(2)停止信号

SPI通信时序图中的⑥为通信的起始信号,由主机控制NSS从低电平到高电平,从而结束一次数据的传输。如下图:

通信协议:SPI协议的组成和基本原理_通信协议_08

(3)数据有效性

SPI 在 SCK 时钟的同步下进行数据的准备和采样,如通信时序图的②③④⑤所示。在 NSS 为低的情况时,在 SCK 的上升沿时 MISO 和 MOSI 进行数据准备,SCK 的下降沿时读取 MISO 和 MOSI 上的数据。在 NSS 为高时,MISO 和MOSI 上的数据无效。

通信协议:SPI协议的组成和基本原理_通信协议_09

(4)时钟的同步

SPI 的数据传输是需要 SCK 时钟信号严格同步的,每一个 SCK 周期只传输一位数据,这一个周期里要完成数据的准备和采样,且数据的输入和输出是同时进行的。如下图:

通信协议:SPI协议的组成和基本原理_通信协议_10

SPI中数据是MSB(高位) 先行或 LSB(低位)先行,在协议中是没有硬性规定,只需通信双方保持统一即可。

注意:SPI 一次数据传输可以是 8 位或 16 位为单位,每次传输的单位数不受限制。

3、SPI 的通信速率

关于SPI 的通信速率摩托罗拉公司并没有给出明确的标准和定义的。有一种说法:SPI的最大时钟频率一般是系统时钟频率的一半,意思即是SPI的速率是跟CPU有关系的,传输的速度受限于CPU处理SPI数据的能力,理论上讲CPU处理数据的速度越快,SPI的通信也可以相应的变快。

4、SPI 的工作模式

上面简单介绍了SPI的硬件组成和协议的基本组成,大致是了解了SPI的组成和通信方式,还有一个很重要的特性是需要清楚的,那就是SPI的工作模式。

SPI 一共有四种工作模式。这四种模式是通过 “时钟极性 CPOL” 和 “时钟相位 CPHA” 的电平来实现和区分的。如下:

1)CPOL=0 时,SCK 引脚在空闲状态保持低电平;

2)CPOL=1 时,SCK 引脚在空闲状态保持高电平;

3)CPHA=0 时,SCK 时钟的第一个边沿进行采样;

4)CPHA =1 时,SCK 时钟的第二个边沿进行采样。

这四种模式的形成如下:

(1)时钟相位CPHA =1 ,数据在SCK 时钟的第二个边沿采样。时序图如下:

通信协议:SPI协议的组成和基本原理_通信协议_11

从上图中可以看出,当时钟相位CPHA=1时,数据在SCK的第二个边沿开始采样。当时钟极性CPLO=1时,SCK在空闲时保持在高电平状态;反之,当时钟极性CPLO=0时,SCK在空闲时保持在低电平状态。

(2)时钟相位CPHA =0 ,数据在SCK 时钟的第一个边沿采样。时序图如下:

通信协议:SPI协议的组成和基本原理_通信协议_12

从上图中可以看出,当时钟相位CPHA=0时,数据在SCK的第一个边沿开始采样。当时钟极性CPLO=1时,SCK在空闲时保持在高电平状态;反之,当时钟极性CPLO=0时,SCK在空闲时保持在低电平状态。

总结:

SPI的四种工作模式,它们之间的不同之处就在于:

1)总线空闲时 SCK 的电平状态。(高电平还是低电平)

2)数据开始采样的时刻。(SCK的第一个边沿还是第二个边沿)

通信协议:SPI协议的组成和基本原理_通信协议_13

声明:

本文作者:嵌入式之入坑笔记

文章版权归作者所有,转载请注明出处!

标签:SCK,主机,通信协议,通信,SPI,基本原理,数据,时钟
From: https://blog.51cto.com/u_15695002/5834982

相关文章

  • 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
    开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C、SPI、1Wire接口的工具模块总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换......
  • 源码级深度理解 Java SPI
    作者:vivo互联网服务器团队-ZhangPengSPI是一种用于动态加载服务的机制。它的核心思想就是解耦,属于典型的微内核架构模式。SPI在Java世界应用非常广泛,如:Dubbo、Sp......
  • 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT中FlexSPI外设不常用的读选通采样时钟源-loopbackFromSckPad。最近碰到一个客户,他们在i.M......
  • spice手动编写spice-client_F_hawk189_新浪博客
    在 ​​spice-gtk​​ 的帮助下,spiceclient的编写非常简单.以致于我在做SpiceServer的测试的时候,顺手写了一个简单的spiceclient.把下面的一些核心部分做一个......
  • JAVA SPI机制
    什么是SPI机制?SPI(ServiceProviderInterface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不......
  • SpirngBoot请求参数验证及@Validated使用方法
    分享知识传递快乐 SpirngBoot升级到2.3之后,hibernate-validator消失,需要手动依赖spring-boot-starter-validation<dependency><groupId>org.springframework.boot</g......
  • 【转】Android之Spinner下拉列表 使用详解
    原文网址:(56条消息)Android之Spinner使用详解_浪漫主义码农的博客-CSDN博客_androidspinnerSpinner(列表选择框)的基本使用当我们的app需要用户输入数据时,除了让用户自......
  • SPI介绍
    @目录前言组成结构优缺点接线方式工作模式读写时序前言SPI是串行外设接口(SerialPeripheralInterface)的缩写,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只......
  • Sping Web Bean Scope
    下面这几篇文章看完之后,应该对requestscope和sessionscope的Bean注入到Sington的Bean时的原理。我提供了一个示例​​spring-web-scope-samples​​,基于Spring......
  • LcdTools如何编写初始化代码之--SPI指令
    在点屏过程中经常会碰到需要通过SPI接口对DriverIC下初始化代码后才能点亮,常见于LVDS、RGB屏,那如何在LcdTools上编写PX01SPI初始化代码呢?通过LcdTools帮助文档可以查看S......