SPI协议详解

news2024/12/24 3:43:04

SPI协议详解

  • 前言
  • 一、SPI简介
  • 二、接口
  • 三、SPI总线个特点:
    • (一)主从模式
    • (二)同步传输
    • (三)全双工串行通信(数据传输高位在前,低位在后)
  • 四、SPI总线传输的4种模式
    • (一)SPI总线的极性
    • (二)SPI总线的相位
    • (三)四种模式
      • 1.模式0 (CPOL=0; CPHA=0)
      • 1.模式1 (CPOL=0; CPHA=1)
      • 2.模式2 (CPOL=1; CPHA=0)
      • 3.模式3 (CPOL=1; CPHA=1)
  • 五、关于提高传输速率
    • (一)标准SPI–三线SPI
    • (二)Dual SPI–四线SPI
    • (三)Quad SPI–六线
  • 参考链接

前言

前面有学过SPI读写flash,这里再梳理总结一下。

一、SPI简介

SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于EEPROM、Flash、RTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以及数字信号解码器上。SPI通信的速度很容易达到好几兆bps,所以可以用SPI总线传输一些未压缩的音频以及压缩的视频。



二、接口

下图是只有2个chip利用SPI总线进行通信的结构图
在这里插入图片描述

可知SPI总线传输只需要4根线就能完成,这四根线的作用分别如下:

  • SCK(Serial Clock):SCK是串行时钟线,作用是Master向Slave传输时钟信号,控制数据交换的时机和速率;
  • MOSI(Master Out Slave in):在SPI Master上也被称为Tx-channel,作用是SPI主机给SPI从机发送数据;
  • CS/SS(Chip Select/Slave Select):作用是SPI Master选择与哪一个SPI Slave通信,低电平表示从机被选中(低电平有效);
  • MISO(Master In Slave Out):在SPI Master上也被称为Rx-channel,作用是SPI主机接收SPI从机传输过来的数据;


三、SPI总线个特点:

(一)主从模式

采用主从模式(Master-Slave)的控制方式,支持单Master多Slave。SPI规定了两个SPI设备之间通信必须由主设备Master来控制从设备Slave。也就是说,如果FPGA是主机的情况下,不管是FPGA给芯片发送数据还是从芯片中接收数据,写Verilog逻辑的时候片选信号CS与串行时钟信号SCK必须由FPGA来产生。同时一个Master可以设置多个片选(Chip Select)来控制多个Slave。SPI协议还规定Slave设备的clock由Master通过SCK管脚提供给Slave,Slave本身不能产生或控制clock,没有clock则Slave不能正常工作。单Master多Slave的典型结构如下图所示
在这里插入图片描述


(二)同步传输

SPI总线在传输数据的同时也传输了时钟信号,所以SPI协议是一种同步(Synchronous)传输协议。Master会根据将要交换的数据产生相应的时钟脉冲,组成时钟信号,时钟信号通过时钟极性(CPOL)和时钟相位(CPHA)控制两个SPI设备何时交换数据以及何时对接收数据进行采样,保证数据在两个设备之间是同步传输的。


(三)全双工串行通信(数据传输高位在前,低位在后)

SPI总线协议是一种全双工的串行通信协议,数据传输时高位在前,低位在后。SPI协议规定一个SPI设备不能在数据通信过程中仅仅充当一个发送者(Transmitter)或者接受者(Receiver)。在片选信号CS为0的情况下,每个clock周期内,SPI设备都会发送并接收1 bit数据,相当于有1 bit数据被交换了。数据传输高位在前,低位在后(MSB first)。SPI主从结构内部数据传输示意图如下图所示
在这里插入图片描述



四、SPI总线传输的4种模式

在芯片的资料上,有两个非常特殊的寄存器配置位,分别是 CPOL (Clock POlarity)和 CPHA (Clock PHAse)。

  • CPOL配置SPI总线的极性
  • CPHA配置SPI总线的相位

(一)SPI总线的极性

极性 会直接影响SPI总线空闲时的时钟信号是高电平还是低电平

  • CPOL = 1:表示空闲时是高电平
  • CPOL = 0:表示空闲时是低电平\

由于数据传输往往是从跳变沿开始的,也就表示开始传输数据的时候,是下降沿还是上升沿。
在这里插入图片描述

(二)SPI总线的相位

一个时钟周期会有2个跳变沿。而相位,直接决定SPI总线从那个跳变沿开始采样数据。

  • CPHA = 0:表示从第一个跳变沿开始采样
  • CPHA = 1:表示从第二个跳变沿开始采样
    在这里插入图片描述
    至于跳变沿究竟是上升沿还是下降沿,这取决于 CPOL。记住, CPHA 只决定是哪个跳变沿采样。

(三)四种模式

