SPI基础概念

2023-10-26

目的

SPI(Serial Perripheral Interface)是一种非常常用的全双工接口,这个接口在非常简单的机制下达到了比较高的通讯速度。比它通讯速度更高的常见的要不是并口,要不是ETH、USB这类复杂的通讯接口。使用SPI需要了解一些基础概念,并能够在此基础上看懂时序逻辑。这篇文章将对相关内容做个说明。

SPI还有升级的类型 DSPI(Dual SPI)和 QSPI(Quad SPI),这两种接口拥有更快的通讯速度,代价分别是失去全双工特性和增加额外通讯线。这篇文章不对此进行介绍。

物理接线

SPI是主从方式通讯的,在使用时主要有下面一些接线方式:
在这里插入图片描述
可以看到SPI主要涉及的信号线为四条,分别如下:

  • SCLK 时钟信号;
  • MOSI 主机数据输出、从机数据接收;
  • MISO 主机数据接收、从机数据输出;
  • NSS 片选信号,低电平表示选中;
    主机在要通讯时拉低对应从机的NSS引脚来选中该从机;

SPI通讯中主机只能有一个,从机可以有多个。在一主一从的时候从机的NSS引脚可以直接接地,表示该从机一直被选中。

SPI在一主多从的时候还有一种菊花链连接方式,上图中没有画出来。主要特点是所有从机同时选中,从主机开始传输数据到第一个从机,第一个从机的数据输出接到第二个从机的数据输入,依次往后传输。

极性和相位

在解读SPI时序逻辑前需要先了解下SPI极性(CPOL)和相位(CPHA)的概念。CPOL指的是SCLK总线在不进行通讯时的电平,CPHA指在一个时钟周期中采样是发生在第一个边缘还是第二个边缘。根据极性和相位的不同组合SPI有四种工作模式,可以查看下面的图示:
在这里插入图片描述
虽然有四种模式,但最重要的就一点,采样是在一个周期中间采样的Mode 0Mode 3 都是上升沿采样, Mode 1Mode 2 都是下降沿采样。很多作为SPI从机使用的芯片都支持两种模式,要不支持0和3,要不支持1和2。

信号时序

起止信号 —— NSS

在不传输数据时NSS通常为高电平状态。数据传输通常以NSS信号拉低开始,一般再拉低半个周期后开始输出时钟信号同时传输数据,完成传输后拉高NSS。通常这个也被叫做摩托罗拉(Motorola)的SPI协议。

还有一种不太一样的,NSS平常为低,在数据传输前NSS保持一段时间高电平然后拉低,接着开始传输数据。这个是德州仪器(TI)的协议,也被称为SSI协议。

数据读写 —— SCLK、MOSI、MISO

SPI是一种很有意思的总线,它的收和发是可以同时进行的,比如上一节的图中可以看到MOSI传输数据的同时MISO也在传输数据。

作为主机来说不管是收数据还是发数据通常都没啥问题,而从机就有问题了——什么时候可以读数据?什么时候要发数据?这个问题就要扯上SCLK了。这也就是前面讲的极性和相位的问题。

读写操作
通常SPI数据读写都是以八个或十六个周期为一组进行,相当于读写一个或两个字节。可以多组连续读写,NSS只在最开始和结束的时候变化。

一般通过库函数作为主机进行SPI通讯时不用手动操作SCLK信号,直接对外写数据即可,SPI控制器会自动操作SCLK、MOSI等信号线。所以常见的读写函数都是下面这种样子的:
uint8_t SPI_Write_Read(uint8_t *Data)
uint16_t SPI_Write_Read(uint16_t *Data)
bool SPI_Write_Read(uint8_t *TxData, uint8_t *RxData, size_t Size)
bool SPI_Write_Read(uint16_t *TxData, uint16_t *RxData, size_t Size)

通常这些情况下你如果只是想要读数据,操作的时候也是需要依靠写入数据来发出时钟信号的,通常写入什么都行,只要长度和你需要读取的数据长度对的上就行。

