一篇易懂的SPI通讯指南

SPI概念

SPI(Serial Peripheral interface, 串行外设接口)是微处理控制单元(MCU)和外围IC(如传感器、ADC、DAC、驱动芯片和外部存储设备等)之间进行通信的同步串行端口,其通信速率一般可以从几千bps到几百Mbps甚至更高, 具体的SPI通信速率取决于主设备和从设备的规格和性能,以及他们之间的协商和支持能力。
在这里插入图片描述
SPI是一种全双工,同步,主从式接口,涉及两个主要角色:主设备(Master)和从设备(Slave)。SPI接口可以是3线式或4线式,这里重点介绍常用的4线SPI接口。4线SPI接口有四个信号:时钟信号(SCLK),片选信号(SS/CS),主设备输出从设备输入信号(MOSI)和主设备输入从设备输出信号(MISO),如下所示:在这里插入图片描述

其中,

SCLK(Serial Clock):时钟信号线,由主设备提供,用于同步数据传输。

MOSI(Master Out, Slave In):主设备输出,从设备输入,用于主设备向从设备发送数据。

MISO(Master In, Slave Out):主设备输入,从设备输出,用于从设备向主设备发送数据。

SS(Slave Select):从设备选择信号线,由主设备控制,用于选择要与主设备通信的从设备。

SPI原理

利用四线SPI接口可以构建不同SPI模式(拓扑方式),比如单主单从,单主多从和菊花链等模式,接下来就结合不同SPI模式来分别介绍SPI工作原理。

1)单主单从模式

单主单从模式,即主设备的SCLK、MOSI和MISO连接到从设备的相应引脚。从设备与主设备之间只有一组SCLK、MOSI和MISO线连接,如下所示:在这里插入图片描述
其基本原理是:

首先是时钟同步,主设备产生SCLK,控制数据传输的时序。时钟信号由主设备提供,并在主设备和从设备之间同步传输。在这里插入图片描述
然后是片选信号,主设备将SS/CS引脚切换到低电压状态,从而激活了从设备。在这里插入图片描述
最后是数据传输过程,主设备通过MOSI线向从设备发送数据。从设备接收到数据后,将其通过MISO线传输给主设备。主设备和从设备之间的数据传输是同时进行的。在这里插入图片描述
2)单主多从模式

单主多从模式,即主设备的SCLK和MOSI连接到每个从设备的相应引脚,从设备的MISO连接到主设备的MISO引脚,每个从设备有独立的SS引脚与主设备连接,主设备通过选择SS来选择要与之通信的从设备。在这里插入图片描述
其基本原理与单主单从模式的几乎相同,唯一区别是当某个从设备的SS处于低电平时,该从设备与主设备进行通信,其他从设备的SS处于高电平状态。

3)菊花链模式

菊花链模式,即主设备的MOSI和SCLK连接到第一个从设备的MOSI和SCLK。从第一个从设备的MISO连接到第二个从设备的MOSI,以此类推,直到最后一个从设备的MISO。在这里插入图片描述
其工作原理是:

首先,主设备提供SCLK,控制数据传输的时序。时钟信号由主设备产生,并在整个菊花链中进行传递,从设备根据时钟信号的边沿进行数据的传输和接收。

然后,主设备通过MOSI线将数据发送到第一个从设备,第一个从设备接收到数据后,将其通过MISO线传输给第二个从设备,这样,数据从一个从设备级联传输到下一个从设备,直到传输到最后一个从设备。

每个从设备都需要有一个独立的SS,主设备通过控制相应的SS选择要与之通信的从设备,只有被选中的从设备才会响应主设备的数据传输。

在菊花链模式下,当数据从一个从设备传播到下一个从设备时,传输数据所需的时钟周期数量与从设备在菊花链中的位置成正比。在一个8位系统中,第3个从设备上的数据需要24个时钟脉冲,而在常规的SPI模式中只需要8个时钟脉冲,下图显示了通过菊花链传播的时钟周期和数据。在这里插入图片描述

SPI核心思想

SPI的核心思想是,每个设备都有一个移位寄存器,它可以用来发送或接收一个字节的数据。这两个移位寄存器以环形方式连接在一起,一个寄存器的输出到另一个寄存器的输入,反之亦然。主设备控制共同的时钟信号,确保每个寄存器在另一个寄存器移出一个比特时,正好移入一个比特。在这里插入图片描述

SPI数据传输

4.1采样和移位

根据上面内容可知SPI通信,主设备必须发送SCLK信号,并通过使能SS信号(低电平)选择从设备。然后主设备和从设备可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上,即移位)和接收(采样或读入总线(MISO/SDI)上的数据,即采样)同时进行。