CPOL 和 CPHA 的不同组合,形成了SPI总线的不同模式。

modeCPOLCPHA
mode00
mode10
mode21
mode31

1.模式0 (CPOL=0; CPHA=0)

  • CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿
  • CPHA = 0:数据在第2个跳变沿(下降沿)采样
    在这里插入图片描述

1.模式1 (CPOL=0; CPHA=1)

  • CPOL = 0:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿
  • CPHA = 1:数据在第1个跳变沿(下降沿)采样
    在这里插入图片描述

2.模式2 (CPOL=1; CPHA=0)

  • CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿
  • CPHA = 0:数据在第2个跳变沿(上升沿)采样
    在这里插入图片描述

3.模式3 (CPOL=1; CPHA=1)

  • CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿
  • CPHA = 1:数据在第2个跳变沿(上升沿)采样
    在这里插入图片描述


五、关于提高传输速率

从spi flash里面读数据的时候,常规操作(也是必不可少的)是使用到了VCC,GND,CS,CLK,DO这些引脚,这没得说,在这个组合里面只有DO这个引脚是数据线,也就是说一个时钟沿只能传输一个位的数据; 如何在时钟频率不变的情况下提高传输速度呢?
在这里插入图片描述
一般来说,nor flash是SOP-8封装,有8个引脚:

名称介绍
VCC电源正
GND电源地
CS传输控制–片选
CLK传输控制–时钟
MOSI可以复用
MISO可以复用
WP可以复用
HOLD可以复用

除了电源引脚(VCC,GND)以及控制传输的CS、CLK不能复用外,其他的四个引脚都是可以复用为数据传输引脚的。这里设定的场景是单向通信(比如只读的操作中,只写的操作中),并非双工通信。

(一)标准SPI–三线SPI

标准SPI通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:clk , cs, mosi, miso
一个时钟周期发送1个bit


(二)Dual SPI–四线SPI

它只是针对SPI Flash而言,不是针对所有SPI外设。对于SPI Flash,全双工并不常用,因此扩展了mosi和miso的用法,让它们工作在半双工,用以加倍数据传输。也就是对于Dual SPI Flash,可以发送一个命令字节进入dual mode,这样mosi变成SIO0(serial io 0),mosi变成SIO1(serial io 1),这样一个时钟周期内就能传输2个bit数据,加倍了数据传输

四根线:CS、CLK、SIO1、SIO2

一个时钟周期发送2个bit


(三)Quad SPI–六线

与Dual SPI类似,也是针对SPI Flash,Qual SPI Flash增加了两根I/O线(SIO2,SIO3),目的是一个时钟内传输4个bit。
六根线:CS、CLK、SIO1、SIO2、SIO3、SIO3
一个时钟周期发送4个bit


所以对于SPI Flash,有标准spi flash,dual spi , qual spi 三种类型,分别对应3-wire, 4-wire, 6-wire,在相同clock下,线数越多,传输速率越高。

参考链接

4、SPI总线的原理与Verilog实现
SPI总线传输的4种模式
SPI协议_Verilog实现
嵌入式–Flash操作中的标准SPI,Dual SPI,Quad SPI

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

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

相关文章

