SPI协议

文章目录

  • 前言
  • 一、简介
    • 1、通信模式
    • 2、总线定义
    • 3、SPI通信结构
    • 4、SPI通讯时序
    • 5、SPI数据交互过程
  • 二、多从机模式
    • 1、多NSS
    • 2、菊花链
    • 3、SPI通信优缺点
    • 4、UART、IIC、SPI 区别
  • 三、总结
  • 四、参考资料


前言

SPI协议是我们的重要通信协议之一,我们需要掌握牢靠。


一、简介

1、通信模式

SPI是“全双工”(具有单独的发送和接收线路),因此可以在同一时间发送和接收数据,另外SPI的接收硬件可以是一个简单的移位寄存器。这比异步串行通信所需的完整UART要简单得多,并且更加便宜;

2、总线定义

MISO:Master input slave output 主机输入,从机输出(数据来自从机);

MOSI:Master output slave input 主机输出,从机输入(数据来自主机);

SCLK : Serial Clock 串行时钟信号,由主机产生发送给从机;

SS:Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号。

  • 需要注意的是不同的厂家定义不同:

MISO也可以是SIMO,DOUT,DO,SDO或SO(在主机端);
MOSI也可以是SOMI,DIN,DI,SDI或SI(在主机端);
NSS也可以是CE,CS或SSEL;
SCLK也可以是SCK;

3、SPI通信结构

在这里插入图片描述

上图为了更好的区分,实际上无论是在主机传输到从机还是从机传输到主机两条线都在传输数据。传输过程:主机首先会将NSS信号拉低来表示选择那个从机进行通信当接收端检测到时钟的边沿信号立即读取数据线的信号,时钟信号只能由主机产生。

在这里插入图片描述

SSPBUF:Synchronous Serial Port Buffer, 泛指 SPI 设备里面的内部缓冲区, 一般在物理上是以 FIFO 的形式, 保存传输过程中的临时数据;
SSPSR:Synchronous Serial Port Register, 泛指 SPI 设备里面的移位寄存器(Shift Regitser), 它的作用是根据设置好的数据位宽(bit-width) 把数据移入或者移出 SSPBUF;
Controller:泛指 SPI 设备里面的控制寄存器, 可以通过配置它们来设置 SPI 总线的传输模式。

需要注意的是:在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致 SPI 物理模块最终失效。

4、SPI通讯时序

时钟极性 CKP/Clock Polarity:

根据芯片的级型要求决定我们的空闲状态是高电平还是低电平

  • CKP = 0:时钟空闲IDLE为低电平 0
  • CKP = 1:时钟空闲IDLE为高电平1

时钟相位 CKE /Clock Phase (Edge):

除配置串行时钟速率和极性外,SPI主设备还应配置时钟相位(或边沿)。根据硬件制造商的不同,时钟相位通常写为CKECPHA;顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

  • CKE = 0:在时钟信号SCK的第一个跳变沿采样;
  • CKE = 1:在时钟信号SCK的第二个跳变沿采样;
    我们根据上面这两个极性与相位来确定我们的传输模式,不同的模式传输的时序不同。
  • 01
    在这里插入图片描述
  • 10

在这里插入图片描述

  • 00
    在这里插入图片描述
  • 11
    在这里插入图片描述
  • 汇总图:
    在这里插入图片描述

5、SPI数据交互过程

下面解释的数据交互过程采用00的模式进行传输
在这里插入图片描述

上表中时钟信号 1 代表时钟上升沿,0 代表下降沿。我们采用的时 SPI 通信模式 0,所以第一个时钟上升沿到来时完成数据采样,主机将自己要发送的数据最高位放到 MOSI(主机输出从机输入数据线)上,而从机也将自己要发送的数据最高位放到 MISO(从机输出主机输入数据线)上,当第一个时钟的下降沿到来时主机的 SSPSR 把 MISO 上的数据存入 SSPBUF,而从机的 SSPSR 则把 MOSI 上的数据存入自己的SSPBUF,这样主机从机就完成了 1bit 数据的交互。

二、多从机模式

1、多NSS

  1. 通常,每个从机都需要一条单独的SS线。
  2. 如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他NSS信号线的状态为高电平。
    在这里插入图片描述

2、菊花链

定义:在设备信号以串行的方式从一个设备依次传到下一个设备,不断循环直到数据到达目标设备的方式称为菊花链。

由于串行传输,我们需要一级一级的查找,如果在更高优先级的设备发送故障,那么下面优先级较低的就不会得到服务,一般的解决方法是使用超时处理,超过我们设定的时间直接跳过该从机(短路)。
在这里插入图片描述

3、SPI通信优缺点

优点:

1、全双工通信

2、高速数据传输速率

3、极其灵活的数据传输、不限于8位、可以是任意大小的字

4、非常简单的硬件结构:从站不需要唯一地址、从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

缺点:

1、没有主从机的应答信号:主机可能在不知情的情况下无处发送

2、通常仅支持一个主设备

3、需要更多的引脚(与I2C不同)

4、没有定义硬件级别的错误检查协议

5、与RS-232和CAN总线相比,只支持非常短的距离

4、UART、IIC、SPI 区别