读写时序
一般来说作为SPI主机与SPI从机进行通讯,读写的时候并不是同步的,想要从从机读取某些数据需要先写入读取动作的指令和参数等,而从机会在接到指令和参数后的一定周期后返回数据。比如下面这样:
在这里插入图片描述
上面请求和返回数据时间刚好相差八个周期。当然也有可能是下面这样的:
在这里插入图片描述
上面请求和返回数据时间相差十六个周期。

其实SPI读写中各种情况组合是非常多的,具体的还需要看你要操作的从机设备的文档中对时序的描述。

总结

对SPI的操作主要就是要了解极性相位以及时序等内容,剩下的使用来说还是很简单的,无非是查一查从机的通讯文档相关的通讯逻辑而已。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPI基础概念 的相关文章

  • 网络运维词汇汇总

    本篇之所以起该名字 是因为我在一家网络公司工作所遇到的一些相关词汇 仅供参考 1 关系型数据库服务 RDS 关系型数据库服务 RelationalDatabase Service 简称RDS 是一种稳定可靠 可弹性伸缩的在线数据库服务 RD
  • Metasploitable2在VMware上的安装与初步渗透学习

    环境 靶机 Metasploitable2 IP 未知 攻击机 KALI IP 192 168 127 5 平台 VMware 16 2 4 一 Metasploitable2的简介 Metasploitable2是一个故意易受攻击的Lin
  • JDK8之Stream流

    1 集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候 除了必需的添加 删除 获取外 最典型的操作就是集合遍历 public class StreamTest01 public static void main String ar

