SPI总线协议

目录

一、简介

二、接口

三、传输模式

​四、数据交换

五、多从机配置

1、常规SPI模式

2、菊花链模式


一、简介

        串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。

        SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在时钟上升沿或者下降沿同步。SPI共有四根线,主机和从机可以同时传输数据。

        相对于I2C协议来说,SPI通信速率可以很高,一般能达到 MHz 甚至更高的级别,适用于高速数据传输;SPI支持全双工通信,主设备和从设备可以同时发送和接收数据,通信效率高;SPI时钟极性和相位可以调整,可以适应不同的外设和通信方式。但是,SPI线数多,并且不支持多主机连接,只能由一个主设备控制多个从设备。

二、接口

        SPI共有四根线,分别是MISO、MOSI、SCLK、CS。

  • MISO:主设备数据输入,从设备数据输出
  • MOSI:主设备数据输出,从设备数据输入
  • SCLK:同步时钟信号,由主设备产生
  • CS:从设备使能信号,由主设备控制。当总线上有多个从设备的时候,主设备如果需要和某个从设备通信,就将该设备对应的片选引脚拉低使能 

        学习完SPI的接口后,我们总结一下,要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。 片选通常是低电平有效信号。因此,主机必须在该信号上发送逻辑0以选择从机。SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送和接收同时进行。同时,SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样数据或移位数据。

三、传输模式

        在SPI中,主机可以选择时钟极性和时钟相位。在空闲状态期间,CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间,以及传输结束时CS为低电平且在向高电平转变的期间。

        CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。根据CPOL和CPHA位的选择,有四种模式可用。

SPI模式CPOLCPHA空闲状态下的时钟极性采样或移位的时钟相位
000逻辑低电平数据在上升沿采样,在下降沿移出
101逻辑低电平数据在下降沿采样,在上升沿移出
210逻辑高电平数据在下降沿采样,在上升沿移出
311逻辑高电平数据在上升沿采样,在下降沿移出

         看如下几张图,传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。

模式一

模式二

模式三

模式四

四、数据交换

        SPI设备之间的数据传输之所以被称为数据交换,是因为SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一共“发送者”或者“接收者”。事实上SPI设备在通信时两边各有一个移位寄存器,这样在发送一个bit的同时将会收到对方1个bit的数据,当发送完8bit数据后,也将收到对方的8bit数据,这也就意味着完成了1个byte的数据交换。

        SPI数据传输过程实际上就是主从设备两个移位寄存器的数据交换过程,所以SPI的读功能实际上可以由SPI的写功能实现,即随便写一个字节的无效数据即可。在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收到的数据有可能会被丢弃,导致SPI物理模块最终失效。 

五、多从机配置

        多个从机可与单个SPI主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。

1、常规SPI模式

        在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号,MOSI、MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

        但是常规SPI模式,随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。

优点

         每个从设备直接连接到主设备,数据传输路径短,延迟较低,适合实时性要求高的应用;每个从设备都有独立的片选信号(CS),一个从设备的故障不会影响其他从设备的正常工作,提高了系统的可靠性;每个从设备直接与主设备通信,无需中间设备转发数据,通信协议简单。

缺点

        每增加一个从设备,就需要一个额外的片选引脚,导致引脚资源消耗较大,限制了可以连接的从设备数量;需要为每个从设备布设独立的片选信号线,随着从设备数量的增加,布线复杂度增加;增加或移除从设备时,需要重新配置片选信号线和修改主设备的软件配置,灵活性较差。

2、菊花链模式

        在菊花链模式下 ,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一个SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依次类推。

        使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需要的时钟周期数与菊花链中的从机位置成比例。例如在下图所示的8位系统中,为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需要8个时钟。(注意:并非所有SPI器件都支持菊花链模式)

 优点

       菊花链模式通过串联多个设备,使得只需要一组SPI总线即可连接多个从设备,从而节省了主控设备的引脚资源;由于设备是串联的,所以布线相对简单,可以减少PCB上的布线复杂度;可以方便地添加或移除从设备,只需将新的设备串联在链的末端即可。

缺点

       每个设备都会引入一定的延迟,随着链条长度的增加,总延迟会累积,可能影响通信速度和实时性;如果链条中的一个设备故障,可能会影响后续所有设备的通信,降低系统的可靠性;传输的数据需要通过多个设备,中间设备需要对数据进行转发,这增加了信号的复杂性和系统设计的难度。  

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

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

相关文章

SpringBoot【2】集成 MyBatis Plus

SpringBoot 集成 MyBatis Plus 前言修改 pom.xml修改配置文件添加 实体类添加 持久层接口添加 持久层 XxxMapper.xml 文件添加 业务接口层添加 业务接口实现类添加 控制层添加 MyBatis 配置AutoFillMetaObjectHandlerMyBatisPlusConfig 验证 前言 由于 MySQL 备份/恢复测试&am…

Spring-JdbcTemplate

了解知道即可 JdbcTemplate环境配置 先加入依赖&#xff1a; 在pom.xml中要引入spring和mysql的依赖&#xff1a; <!--仓库和依赖--><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><ur…

Java阻塞队列:ArrayBlockingQueue

Java阻塞队列&#xff1a;ArrayBlockingQueue ArrayBlockingQueue是Java中的一个阻塞队列&#xff08;Blocking Queue&#xff09;实现&#xff0c;它是线程安全的&#xff0c;并且基于数组实现。ArrayBlockingQueue常用于生产者-消费者模型&#xff0c;在这种模型中&#xff…

某集团数字化转型蓝图规划项目案例(94页PPT)