[附源码]计算机毕业设计Python贵港高铁站志愿者服务平台(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

分词并显示词性jieba.posseg.cut()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】 【Python-数据分析】 分词并显示词性 jieba.posseg.cut() [太阳]选择题 以下python代码结果错误的一项是? import jieba.posseg as pseg words pseg.cut("我爱北京天安门") for word, flag in words: …

【docker】Comopse安装

Compose安装 1、下载 2、授权 Compose初体验 地址:Try Docker Compose | Docker Documentation 1、应用app.py 2、DockerFile 应用打包为镜像 3、Docker-compose yaml文件(定义整个服务,需要的环境,web、redis)完…

从输入URL到渲染的完整过程

浏览器有一个重要的安全策略,称之为「同源策略」 其中,源协议主机端口,**两个源相同,称之为同源,两个源不同,称之为跨源或跨域 同源策略是指,若页面的源和页面运行过程中加载的源不一致时&…

[附源码]Nodejs计算机毕业设计江西婺源旅游文化推广系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Spring面试基础

目录1. 你认为Spring的核心是什么2. 如何理解约定优于配置3. spring boot starter有什么用4. Spring用到了哪些设计模式5. Springboot的启动流程6. Spring Boot自动装配的过程7. Spring Boot注解7.1. SpringBootApplication注解7.2 Import注解7.3 Conditional注解8. Spring的核…

栈和队列面试题讲解(有效的括号、用队列实现栈、用栈实现队列、设计循环队列)

今天,我将带来栈和队列的面试题讲解。 目录有效的括号:[链接](https://leetcode.cn/problems/valid-parentheses/)用队列实现栈:[链接](https://leetcode.cn/problems/implement-stack-using-queues/)用栈实现队列:[链接](https:/…

电脑重装系统之后风扇一直很响如何优化

​在电脑温度升高时,风扇就会开始转动散热,但是如果电脑根本没有运行什么程序,风扇也一直转,那可能就是设置问题了,下面小编教大家Win11笔记本风扇一直转的解决方法。 工具/原料: 系统版本:wi…

传统制造业数字化转型6大关键

在当今的数字时代,“云移动”深刻影响着每个人的生活方式和每个企业的运营模式。随着互联网的日益普及,计算和存储能力的快速发展,物联网和传感器技术的广泛应用,以及工业软件的不断演进,数据采集、存储、传输、显示、…

CentOS 9 环境编译部署 MySQL 8.0.30

文章目录[toc]环境情况一些小问题记录源码包怎么下载二进制文件怎么下载CentOS 9 运行二进制文件会报错编译 mysql安装编译所需环境安装 libtirpc-devel没有安装 openssl-devel 的报错没有安装 libtirpc-devel 的报错没有安装 rpcgen 的报错cmake 编译MySQL cmake 一些常用的参…

设计模式概述之原型模式(六)

常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合行为型模式11种:模板方法、解释器、策略、观察者、迭代…

【Python】关于PyHook3.HookManager的几个坑

疫情当下,群羊乱舞,请做好个人防护谨慎外出 接下来进入正题。 1、建议先把PyHook3.HookManager的一个小bug修好 这是类对象的析构bug,被析构(del)时触发:AttributeError: HookManager object has no attribute keyboard_hook …

【服务器数据恢复】xfs文件系统误操作导致分区丢失不可用的数据恢复案例

服务器数据恢复环境: 某公司一组服务器:磁盘柜raid卡,raid5磁盘阵列; linux操作系统XFS文件系统,共3个分区。 服务器故障: 服务器重装操作系统,完成操作后用户发现服务器的磁盘分区出现问题&am…

大三上算法习题

难度&#xff1a;1 1 二分查找返回关键值key在长度为len的数组arr[]中的位置&#xff0c;没有key则返回-1 int bi_search( int key, int arr[], int len ) //1 二分查找返回关键值key在长度为len的数组arr[]中的位置&#xff0c;没有key则返回-1#include <iostream> u…

如何制作一张标准地图样式的地图(附数据)

概述 大家有没有想过这样一个问题&#xff0c;我们在标准地图网站上看到的标准地图的样式&#xff08;形状&#xff09;和我们平时用到的地图不一样&#xff0c;那么是什么原因导致的呢&#xff0c;我们能够制作这样样式&#xff08;形状&#xff09;的标准地图吗&#xff0c;…

Tableau可视化设计案例-04标靶图、甘特图、瀑布图

文章目录Tableau可视化设计案例04标靶图、甘特图、瀑布图1.标靶图1.1二月份电量销售额完成情况1.2参考线与参考区间2.甘特图2.1甘特图的概念与用途2.2交货延期情况的甘特图2.3不同的日期类型选择3.创建超市不同子类别产品的盈亏瀑布图Tableau可视化设计案例 本文是Tableau的案…

手把手转行|你真的要转行吗?

首先&#xff0c;我不鼓励盲目转行。 但凡你还有选择的机会&#xff0c;转行&#xff0c;都不是你的第一选择。 如果你是为了逃避而转行&#xff0c;那多半会以失败告终。 原因是&#xff0c;你现在想要逃避的问题&#xff0c;当前不解决&#xff0c;换一家公司&#xff0c;也要…

现在学编程,只要开始行动都不晚

我要告诉大家的是&#xff0c;学习编程&#xff0c;任何时候都不晚。 咱们首先说工资&#xff0c;我一直认为&#xff0c;不看工资的岗位纯属耍流氓。如果你关注每年的薪资排行榜&#xff0c;金融和 IT 行业连续多年稳居前二&#xff0c;而比较有意思的是&#xff0c;哪怕薪资…

C++ Primer 第二章 变量和基本类型

C Primer 第二章 变量和基本类型2.1. Primitive Built-in Types2.1.1. Arithmetic Types2.1.3. Literals2.2 Variables2.2.1. Variable DefinitionsInitializersList InitializationDefault Initialization2.2.2. Variable Declarations and Definitions2.2.3. Identifiers2.3.…

set系列集合、collection集合的总结

无序 不重复 无索引 HashSet 元素无序的底层原理&#xff1a;哈希表&#xff1a; JDk1.7之前&#xff1a; JDK1.8之后&#xff1a; 总结&#xff1a; HashSet 元素去重复的底层原理&#xff1a; 因为传入的参数值一样&#xff0c;所以重写之后的hashcode方法所给出的哈希值是…