随机推荐

  • 在cmd控制台运行java程序,错误: 编码GBK的不可映射字符?

    此错误是由于字符编码造成的 出现这样的错误 一般是因为代码中含有中文字符 注释中的中文字符也算 由于使用CMD运行java程序的时候 系统默认的编码格式是gbk 而包含中文字符的代码一般是UNICODE格式 所以直接运行含有中文字符的代码就
  • JBPM工作流管理例子

    工作中要用到JBPM写工作流 自习的时候找到一篇较好的文章 贴过来共享下 在某一公司中 部门员工要休假的话需要部门主管的批准 如果休假天数大于10天的话 在部门主管的同意后 还必须上级主管批准 如果是部门主管要休假只要上级主管批准即可 在休
  • For input string: “ “

    For input string 如果出现这样的异常报错 是指的数据转换时出错 比如字符串转整数 解决方法 去检查前端代码中 相应的值的value 有没有多了空格 删去即可 因为本身就是引用的一个int变量的值 加了一个空格后反而变成了字符
  • EI会议论文的检索报告怎么开?

    根据Engineering Village数据库 可以通过检索确定会议论文是否被EI收录 并可开具检索报告 EI检索覆盖了EI期刊和EI会议等资源 要开具EI会议论文检索报告 先是要进行查询 确保能查到后才可以开具 查询方式如下 直接查询
  • python自动导入包_【pycharm常用设置】自动导入包+自动生成文件头注释

    一 自动导入包设置 首先确保pycharm中设置 File Settings General Auto Import Python Show import popup 导入包是alt enter 键组合 如果弹出下拉菜单选项 说明缺少依赖
  • C语言-队列

    队列是一种特殊的线性表 特殊之处在于它只允许在表的前端 front 进行删除操作 而在表的后端 rear 进行插入操作 和栈一样 队列是一种操作受限制的线性表 进行插入操作的端称为队尾 进行删除操作的端称为队头 队列的特性 先进先出 后进后
  • Windows系统漏洞之5次Shift漏洞启动计算机

    一 原理知识 当我们使用计算机时 连续按下5次shift键会弹出一个程序 程序名称为 esthc exe 其路径为 c windows system32 sethc exe 该系统漏洞由于部分Win7及Win10在未进入系统时 可以通过连续
  • “基于医疗知识图谱的问答系统”代码解析(二)

    基于医疗知识图谱的问答系统 代码解析 二 question classifier py 问题分类器代码解析 基于知识医疗图谱的问答系统 代码解析 一 基于医疗知识图谱的问答系统 代码解析 三 基于医疗知识图谱的问答系统 代码解析 四 基于医
  • docker部署Portainer

    一 Portainer概述 Portainer可以在Docker上运行 而且部署起来非常简单 Portainer是Docker的图形化管理工具 提供状态显示面板 应用模板快速部署 容器镜像网络数据卷的基本操作 包括上传下载镜像 创建容器等操
  • unity 手机上获取手指触摸位置_Unity 操作检测的各种实现#2手机端 - 触屏与手势...

    写在前面 继续填坑了 这次是讲手机端 电脑端 按我跳转 键盘按键控制 上文内容 鼠标点击控制 上文内容 手机端 触屏控制 本文内容 手势控制 本文内容 重力控制 下文内容 陀螺仪控制 下文内容 本文的限制 接上文 本文主要讲在手机检查操作的
  • JavaScript 实现 -- 选择排序

    文章目录 选择排序 原理 代码实现 时间复杂度和稳定性 选择排序 选择排序是一种简单直观的排序算法 原理 第一次从待排序的数据元素中选出最小 或最大 的一个元素 存放在序列的起始位置 然后再从剩余的未排序元素中寻找到最小 大 元素 然后放到
  • python传奇自动打怪脚本_传奇自动刷怪脚本,节省服务器资源

    传奇自动刷怪脚本 节省服务器资源 人到怪到 人走怪没 节省服务器资源哦 main if checkhum d716 1 checkmonmap d716 20 act goto exit elseact goto shuaguai shua
  • C# 基本语法 char数据类型

    参见 Visual C 程序设计基础教程 P21 字符数据类型char用来处理Unicode字符 Unicode是16位字符 char变量以无符号16位字符 2字节 数字的形式存储 取值范围为0到65535 每一个数字代表一个Unicode
  • 二元回归模型matlab代码,多元线性回归Matlab代码

    多元线性回归 b 回归系数 bint 回归系数的置信度为95 的置信区间 r 残差 rint 各残差的置信区间 stats 用于检验回归模型的统计量 有四个数值 相关系数R 2 F值 与F对应的概率p 误差方差 相关系数R 2越接近1 说明
  • 标题:SDXL0.9技术详解:图像生成的新高度

    摘要 本文首先概述了图像生成模型SDXL0 9的特点 它相较早期模型显著提高了参数量级 采用云计算资源进行训练 进行知识图谱预训练以及优化了模型结构 文章然后介绍了SDXL0 9在图像质量 生成速度 语义一致性等指标上的进步 在技术原理上
  • excel快速填充并与上面的单元格内容一致(想要的结果如下图)

    1 选中单元格 2 按F5 点击 定位条件 再点击 空值 3 输入 上一个单元格 本例中就是 A1 4 Ctrl Enter 在这里插入图片描述
  • dedecms后台修改“系统基本参数”无效

    安装完dedecms的一些网站模板后 还原备份数据 系统基本参数也将会自动还原 能在 系统设置 下的 系统基本参数 里看到 但是 我遇到的情况是 无论怎么在系统基本参数里修改内容 更新系统缓存 都没能生效 后来通过直接修改代码实现 方法如下
  • 2020-03-05T06:26:07.000+0000

    JAVA JSON传输过程中时间问题 2020 03 05T06 26 07 000 0000转换成正常格式 2020 03 05 14 28 39 SimpleDateFormat sdf new SimpleDateFormat yyy
  • c语言比double精度更高的数据类型_数制与数据类型

    了解数制的分类 熟悉数据类型的分类 掌握整型数据类型的使用方法 掌握浮点型数据类型的使用方法 掌握字符型数据类型的使用方法 掌握不同数据类型之间的转化规则 掌握使用typedef定义类型的方法 二进制 八进制 十六进制 数制间的转换 二进制
  • SPI基础概念

    文章目录 目的 物理接线 极性和相位 信号时序 总结 目的 SPI Serial Perripheral Interface 是一种非常常用的全双工接口 这个接口在非常简单的机制下达到了比较高的通讯速度 比它通讯速度更高的常见的要不是并口