百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

通信协议:SPI协议的组成和四种工作模式

bigegpt 2024-08-02 11:00 69 浏览


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

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


1、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 通信配置为全双工的连接方式:

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


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

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


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

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


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


2、SPI 的通信协议

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

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

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

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


(1)起始信号

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


(2)停止信号

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


(3)数据有效性

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


(4)时钟的同步

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

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 时钟的第二个边沿采样。时序图如下:

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


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

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


总结:

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

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

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


作者简介:

本人95后技术男,从事嵌入式软件开发,专注于技术成长和技术分享。目标是每天进一步一点点,通过技术改变自己的生活,创造自己的美好未来!如果你也对嵌入式感兴趣,欢迎关注我呀!


声明:

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

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

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...