SPI 通信 协议

news2024/10/7 14:28:28
介绍: 

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

四根通信线:

  • SCK(Serial Clock)                             时钟线
  • MOSI(Master Output Slave Input)    主机输出 、从机输入
  • MISO(Master Input Slave Output)    主机输入 、从机输出
  • SS(Slave Select)                              从机选择线

同步,全双工

支持总线挂载多设备(一主多从)

特点:
  1. 没有像I2C这样复杂的从设备寻址系统;
  2. 分离的MISO和MOSI信号线,因此可以同时发送和接收数据,支持全双工;
  3. 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
  4. 数据传输速率比I2C更高(几乎快两倍);
硬件电路
  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入

SPI协议的工作方式如下:
  1. 主设备选择一个从设备,通过将对应的SS信号置为低电平。
  2. 主设备提供时钟信号(SCLK),在时钟的上升沿或下降沿进行数据传输。
  3. 主设备通过MOSI线发送数据给从设备,从设备通过MISO线发送数据给主设备。
  4. 数据传输可以是全双工的,即主设备和从设备可以同时发送和接收数据。
  5. 数据的传输顺序可以是位序(LSB first)或字节序(LSB first或MSB first)。
  6. 传输完成后,主设备将对应的SS信号置为高电平,结束与从设备的通信。

操作模式

选择CPOLCPHA位来定义数据传输和串行时钟之间的相位关系

根据SPI的时钟极性和时钟相位特性可以设置4种不同的SPI通信操作模式:

SPI模式CPOLCPHA空闲时SCK时钟                                   采样时刻
000低电平SCK第一个边沿移入数据,第二个边沿移出数据
101低电平SCK第一个边沿移出数据,第二个边沿移入数据
210高电平SCK第一个边沿移入数据,第二个边沿移出数据
311高电平SCK第一个边沿移出数据,第二个边沿移入数据
Mode 0  

SCK第一个边沿移入数据,第二个边沿移出数据 

注意:从机未被选择时,从机的MISO引脚必须关断输出(即配置输出为高阻状态)所以MISO是中间线,等SS被选择后才被允许开启输出 ,等输出结束后置回高阻态。

Mode1 

SCK第一个边沿移出数据,第二个边沿移入数据 

Mode 2

实际上相比Mode 0,就是SCK时钟线翻转了   。 

SCK第一个边沿移入数据,第二个边沿移出数据 

Mode 3

Mode 1 SCK时钟线 翻转

SCK第一个边沿移出数据,第二个边沿移入数据 

SPI时序 

一个完整的SPI通信过程包括以下 5 部分:

  • 起始信号
  • 选择设备(通过指令集实现)
  • 选择地址(通过指令集实现)
  • 数据传输
  • 终止信号

起始信号:

SS从高电平切换到低电平

终止信号:

SS从低电平切换到高电平

指令集

       SPI 指令集并非一个固定、统一的集合,而是由各个SPI从设备(如EEPROM、FLASH存储器、传感器等)根据其内部功能和操作需求定义的。这些指令集允许SPI主设备(如微控制器)通过发送特定的指令代码来控制从设备的操作,如读取数据、写入数据、擦除扇区等。

        由于SPI是一种广泛应用的通信协议,不同的从设备制造商可能会设计不同的指令集来满足其产品的特定需求。因此,当使用SPI与某个从设备进行通信时,首先需要查阅该从设备的数据手册或技术规格书,以了解其所支持的指令集及其具体用法。

指令示例(以W25Q128 FLASH存储器为例)

这些指令可以作为SPI指令集的一个缩影:

  1. 写使能(Write Enable):指令码通常为06H,用于使能FLASH存储器的写操作。在发送写数据或擦除指令之前,需要先发送写使能指令。

  2. 读状态寄存器(Read Status Register):指令码通常为05H,用于读取FLASH存储器的状态寄存器的内容,以获取存储器的当前状态信息,如忙标志位(BUSY)等。

  3. 页写时序(Page Program):指令码通常为02H,用于向FLASH存储器的指定地址写入数据。页写操作允许一次写入最多256个字节的数据。

  4. 扇区擦除时序(Sector Erase):指令码通常为20H,用于擦除FLASH存储器中的一个扇区。扇区擦除是将扇区内的所有数据位设置为1(FFH)的过程。