案例介绍&#xff1a; 本集团数字化转型蓝图规划项目通过确定目标&#xff0c;如制定集团数字化转型的整体战略和规划&#xff0c;明确转型方向和目标。构建数字化业务体系&#xff0c;实现业务流程数字化、智能化。搭建数字化管理平台&#xff0c;提升集团内部的管理效率和决…

Pyshark——安装、解析pcap文件

1、简介 PyShark是一个用于网络数据包捕获和分析的Python库&#xff0c;基于著名的网络协议分析工具Wireshark和其背后的libpcap/tshark库。它提供了一种便捷的方式来处理网络流量&#xff0c;适用于需要进行网络监控、调试和研究的场景。以下是PyShark的一些关键特性和使用方…

C语言期末考试大纲详解

一&#xff1a; C语言的基本概念 C语言是一种通用的、过程式的计算机编程语言&#xff0c;设计提供了低级内存访问和简单、灵活的语言结构。以下是关于C语言的一些基本概念和组成部分的详细解释。 文件扩展名 .c&#xff1a;这是C语言源代码文件的扩展名。它包含了程序员编…

Noisee 和 Suno创作十二生肖震撼视频 – 有详细的实操步骤

历史文章 日赚800&#xff0c;利用淘宝/闲鱼进行AI音乐售卖实操 如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 抖音主播/电商人员有福了&#xff0c;利用Suno创作产品宣传&#xff0c;让产品动起来-小米Su7 用sunoAI写粤语歌的方法&#xff0c;博主已经亲自实践可行 …

docker desktop for mac os如何使用本地代理

在macbook上弄了个代理&#xff0c;然后按照网上所说的去配代理 然后测试下 docker pull busybox 结果无反应&#xff0c;超时。我去&#xff01;&#xff01;&#xff01; 鼓捣了半天&#xff0c;看了docker官网&#xff0c;问了chatgpt &#xff0c;按照它们所说的试了下也没…

想学编程,什么语言最好上手?

Python是许多初学者的首选&#xff0c;因为它的语法简洁易懂&#xff0c;而且有丰富的资源和社区支持。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;…

Gone框架介绍26 - Gone v1.x 版本 正式发布,更加强大的依赖注入,更加卓越的执行效率

gone是可以高效开发Web服务的Golang依赖注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文档地址&#xff1a;https://goner.fun/zh/ 文章目录 优化和新特性gone 核心功能增强内置Goners覆盖测试 后续计划 优化和新特性 gone 核心功能增强 重构了函数参数依…

【区分】累次极限与二重极限

累次极限与二重极限不要混淆&#xff0c;区分好下面5个命题

Python学习笔记13 -- API的说明及使用

一、API说明 1、API&#xff1a;Application Programming Interface -- 接口 2、Restful API&#xff1a;基于网页的API 3、JSON&#xff1a;JavaScript objection Notation 4、很多数据都可以找到公用API 二、安装requests模块 在终端输入&#xff1a; 可以保证使用当前…

单片机多个中断源时的设计思路,(51为例)工作寄存器R0-R7

51单片机中四组工作寄存器&#xff08;R0-R7&#xff09; 参考 可以看出每个工作寄存器区有8个字节即为R0-R7&#xff0c;当不指定使用哪个工作寄存器区的时候默认0区。其他工作区作为普通的RAM使用。特殊功能寄存器中有可以位寻址和不能位寻址的区域 下面文字引用 通过修改…

常用静止轨道卫星(geostationary satellite)及相关产品

1. 数据简介 维基百科 link 地球静止轨道&#xff08;或称地球赤道同步轨道&#xff0c;英语&#xff1a;geostationary orbit&#xff0c;简写&#xff1a;GEO&#xff09;是指地球赤道面上方35,786km的圆形轨道&#xff0c;该轨道上航天器的运行方向和地球自转方向一致。在…

使用python绘制三维散点图

使用python绘制三维散点图 三维散点图三维散点图的用途效果代码 三维散点图 三维散点图&#xff08;3D Scatter Plot&#xff09;是一种用于展示三维数据的图表。与二维散点图类似&#xff0c;三维散点图通过点在三维空间中的位置来表示数据点的三个特征。每个点在 x、y 和 z …

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践--图文解析

突破数据存储瓶颈&#xff01;转转业财系统亿级数据存储优化实践–图文解析 原文链接&#xff1a;https://juejin.cn/post/7358704806779437097 原文作者&#xff1a;转转技术团队 业财系统&#xff1a;业务和财务一体化系统 与传统财务记账不同&#xff0c;一笔金额不再是…

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

Digital电路仿真软件的安装

文章目录 1. Java环境的安装 2. Digital安装 3. 软件配置 1. Java环境的安装 电路仿真软件Digital是一款用于设计和仿真数字逻辑电路的工具。它可以帮助用户创建、测试和调试各种数字电路&#xff0c;提供可视化的电路编辑环境&#xff0c;使得设计过程更加直观和便捷。 D…

MySQL数据操作与查询- 连接查询

一、引入 1、为什么需要使用连接查询&#xff1f; 查询信息的来源如果来自多张表&#xff0c;则必须对这些表进行连接查询。 2、连接查询的分类 内连接和外连接。 二、内连接 1、概述 将两张表的记录组合在一起&#xff0c;产生一个新的结果。 &#xff08;1&#xff09…

【Java】过滤器/拦截器

文章目录 两者区别request链路全过程 在实际开发中&#xff0c;过滤器和拦截器都是经常使用的技术&#xff0c;但一被提及到其区别时&#xff0c;整个人就愣住了&#xff0c;好像没有认真地对两者进行区别和总结&#xff0c;这两者之间也确实很容易混淆&#xff0c;因此结合了很…