Sample(采样)

采样是指主设备或从设备在时钟的上升沿或下降沿时读取数据位的操作。采样的目的是在合适的时机获取正确的数据位,以确保数据的准确传输。

Shift(移位)

移位是指数据位从发送器移动到接收器的过程,以实现数据的传输。移位是SPI通信中的关键步骤之一,确保数据的逐位传输和同步。

4.2时钟极性和时钟相位

具体何时进行采样和移位操作,可以通过设置时钟极性和时钟相位来实现。

时钟极性(Clock Polarity,CPOL)

在空闲状态期间,CPOL位设置时钟信号的极性。

CPOL = 1:表示空闲时是高电平;

CPOL = 0:表示空闲时是低电平。

空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间,如下所示:

时钟相位(Clock Phase,CPHA)

CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。

CPHA = 0:表示从第一个跳变沿开始采样;

CPHA = 1:表示从第二个跳变沿开始采样。

主设备必须根据从设备的要求选择时钟极性和时钟相位,根据上述CPOL和CPHA位的选择,有四种SPI模式可用,如下所示:

在这里插入图片描述
在这里插入图片描述
对应到数据位,以CPOL = 0,CPHA = 0为例,绿色虚线表示片选使能,橙色虚线表示采样,蓝色虚线表示移位,如下所示在这里插入图片描述
4.3传输位序

先发送高bit(MSB),还是先发送低bit(LSB)。如下图所示,若采用MSB first,那么MOSI发送的数据为01000011, 即0x43。在这里插入图片描述
若采用LSB first,那么MISO接收到0x43后,发送形式如下所示:在这里插入图片描述
4.4 数据长度

注意上面的各图演示的都是传输8位数据,实际上SPI可以根据设备所支持的情况传输不同位数的数据,比如Aurix TC2xx系列最高支持32位数据传输。在这里插入图片描述
总的来说,SPI数据传输取决于具体配置,选取哪种模式,何时采样,数据有多少位,是MSB还是LSB first,当然除此之外,实际实现这个功能还需要考虑更多因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT httpServer多线程后台服务器的例子实现

1.需求 1.1 用户需要其他平台(web端)调用Qt平台的接口,获取想要的数据并实时显示在网页里,比如实时的温湿度,用户数据等 1.2 用户需要在其他平台(web端)调用Qt平台的接口,下发数据…

kettle从入门到精通 第五十五课 ETL之kettle Excel输入

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群,一起学习,共同进步。 1、 Excel输入,Microsoft Excel输入步骤的作用是从Microsoft Excel中读取数据,如下图所示: 1)Excel输入步骤从文件D:\data\测试数…

Linux实现简单进度条(附原理解释和动图效果)

1&#xff0c;行缓冲区 先看下面的代码和运行结果&#xff0c; #include<stdio.h> #include<unistd.h> int main() {printf("你好\n");sleep(3);return 0; }只是一个简单的打印“你好”然后休眠三秒&#xff0c;最后程序结束 再看下面的代码和运行结果…

Docker-Compose单机多容器应用编排与管理

前言 Docker Compose 作为 Docker 生态系统中的一个重要组件&#xff0c;为开发人员提供了一种简单而强大的方式来定义和运行多个容器化应用。本文将介绍 Docker Compose 的使用背景、优劣势以及利用 Docker Compose 简化应用程序的部署和管理。 目录 一、Docker Compose 简…

CUDA架构介绍与设计模式解析

文章目录 **CUDA**架构介绍与设计模式解析**1** CUDA 介绍CUDA发展历程CUDA主要特性CUDA系统架构CUDA应用场景编程语言支持CUDA计算过程线程层次存储层次 **2** CUDA 系统架构分层架构并行计算模式生产-消费者模式工作池模式异步编程模式 **3** CUDA 中的设计模式工厂模式策略模…

闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子

前言 一个在实际应用中 EF Core 集成 FluentValidation 进行数据校验的例子。 Step By Step 步骤 创建一个 Asp.Net Core WebApi 项目 引用以下 Nuget 包 FluentValidation.AspNetCore Microsoft.AspNetCore.Identity.EntityFrameworkCore Microsoft.EntityFrameworkCore.Re…

SQL事前巡检插件

背景: 事故频发 •在工作过程中每年都会看到SQL问题引发的线上问题&#xff0c;一条有问题的SQL足以拖垮整个数据库 不易发觉 •对于SQL性能问题测试在预发环境不易发现&#xff08;数据量小&#xff09; •SAAS系统隔离字段在SQL条件中遗漏&#xff0c;造成越权风险 •业…