1、对于信号线数目:
UART为3根,RX、TX、GND ,SPI为4根,SDO、SDI、SCLK、SS,IIC为2根,SDA、SCLK
2、设备主从关系
UART无从属关系,SPI存在主从设备,通过片选信号选择从机 ,而IIC同样也存在主从设备,不过是通过地址选择从机。
3、通信方式
UART无从属关系,SPI存在主从设备,通过片选信号选择从机 ,而IIC同样也存在主从设备,不过是通过地址选择从机。
4、传输速度
UART传输速度较慢 ,SPI比I2C总线要快,速度可达到几Mbps。
5、应用场景
UART常用于控制计算机与串行设备的芯片,也就是我们经常所说的串口,基本都用于调试。
SPI主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 。
I2C一般是用在同一个板子上的2个IC之间的通信 ,它可以替代标准的并行总线,连接各种集成电路和功能模块
6、传输距离
IIC弱于UART和SPI,因为I2C需要有双向IO的支持,而且使用上拉电阻(为了实现线与),抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信
7、通信特征
UART:异步,一帧可以传5/6/7/8位,低位先发送
SPI: 同步,SPI允许数据一位一位的传送,甚至允许暂停。从最高位开始传
IIC:同步,电平信号,一次连续8bit。从最高位开始传
8、协议复杂度
UART:结构比较复杂
SPI:实现要比UART简单,UART需要固定的波特率,也就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
IIC:协议比SPI复杂,但是连线比标准的SPI要少


三、总结

稍微将SPI的资料进行了一个整理,这里非常感谢下面参考的博主,写的非常详细,一文读懂!

四、参考资料

SPI协议详解(图文并茂+超详细)

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

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

相关文章

春秋云镜 CVE-2018-1000533

春秋云镜 CVE-2018-1000533 gitlist远程命令任意执行 靶标介绍 gitlist是一款使用PHP开发的图形化git仓库查看工具。在其0.6.0版本中,存在一处命令参数注入问题,可能导致远程命令执行漏洞 启动场景 漏洞利用 exp POST /example/tree/a/search HTTP/…

Rocky(Centos)安装中文字体(防止中文乱码)

1、查看字体列表 运行下列命令 fc-list 若出现,下面截图,则需要安装字体管理软件 安装字体库,运行: yum -y install fontconfig 当看到下图的提示信息时说明已安装成功: 二、添加中文字体 1)window…

Matlab图像处理-巴特沃思低通滤波器

巴特沃思低通滤波器 巴特沃思低通滤波器又称作最大平坦滤波器。与理想滤波器不同的是,巴特沃斯低通滤波器的传递函数并没有给出明显截止的尖锐的不连续性。一阶巴特沃斯滤波器没有振铃现象,在二阶滤波器中,振铃现象通常很难察觉,…

nlp系列(7)实体识别(Bert)pytorch

模型介绍 本项目是使用Bert模型来进行文本的实体识别。 Bert模型介绍可以查看这篇文章:nlp系列(2)文本分类(Bert)pytorch_bert文本分类_牧子川的博客-CSDN博客 模型结构 Bert模型的模型结构: 数据介绍 …

【校招VIP】前端JavaScript语言之跨域

考点介绍: 什么是跨域?浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是前端校招的一个重要考点,在面试过程中经常遇到,需要着重掌握。本期分享的前端算法考点之…

(vue)Vue项目中使用jsPDF和html2canvas生成PDF

(vue)Vue项目中使用jsPDF和html2canvas生成PDF 效果&#xff1a; 安装与使用 1.&#xff1a;安装jsPDF和html2canvas npm install jspdf html2canvas2.在需要生成PDF文档的组件中引入jsPDF和html2canvas <template><div><el-button type"primary"…

Ajax + Promise复习简单小结simple

axios使用 先看看老朋友 axios axios是基于Ajaxpromise封装的 看一下他的简单使用 安装&#xff1a;npm install axios --save 引入&#xff1a;import axios from axios GitHub地址 基本使用 axios({url: http://hmajax.itheima.net/api/province}).then(function (result…

百度自研高性能ANN检索引擎,开源了

作者 | Puck项目组 导读 Puck是百度自研的开源ANN检索引擎。Puck开源项目包含两种百度自研的检索算法&#xff0c;以高召回、高准确、高吞吐为目标&#xff0c;适用于多种数据规模和场景。随着业务发展不断的优化和迭代&#xff0c;进行充分的技术开发和测试&#xff0c;确保了…

GEE/PIE遥感大数据处理与典型案例丨数据整合Reduce、云端数据可视化、数据导入导出及资产管理、机器学习算法等

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

文章预览 安防监控/视频存储/视频汇聚平台EasyCVR播放优化小tips

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&#xff0c;…

shell脚本介绍

当你进入Linux世界的大门时&#xff0c;就会遇到一个强大而又神奇的工具——Shell。Shell是一种命令行解释器&#xff0c;为你在Linux系统中与计算机进行互动提供了无限的可能性。 学习Shell可以让你获得强大的自动化和脚本编程能力&#xff0c;让你更高效地处理文件和目录、管…

ChatGPT可以生成Windows密钥

ChatGPT 可以回答许多问题、生成和修改代码&#xff0c;最近还可以生成 Windows 10 和 Windows 11 的许可证密钥。自从 OpenAI 的 ChatGPT 推出以来&#xff0c;人工智能已成为许多用户面临的挑战。 他们不断地试图削弱这种智力&#xff0c;或者想尝试它的局限性和可能性。例如…