需要注意的是:不同SPI从设备指令集不同

综上所述,SPI指令集是一个由各个SPI从设备定义的、用于控制从设备操作的指令集合。在使用SPI进行通信时,必须查阅所使用的SPI从设备的数据手册或技术规格书,以了解其所支持的指令集及其具体用法。

发送指令集

向SS指定的设备,发送指令

数据传输

正常字节正常传输,如果是半字或者字传输 则高位先传

SPI时序详解

指定地址写

向SS指定的设备,发送写指令(0x02),      随后在指定地址(Address[23:0])下,写入指定数据(Data)

指定地址读

向SS指定的设备,发送读指令(0x03),      随后在指定地址(Address[23:0])下,读取从机数据(Data)

参考推荐

SPI协议详解(Standard SPI、Dual SPI和Queued SPI)-CSDN博客

SPI通信协议_spi协议-CSDN博客

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

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

相关文章

粗糙度轮廓仪功能简介:一体型轮廓仪功能亮点

在精密制造和质量控制领域,表面粗糙度和轮廓的精确测量是至关重要的。一体型轮廓仪为这一需求提供了全面的解决方案。它采用超高精度纳米衍射光学测量系统、超高直线度研磨级摩擦导轨、高性能直流伺服驱动系统、高性能计算机控制系统技术,为用户提供了一…

90后懒人带娃的福音,小学生古诗词的神器——ChatMoney全能知识库AI软件

本文由 ChatMoney团队出品 因为工作需要,浅尝辄止般的用了一下ChatMoney全能知识库AI软件。一些长期积存的问题迎刃而解,但这只是一款企业级大模型功能的冰山一角。让自己尤为惊奇的是里面涵盖的各类资料系统,居然能助力宝妈宝爸带娃脱困。只…

AIGC对设计行业的影响与启发:AIGC设计能替代真正的设计师吗?

随着科技的飞速发展,人工智能生成内容(AIGC)技术在设计行业的应用日益广泛,引发了广泛的讨论和关注。AIGC以其高效、多样化的生成能力,为设计行业带来了前所未有的变革。然而,关于AIGC是否能替代真正的设计…

Rustdesk如何编译代码实现安装后不会显示主界面,不会在右下角出现托盘图标,作为后台服务运行

环境: Rustdesk1.1.9 问题描述: Rustdesk如何编译代码实现安装后不会显示主界面,不会在右下角出现托盘图标,作为后台服务运行 解决方案: 可以自定义进程名称和图标,不会显示主界面,不会在…

uboo对内存操作读写命令的基本使用

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…

搭建个人博客及错误记录

搭建个人博客及错误记录 文章目录 搭建个人博客及错误记录需要用到的网址2.推荐两个参考教学视频3.发布一篇博客个人主题配置的提醒localhost拒绝连接问题解决办法ssh -T gitgithub.com失败问题解决Deployer not found:git解决 可以根据目录解决遇到的相同问题 需要用到的网址 …

昇思25天学习打卡营第3天|yulang

今天主要学习03-张量Tensor,主要包含了处理创建张量、张量的属性、张量索引和张量运算,稀疏张量,有点看不太懂,感觉要开始入门到放弃了?张量在构建和训练深度学习模型中的实际应用,如卷积神经网络。 张量&a…

Vue入门-如何创建一个Vue实例

创建一个一个Vue实例总共分为四步: 1.创建一个容器 2.引包:地址栏搜索v2.cn.vuejs.org这是vue2的官网地址,把2去掉就是vue3的官网地址,我们的包分为开发版本和生产版本,开发版本包含完整的警告和调试模式生产版本删除…