【算法刷题 | 贪心算法08】4.29(划分字母区间、合并区间)

文章目录 14.划分字母区间14.1题目14.2解法&#xff1a;贪心14.2.1贪心思路14.2.2代码实现 15.合并区间15.1题目15.2解法&#xff1a;贪心15.2.1贪心思路15.2.2代码实现 14.划分字母区间 14.1题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一…

WebSocket 全面解析

&#x1f31f; 引言 WebSocket&#xff0c;一个让实时通信变得轻而易举的神器&#xff0c;它打破了传统HTTP协议的限制&#xff0c;实现了浏览器与服务器间的全双工通信。想象一下&#xff0c;即时消息、在线游戏、实时股票报价…这一切都离不开WebSocket的魔力&#x1f4ab;。…

LT6911UXE HDMI 2.0 至双端口 MIPI DSI/CSI,带音频 龙迅方案

1. 描述LT6911UXE 是一款高性能 HDMI2.0 至 MIPI DSI/CSI 转换器&#xff0c;适用于 VR、智能手机和显示应用。HDMI2.0 输入支持高达 6Gbps 的数据速率&#xff0c;可为4k60Hz视频提供足够的带宽。此外&#xff0c;数据解密还支持 HDCP2.3。对于 MIPI DSI / CSI 输出&#xff0…

零基础HTML教程(30)--迈入HTML5新时代

文章目录 1. 从H4时代到H5时代2. 属性值可以不用引号3. 标签使用大小写均可4. 部分属性值可以省略5. 浏览器支持情况6. 小结 1. 从H4时代到H5时代 之前讲的29篇HTML教程&#xff0c;内容基本都是H4时代就有的。 随着时代的发展&#xff0c;H4多少有点不够用&#xff0c;所以H…

pyQt5 和 Qt Designer 实现登录注册案例

Qt Designer 设计页面: 通过 PyQt5 手写 1. 先引入用到的库 from PyQt5.QtWidgets import * import sys 2. 创建应用,窗口, 设置窗口 # 创建应用 app QApplication(sys.argv) # 创建窗口 w QWidget()# 设置窗口标题 w.setWindowTitle("注册登录")# 展示 w.sho…

HaLo-NeRF:利用视觉和语言模型对场景的精准定位和细粒度语义理解

包含大量摄影师拍摄的照片的互联网图像集有望实现对大型旅游地标的数字探索。然而&#xff0c;先前的工作主要集中在几何重建和可视化上&#xff0c;忽略了语言在为导航和细粒度理解提供语义界面方面的关键作用。 项目&#xff1a;HaLo-NeRF: Learning Geometry-Guided Semant…

LeetCode - 129双周赛

目录 一&#xff0c;3127. 构造相同颜色的正方形 二&#xff0c;3128. 直角三角形 三&#xff0c;3129. 找出所有稳定的二进制数组 I ​编辑 四&#xff0c;3130. 找出所有稳定的二进制数组 II 一&#xff0c;3127. 构造相同颜色的正方形 本题就是问在一个3x3的正方形中是…

2024.4.25 LoadRunner 测试工具详解 —— Controller Analysis

目录 Controller 的使用 创建场景 Controller 快捷方式创建场景 VUG 针对写好脚本创建场景 场景设计 设计初始化 设计启动机制 设计性能测试脚本的执行时间 设计虚拟用户退出机制 场景运行 添加监控指标至图标格区域 Analysis 的使用 汇总报告 测试报表 吞吐量图 …

仿9377登录注册页面源码分享

LOGO在image里面修改,名字这些有记事本打开修改 仿9377登录注册页面源码分享

《HelloGitHub》第 97 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

《Python语言科研绘图与学术图表绘制从入门到精通》解锁Python语言绘图魅力,让数据可视化成为你的科研利器!

本书特点 1.零基础高效入门&#xff1a;通过软件操作、实战案例及图文、代码结合的方式&#xff0c;实现从入门到精通的快速学习。 2.掌握多元科研绘图&#xff1a;涵盖科研绘图基础、各类图形绘制技巧&#xff0c;包括变量、极坐标、2D、3D及地理信息可视化等。 3.实用与艺术…

学习 Rust 第 22 天:mini_grep 第 2 部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

Coursera: An Introduction to American Law 学习笔记 Week 06: Civil Procedure (完结)

An Introduction to American Law Course Certificate Course Introduction 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 06: Civil Pro…