当前位置: 首页 > news >正文

SPI通信讲解

了解SPI通信对于我们了解通信有非常重要的意义。

SPI(Serial Peripheral Interface)是由Motorola公司(摩托罗拉)开发的一种通用数据总线

四根通信线:

SCK(Serial Clock):时钟线;

MOSI(Master Output Slave Input):主机输出从机输入线;

MISO(Master Input Slave Output):主机输入从机输出线;

SS(Slave Select):从机选择线;(代替了I2C的从机寻址机制)

另外由于SPI是单端通信所以SPI还需要另外的共地,GND线。

注意:

1.SPI是全双工,不支持多主机;

输出引脚就是输出,输入就是输入,不需要像I2C还需要输入输出转换,唯一冲突在于SS从机线

2.SPI不存在数据应答机制的设计,只有接收和发送数据。

不同设备名称可能不同,却决于明确该设备身份为从机还是主机

有时候对于数据线接口有很多不同我们往往有着更多的写法,到底什么意思还是需要自己根据使用芯片是作为主机还是从机。

这里我们拿一个W25QXX一个外挂的Flash存储器为例子,它一般作为从机,所以DO就是从机输出主机输入,DI就是从机输入主机输出。具体还是需要看设备本省需要作为从机还是主机。

当实在不清楚的时候我们可以查看具体的芯片手册。对于STM32来说,STM32常常作为主机,当然也有作为从机(支持身份转换),不过我们往往用做主机比较多。

硬件电路:

所有SPI设备的SCK、MOSI、MISO分别连在一起主机另外引出多条SS控制线,分别接到各从机的SS引脚,代替了 从机寻址的软件操作,但是需要多一根从机选择线的硬件资源。

输出引脚MOSI配置为推挽输出(I2C为开漏输出是需要兼顾于多主机仲裁等等),输入引脚MISO配置为浮空或上拉输入

同样需要注意的地方,SPI为单端信号(他们的高低电平都是相对于各自GND),需要,要求通信双方共地。

SCLK时钟线为主机绝对掌控,对于主机而言时钟线SCLK为输出,对于从机而言SCLK时钟线为输入。

(如果从机没有供电,还需要引脚引出来,主机引出供电线,给予从机寄生供电)

下面是大概框图:

需要注意:

在平时当中,SS为高电平,当主机需要时候会对相应的SS从机线置低电平,当完成通信以后主机就会将SS拉回高电平代表通信结束。就不需要像I2C需要发送从机位地址进行选择从机(从机寻址)。

输出引脚配置为推挽输出,高低电平均有很强的驱动能力,上升/下降沿速度非常快

(拉高拉低电平就会非常迅速)信号变化的快,就使得通信速度大大能达到MHZ,但是由于I2C是半双工只有两根线经常需要切换输入输出模式,同时需要兼顾多主机的时钟同步和仲裁问题,就使得其只能使用开漏输出,而开漏输出拉低非常迅速,但是拉高就比较慢,所以通信速度没有SPI那么快。

SPI不支持多主机,不要考虑冲突,唯一的冲突点在于,主机的MISO,主机一个输入而从机三个或者多个输出,就会导致冲突,因此SPI协议规定当从机未被选中,从机的MISO引脚必须切换为高阻态(不允许输出)。

软件实现:

主要就是理解一个移位的过程:

SPI一般是高位先行,我们利用时钟,当时钟产生上升沿,主机移出最高位的一个数据放在MOSI线上同时数据整体左移一位,从机移出最高位的数据放到MISO上,并且整体数据左移一位。当时钟产生下降沿,主机从MISO线上把从机放在MISO线上数据移入,放在最低位上,同样的,下降沿的时候,从机从MOSI线上把主机放在线上的高位,移入放在低位。

主机和从机都会进行采样输入直到数据完成交换过程,这就是实际的过程。

SPI时序基本单元:

起始条件:SS从高电平切换到低电平

终止条件:SS从低电平切换到高电平

SS低电平代表:正在通信;

SPI有两种可以配置的位

CPOL(Clock Polarity):时钟极性

CPHA(Clock Phase):时钟相位

综合起来可以有A^{_{2}^{2}}也就是四种模式

如下表:

模式选择

时钟极性CPOL

时钟相位CPHA

模式0

0

0

模式1

0

1

模式2

1

0

模式3

1

1

注意:

  1. 时钟极性CPOL的“0”和“1”决定了,空闲状态SCLK的电平是高还是低决定了第一个时钟沿是上升沿还是下降沿。
  2. 时钟相位CPHA 的“0”和“1”决定了,SCK第一个边沿是移入还是移出数据也可以说是决定了主机是奇数边沿采样还是偶数边沿采样。

模式介绍:

模式0:

交换一个字节(模式0)

CPOL=0:空闲状态时,SCK为低电平;

CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据;

模式0时序图

结合时序图讲解一下

首先SS由高电平变为低电平,代表SPI通信的开始,当SS由低电平变为高电平,代表SPI通信结束。

SCK由于CPOL为0,所以空闲为低电平,所以开始数据交换时候,第一个为上升沿,第二个为下降沿。所以CPOL决定的往往就是SCK,第一个为上升沿还是下降沿。

MOSI:由于CPHA为0,所以在第一个时钟沿进行数据移入操作((实际需要提前移出数据,相位提前一个时期),在第二个时钟沿进行数据移出操作。我们不断地进行操作可以发现,永远是奇数移入操作,偶数移出操作,对于主机数据采集也可以说就是奇数边沿采样。

注意:

  1. MOSI,MISO两个线交叉代表可能发送地数据是“0”或者“1”;
  2. MISO前面一个线代表上面说的高阻态,防止主机数据交换地时候有其他从机输出影响主机数据读取。

模式1:

交换一个字节(模式1)

CPOL=0:空闲状态时,SCK为低电平;

CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据;

模式1时序图

结合时序图讲解一下

首先SS由高电平变为低电平,代表SPI通信的开始,当SS由低电平变为高电平,代表SPI通信结束。

SCK由于CPOL为0,所以空闲为低电平,所以开始数据交换时候,第一个为上升沿,第二个为下降沿。所以CPOL决定的往往就是SCK,第一个为上升沿还是下降沿。

MOSI:由于CPHA为1,所以在第一个时钟沿进行数据移出操作,在第二个时钟沿进行数据移入操作。所以要求我们要提前将数据移入到线上才能保证在第一个时钟沿保证进行的是数据移出的操作,我们不断地进行操作可以发现,永远是奇数移出操作,偶数移入操作对于主机数据采集也可以说就是偶数边沿采样。

模式2:

交换一个字节(模式2)

CPOL=1:空闲状态时,SCK为高电平;

CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据;

模式2时序图

首先SS由高电平变为低电平,代表着SPI通信的开始,当SS由低电平变为高电平,代表着SPI通信的结束。

SCK:由于时钟极性CPOL为1,所以SCLK在空闲状态为高电平,所以在通信时,第一个时钟沿为下降沿,第二个为上升沿。

MOSI:由于CPHA为0,所以在第一个时钟沿进行数据移入的操作,在第二个时钟沿进行数据移出的操作。重复操作可以发现,主机为奇数边沿采样。

模式3:

交换一个字节(模式3)

CPOL=1:空闲状态时,SCK为高电平;

CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据;

模式3时序图

首先SS由高电平变为低电平,代表着SPI通信的开始,SS由低电平变为高电平代表着SPI通信的结束。

SCK:由于CPOL为1,所以SCLK空闲状态为高电平,所以SPI第一个时钟沿为下降沿,第二个为上升沿;

MOSI:由于CPHA为1,所以主机在第一个时钟沿进行数据移出的操作,在第二个边沿进行数据移入的操作,我们不断重复操作就可以发现,主机永远是在偶数时钟边沿进行数据采样。

以上就是对SPI模式的讲解,在实际使用过程当中,往往模式0使用较多。

相关文章:

SPI通信讲解

了解SPI通信对于我们了解通信有非常重要的意义。 SPI(Serial Peripheral Interface)是由Motorola公司(摩托罗拉)开发的一种通用数据总线 四根通信线: SCK(Serial Clock):时钟线&a…...

本地一键部署grafana+prometheus

本地k8s集群内一键部署grafanaprometheus 说明: 此一键部署grafanaPrometheus已包含: victoria-metrics 存储prometheus-servergrafanaprometheus-kube-state-metricsprometheus-node-exporterblackbox-exporter grafana内已导入基础的dashboard【7个…...

NIO核心依赖多路复用小记

NIO允许一个线程同时处理多个连接,而不会因为一个连接的阻塞而导致其他连接被阻塞。核心是依赖操作系统的多路复用机制。 操作系统的多路复用机制 多路复用是一种操作系统的 I/O 处理机制,允许单个进程(或线程)同时监视多个输入…...

如何彻底卸载 Microsoft Edge?

关闭 Microsoft Edge 浏览器和所有正在运行的进程。 按下 Ctrl Shift Esc 键打开任务管理器。在任务管理器中,找到所有正在运行的 Microsoft Edge 进程。右键单击每个进程,然后选择“结束任务”。 导航至 Microsoft Edge 的安装目录。 默认情况下&…...

JavaScript-对象-笔记

1.字面量创建对象、对象的使用 对象就是一组 属性和方法的集合 属性: 特征 相当于变量 静态 是什么 方法: 行为 相当于函数 动态 干什么 创建对象 创建对象的第一种:使用字面量 {} 对象中的元素是键值对 使用逗号隔开 键:值 的形式 var 对象名…...

java 运算符 选择语句

1:运算符 运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。 举例说明:** int a 10; int b 20; in…...

CNN:Convolutional Neural Network(上)

目录 1 为什么使用 CNN 处理图像 2 CNN 的整体结构 2.1 Convolution 2.2 Colorful image 3 Convolution v.s. Fully Connected 4 Max Pooling 5 Flatten 6 CNN in Keras 原视频:李宏毅 2020:Convolutional Neural Network 1 为什么使用…...

将Android应用修改为鸿蒙应用的工作

将Android应用修改为鸿蒙(HarmonyOS)应用需要进行一系列主要的工作。以下是在进行这一转换过程中可能需要进行的主要工作,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.项目…...

03 Strategy策略

抽丝剥茧设计模式 之 Strategy策略 - 更多内容请见 目录 文章目录 一、Strategy策略二、Comparable和Comparator源码分析使用案例Arrays.sort源码Collections.sort源码Comparable源码Comparator源码 一、Strategy策略 策略模式是一种设计模式,它定义了一系列的算法…...

Python实现分位数回归模型(quantreg算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 分位数回归是简单的回归,就像普通的最小二乘法一样,但不是最小化平方误差的总和…...

【ROS2简单例程】基于python的发布订阅实现

1、自定义消息类型Student 1.1 创建base_interfaces_demo包 1.2 创建Student.msg文件 string name int32 age float64 height 1.2 在cmakeLists.txt中增加如下语句 #增加自定义消息类型的依赖 find_package(rosidl_default_generators REQUIRED) # 为接口文件生成源代码 ro…...

【期末考试】数据库综合复习宝典

目录 第一章 数据库系统概述 第二章 关系代数 第四章 关系数据库理论 第五章 数据库设计 第六章 数据库管理系统 第八章 事务管理 第一章 数据库系统概述 1.1三级模式 ①外模式:它为特定的应用程序或用户群体提供了一个数据视图,这个视图是独立于…...

OpenHarmony南向之LCD显示屏

OpenHarmony南向之LCD显示屏 概述 LCD(Liquid Crystal Display)驱动,通过对显示器上下电、初始化显示器驱动IC(Integrated Circuit)内部寄存器等操作,使其可以正常工作。 HDF Display驱动模型 LCD器件驱…...

核心笔记-短篇

接口管理平台:yapi 对象拷贝:Spring Bean 提供的 BeanUtils;hutool-core 提供的 BeanUtil 获得用户设备的信息:导入 UserAgentUtils 依赖;创建 UserAgent 对象使用 加密工具:DigestUtils,Spring Core 提供,静态方法:md5DigestAsHex(byte[]) 客户端编程工具包:HttpCli…...

系统学习Python——警告信息的控制模块warnings:为新版本的依赖关系更新代码

分类目录:《系统学习Python》总目录 在默认情况下,主要针对Python开发者(而不是Python应用程序的最终用户)的警告类别,会被忽略。 值得注意的是,这个“默认忽略”的列表包含DeprecationWarning&#xff08…...

爬虫的基本原理

基本原理 可以把网页与网页之间的链接关系比作节点中的连线,爬虫可以根据网页中的关系获取后续的网页,当整个网站涉及的页面全部被爬虫访问到后,网站的数据就被访问下来了。 1.爬虫概述 简单点讲,爬虫就是获取网页并提取和保存信…...

MySQL核心SQL

一.结构化查询语言 SQL是结构化查询语言(Structure Query Language),它是关系型数据库的通用语言。 SQL 主要可以划分为以下 3 个类别: DDL(Data Definition Languages)语句 数据定义语言,这…...

关于 setData 同步异步的问题

小程序官方文档中的回答解释: 所以大概意思就是: 1.setData在逻辑层的操作是同步,因此this.data中的相关数据会立即更新,比如下面的例子: const a 1 this.setData({b: a ? a : , }) console.log(that.data.b) // 1 2. setData在视图层的操作是异步,…...

Centos创建一个Python虚拟环境

在 CentOS 上创建一个 Python 虚拟环境,可以使用 virtualenv 工具。以下是创建和激活虚拟环境的基本步骤: 1.安装virtualenv 如果还没有安装 virtualenv,可以使用以下命令安装: sudo yum install python3-virtualenv请注意&…...

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代,爬虫技术被广泛应用于数据采集和处理。然而,在使用爬虫技术的过程中,经常会遇到IP被封禁的问题,这给数据采集工作带来了很大的困扰。因此,使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...