【Python机器学习】算法链与管道——用预处理进行参数选择的注意项

对于许多机器学习算法,提供的特定数据表示非常重要。比如,首先对数据进行缩放,然后手动合并特征,再利用无监督机器学习来学习特征。因此,大多数机器学习应用不仅需要应用多个算法,而且还需要将许多不同的处…

BIOS中的设置虽然不少,但其实大部分时候只需进行一些简单的调整

序言 浏览BIOS可能会让人感到不知所措,因为要考虑的设置太多了。但是,你应该在BIOS中进行一些简单的调整,以提高系统的性能和稳定性。我们将向你展示其中的一些调整,并解释你可能想要使用它们的时间和原因。 用密码保护你的BIOS 虽然我们很小心地对用户帐户进行密码保护…

打卡第一天

今天是参加算法训练营的第一天,希望我能把这个训练营坚持下来,希望我的算法编程题的能力有所提升,不再面试挂了,面试总是挂编程题,记录我leetcode刷题数量: 希望我通过这个训练营能够实现两份工作的无缝衔接…

【Spring Boot】Java 持久层 API:JPA

Java 持久层 API:JPA 1.Spring Data1.1 主要模块1.2 社区模块 2.JPA3.使用 JPA3.1 添加 JPA 和 MySQL 数据库的依赖3.2 配置数据库连接信息 4.了解 JPA 注解和属性4.1 常用注解4.2 映射关系的注解4.3 映射关系的属性 5.用 JPA 构建实体数据表 1.Spring Data Spring…

【Linux】多线程(一万六千字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 线程的概念 线程的理解(Linux系统为例) 在Linux系统里如何保证让正文部分的代码可以并发的去跑呢? 为什么要有多进程呢? 为…

统计信号处理基础 习题解答11-13

题目 如果是一个2x1的随机矢量,具有PDF 证明的PDF是一个随机变量。提可以因式分解成,其中是一个在4.5节描述的白化变换。 解答 首先: 因此,存在: 也就是是Hermitian矩阵。详细的性质可以参考: https://z…

linux系统中的各种命令的解释和帮助(含内部命令、外部命令)

目录 一、说明 二、命令详解 1、帮助命令的种类 (1)help用法 (2)--help用法 2、如何区别linux内部命令和外部命令 三、help和—help 四、man 命令 1、概述 2、语法和命令格式 (1)man命令的格式&…

数据库组成及原理

属性: 把数据库中的一个表类比成一个公司,那么公司里的每个人都是一个“属性”(表中的一个字段视为一个属性),不管老板还是员工,只要是公司里的人,就都是一个属性。 主键: 老板就是“…

带安全启动—Ubuntu系统—手动安装Nvidia驱动

教程1:在启用安全启动的 Fedora 中安装英伟达驱动 教程2:UEFI安全启动模式下安装Ubuntu的NVIDIA显卡驱动 1. 搜索合适的驱动 Nvidia驱动官网 选择这个 驱动(.run)链接 2. 安装必要的软件依赖 CUDA底层用C写的,因此导入编译器 sudo apt i…

智慧课堂基于YOLOv8的学生上课行为检测

数据集 学生上课行为检测,我们直接使用公开数据集 共三类行为:举手、读书、写字 数据集已经按照YOLO格式配置好,数据内容如下 模型训练 ​ 采用YOLOv8模型进行训练,官方代码 首先是划分数据集,分为训练集、验证&a…

Linux-gdb

目录 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 4.快速跳出函数体 5.其他 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 断点的本质是帮助我们缩小出问题的范围 比如,…

今天的A股,让人惊愕了,2个耐人寻味的重要信号,有望迎来下一个超级风口!

今天的A股,让人惊愕了,你知道是为什么吗?盘面上出现2个耐人寻味的重要信号,有望迎来下一个超级风口! 1、今天两市低开低走,但大消费劲头十足,连中免这样的大体量都涨停了,另外消费茅…