嵌入式通信原理—SPI总线通信原理与应用

news2024/9/19 11:28:15

文章目录

    • SPI 简介
      • 基本原理
      • 工作模式
      • 特点
    • SPI寻址方式
      • 1. 片选(Chip Select, CS)
      • 2. 多从设备通信
      • 3. 菊花链(Daisy-Chain)模式
      • 4. 地址寄存器(应用层)
    • SPI通信过程
      • 时钟信号生成(SCLK)
      • 数据传输(MOSI/MISO)
      • 数据采样与移位
      • 通信时序图
    • 极性和相位
      • 1. 时钟极性(CPOL)
      • 2. 时钟相位(CPHA)
      • SPI 的 4 种工作模式
      • 如何选择 CPOL 和 CPHA

SPI 简介

SPI(Serial Peripheral Interface)是一种同步串行通信协议,用于短距离的设备之间数据传输。它常用于微控制器与外部设备(如传感器、闪存、显示器等)的通信。SPI 具有以下主要特点:

基本原理

SPI 是主从模式的通信协议,通常包括一个主设备(Master)和一个或多个从设备(Slave)。主设备控制通信的时序,从设备根据主设备的指令进行响应。

SPI 使用以下四条主要信号线:

  1. MOSI(Master Out Slave In): 主设备发送数据到从设备的线路。
  2. MISO(Master In Slave Out): 从设备发送数据到主设备的线路。
  3. SCLK(Serial Clock): 主设备生成的时钟信号,用于同步数据传输。
  4. CS(Chip Select): 用于选择特定从设备进行通信,通常为低电平激活。

工作模式

SPI 通过时钟信号的不同相位和极性组合形成 4 种工作模式(Mode 0、1、2、3)。这 4 种模式根据 SCLK 的极性(CPOL)和相位(CPHA)决定数据的采样和发送时刻。

特点

  • 全双工同步通信: SPI 同时进行数据发送和接收,主设备和从设备可以同时发送和接收数据。
  • 速度快: 由于是硬件控制的同步通信,SPI 的传输速度较高,通常比 I²C 等其他协议更快。
  • 多从设备: 一个主设备可以控制多个从设备,通过单独的CS 线选择不同的从设备。
  • 简单协议: SPI 协议没有复杂的仲裁或地址机制,相对容易实现。

在这里插入图片描述

SPI寻址方式

在 SPI 通信中,寻址方式主要是通过片选(Chip Select, CS)线来实现的。与 I²C 等协议不同,SPI 没有内置的寻址机制,具体是通过以下方式选择和管理从设备的:

1. 片选(Chip Select, CS)

SPI 使用片选线(也称为从选择线,SS/CS)来选择与哪个从设备进行通信,主设备需要向对应从设备的CS线上发送使能信号。每个从设备通常都有自己独立的 CS 引脚。当主设备需要与某个从设备通信时,它会将对应从设备的 CS 线拉低(即置为低电平,active low,高电平也可以,根据从机而定),表示选择该从设备进行通信。其他未被选中的从设备保持 CS 线高电平,不参与通信。

2. 多从设备通信

如果在一个 SPI 总线上有多个从设备,主设备需要为每个从设备提供单独的 CS 线。典型的 SPI 多从设备通信过程如下:

  • 主设备通过拉低某个从设备的 CS 线来选择该从设备。
  • 其他未选中的从设备的 CS 线保持高电平,因此它们不会响应 SPI 通信信号。
  • 选中设备通过 MOSI 线接收数据,通过 MISO 线向主设备发送数据。
  • 当通信结束后,主设备将该从设备的 CS 线拉高,停止与该设备的通信。

例如,若有 3 个从设备,主设备可能需要 3 根 CS 线分别控制每个从设备,标记为 CS1、CS2、CS3。当主设备要与从设备 2 通信时,会拉低 CS2,进行通信,而 CS1 和 CS3 保持高电平。

3. 菊花链(Daisy-Chain)模式

在某些特殊场景下,多个从设备可以通过 菊花链 连接在一个 SPI 总线上。菊花链模式下,从设备之间依次连接,数据从一个从设备流向下一个从设备。这种模式可以通过减少主设备上的 CS 线数量来节省引脚,但通信方式较为复杂。

在菊花链模式下,主设备通过串行时钟(SCLK)发送数据,数据依次经过每个从设备。主设备发送的数据经过所有从设备后,最后一个从设备将数据回传给主设备。此模式通常用于某些特定类型的设备,如 LED 驱动器或移位寄存器。

4. 地址寄存器(应用层)

虽然 SPI 协议本身没有设备地址机制,但可以通过应用层协议来实现类似的寻址功能。主设备发送的第一字节或前几位可以定义为设备的虚拟地址,只有匹配该地址的从设备会响应。在这种方式下,SPI 寻址逻辑需要通过硬件或软件协议来设计和实现。

在这里插入图片描述

SPI通信过程

时钟信号生成(SCLK)

主设备生成的时钟信号 (SCLK) 用于同步数据的传输。数据在时钟的上升沿或下降沿进行采样或发送(取决于设置的 CPOL 和 CPHA 模式)。

数据传输(MOSI/MISO)

  • 数据发送(MOSI): 主设备通过 MOSI(Master Out Slave In)线向从设备发送数据。主设备和从设备在时钟的相应沿根据协议设置同步数据发送。
  • 数据接收(MISO): 同时,从设备可以通过 MISO(Master In Slave Out)线向主设备发送数据。由于 SPI 是全双工通信,数据发送和接收可以在同一时刻进行。

通常数据位数为 8 位,主设备每发送一个字节,从设备无需应答主设备,发完一个数据之后,立即再发送下一个字节。数据的传输顺序一般是从最高位(MSB)到最低位(LSB),但也可以通过配置改变。

数据采样与移位

  • 在数据传输过程中,数据位在时钟的某个边沿被送出,在另一边沿被接收。具体的数据采样时刻取决于时钟的极性(CPOL)和相位(CPHA)。
  • 主设备和从设备内部有 移位寄存器,每次时钟脉冲会导致移位寄存器中的数据往左移一位,直至完成整个字节的发送和接收。

通信时序图

在这里插入图片描述

极性和相位

在 SPI 通信中,时钟极性(CPOL)和相位(CPHA)是用于定义时钟信号的特性和数据采样时间的两个重要参数。这两个参数决定了数据在何时发送和接收。为了确保主设备和从设备能够正确通信,双方的时钟极性和相位必须一致。

1. 时钟极性(CPOL)

CPOL 定义了时钟信号在空闲状态下的电平。

  • CPOL = 0:空闲时钟线为 低电平
  • CPOL = 1:空闲时钟线为 高电平

2. 时钟相位(CPHA)

CPHA 定义了数据采样的时刻,即在时钟的哪个边沿对数据进行采样。

  • CPHA = 0:数据在第一个时钟边沿(时钟脉冲的第一个跳变沿,如上升沿或下降沿)进行采样或发送。
  • CPHA = 1:数据在第二个时钟边沿(时钟脉冲的第二个跳变沿,如上升沿或下降沿)进行采样或发送。

SPI 的 4 种工作模式

CPOLCPHA 的组合,SPI 有 4 种工作模式。这些模式规定了时钟信号的特性和数据传输的时序。主设备和从设备必须工作在相同的模式下,才能保证通信的正确性。

模式 0:CPOL = 0,CPHA = 0

  • 时钟空闲状态为低电平
  • 数据在上升沿(第一个边沿)采样,在下降沿发送。
  • 时钟处于低电平,数据在第一个上升沿采样。

模式 1:CPOL = 0,CPHA = 1

  • 时钟空闲状态为低电平
  • 数据在下降沿(第二个边沿)采样,在上升沿发送。
  • 时钟处于低电平,数据在第一个上升沿发送,第二个下降沿采样。

模式 2:CPOL = 1,CPHA = 0

  • 时钟空闲状态为高电平
  • 数据在下降沿(第一个边沿)采样,在上升沿发送。
  • 时钟处于高电平,数据在第一个下降沿采样。

模式 3:CPOL = 1,CPHA = 1

  • 时钟空闲状态为高电平
  • 数据在上升沿(第二个边沿)采样,在下降沿发送。
  • 时钟处于高电平,数据在第一个下降沿发送,第二个上升沿采样。

如何选择 CPOL 和 CPHA

  • CPOL 决定了空闲时钟的电平状态(高电平或低电平)。
  • CPHA 决定了数据在第一个边沿(上升沿或下降沿)还是第二个边沿进行采样。
  • 不同的设备可能要求不同的工作模式,选择 CPOL 和 CPHA 时需参照从设备的规格文档。主设备和从设备的 SPI 模式必须匹配才能成功通信。

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

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

相关文章

supermap Iclient3d for cesium加载地形并夸大地形

先看效果图 这是没有夸张之前的都江堰 这是夸大五倍后的都江堰 下面展示代码 主要就是加载supermaponline的skt地形然后夸大 <template><div class"PartOneBox"><div id"cesiumContainer"></div></div> </template>…

华为eNSP使用详解

eNSP&#xff08;Enterprise Network Simulation Platform&#xff09;是华为提供的一款网络仿真平台&#xff0c;它允许用户在没有真实设备的情况下进行网络实验和学习网络技术。eNSP可以模拟各种网络设备&#xff0c;如交换机、路由器、防火墙等&#xff0c;并支持创建多种网…

【mechine learning-十-grading descent梯度下降实现】

grading descent 梯度下降参数更新方法 --导数和学习率 从导数项直观理解梯度下降 grading descent 算法就是更新参数&#xff0c;今天来学习下如何更新w和b 梯度下降 还是以线性回归的均方差损失函数如下为例&#xff1a; 损失函数的可视化图如下 &#xff1a; 横轴和纵轴分…

[C++]类和对象(上)

我们在之前已经将C的入门基础做了讲解&#xff0c;在本章我们将系统性的阐述C中类和对象的基本定义和用法 1.类的定义 目录 1.类的定义 1.类定义的格式 2.访问限定符 3.类域 2.实例化 1.实例化的概念 2.实例化的对象大小 3.this指针 3.类的默认成员函数 1.构造函数…

二、Kubernetes中pod的管理及优化

目录 一 kubernetes 中的资源 1.1 资源管理介绍 1.2 资源管理方式 1.2.1 命令式对象管理 1.2.2 资源类型 1.2.3 基本命令示例 1.2.4 运行和调试命令示例 1.2.5 高级命令示例 二 什么是pod 2.1 创建自主式pod &#xff08;生产不推荐&#xff09; 2.2 利用控制器管理…

CPLEX+Yalmip+MATLAB2022a配置

来源&#xff1a;yalmipcplex12.10文件及安装教程-CSDN博客https://blog.csdn.net/qq_41944352/article/details/126421198 安装包 来源&#xff1a;yalmipcplex12.10文件及安装教程-CSDN博客 Cplex 需下载&#xff1a; Microsoft Visual C 2015 Redistributable 添加路径&a…

时空大数据平台:激活新质生产力的智慧引擎

在数字化转型的浪潮中&#xff0c;时空大数据平台以其独特的价值&#xff0c;成为推动新质生产力发展的关键力量。本文不仅深入剖析时空大数据平台的定义与内涵&#xff0c;探讨其在智慧城市、智慧农业、环境管理、应急管理等领域的应用成效&#xff0c;还将详尽阐述平台如何通…

【C++】unordered系列

前言&#xff1a; 在C11及以后的标准中&#xff0c;unordered容器是标准模板库&#xff08;STL&#xff09;的一部分&#xff0c;提供了高效的数据结构选项&#xff0c;适用于需要快速查找和插入操作的场景。 unordered通常与关联容器一起使用&#xff0c;特别是unordered_map和…

【ESP32】ESP-IDF开发 | GPIO通用输入输出+LED点灯和按键输入例程

1. 简介 ESP32芯片有34个物理GPIO pad&#xff0c;每个GPIO pad都可用作一个通用IO或连接一个内部的外设信号。IO_MUX、RTC IO_MUX和GPIO交换矩阵用于将信号从外设传输至GPIO pad。 从上面看到&#xff0c;每个pad可以配置成GPIO功能&#xff08;连接GPIO交换矩阵&#xff09;或…

7-17 汉诺塔的非递归实现

输入样例: 3输出样例: a -> c a -> b c -> b a -> c b -> a b -> c a -> c 分析&#xff1a; 不会汉罗塔的uu们&#xff0c;先看看图解&#xff1a; 非递归代码&#xff1a; #include<iostream> #include<stack> using namespace std; s…

tomcat的Catalinalog和localhostlog乱码

找到tomcat安装目录的loging文件 乱码这两个由UTF-8改为GBK

C++笔记---多态

1. 多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。 多态分为编译时多态(静态多态)和运行时多态(动态多态)&#xff0c;这里我们重点讲运行时多态&#xff0c;编译时多态(静态多态)和运行时多态(动态多态)。 编译时多态(静态多态)主要就…

MySQL中定义空值

如果一行中的某个列缺少数据值&#xff0c;该值被置为null&#xff0c;或者说包含一个空。 空是一个难以获得的、未分配的、未知的&#xff0c;或不适用的值。空和0或者空格不相同。0是一个数字&#xff0c;而空格是一个字符。 算术表达式中的空值 示例&#xff1a;计算年薪包…

CSS 布局技巧实现元素左右排列

开发中经常会遇到一个场景&#xff0c;使用 CSS 实现一个子元素靠右&#xff0c;其余子元素靠左。 这里总结一下常见的实现方式。 1. flex 布局 flexbox 是一种常用且灵活的布局方式&#xff0c;适合完成这种需求。将父容器设置为 display: flex&#xff0c;然后使用 margin…

Matlab Simulink 主时间步(major time step)、子时间步(minor time step)

高亮颜色说明&#xff1a;突出重点 个人觉得&#xff0c;&#xff1a;待核准个人观点是否有误 高亮颜色超链接 文章目录 对Simulink 时间步的理解Simulink 采样时间的类型Discrete Sample Times(离散采样时间)Controllable Sample Time(可控采样时间) Continuous Sample Times(…

51单片机-系列-单片机基础知识入门流水灯

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 单片机基础知识入门 常用的单片机封装 DIP直插 在DIP直插中&#xff0c;我们根据引脚数量的不同分为8P,14P,16P,18P,20P&#xff0c;这些是窄体&#xff0c;除了窄体之外&…

调用百度翻译API遇到的跨域问题解决方案

&#x1f389; 前言 这几天在学习前端的时候需要写一个实例&#xff0c;是关于翻译功能的。于是便想着在网上找一些API看能不能调用。这里遇到一个很坑的问题&#xff0c;就是我在暑假学习的时候曾经调用过心知天气的API、QQ音乐的API和今日头条的API&#xff0c;都未曾遇到过…

RT-DETR改进策略:BackBone改进|Swin Transformer,最强主干改进RT-DETR

摘要 在深度学习与计算机视觉领域,Swin Transformer作为一种强大的视觉Transformer架构,以其卓越的特征提取能力和自注意力机制,正逐步引领着图像识别与检测技术的革新。近期,我们成功地将Swin Transformer引入并深度整合至RT-DERT(一种高效的实时目标检测与识别框架)中…

BSV区块链上的覆盖网络服务现已开放公测

​​发表时间&#xff1a;2024年8月30日 BSV区块链的覆盖网络服务现已正式开放公测。对于BSV区块链生态系统内的特定交易类型和数据管理及访问&#xff0c;覆盖网络服务都可以为它们提供强大、可扩展、并且合规的解决方案。覆盖网络以及其它即将推出的BSV服务将赋予开发者、企业…

文件误删除?助你一键恢复

文件误删除之痛 在日常的数字生活中&#xff0c;文件误删除是许多用户不时会遭遇的“小确丧”。无论是手滑点击了“删除”键&#xff0c;还是系统崩溃导致的文件丢失&#xff0c;这些意外事件总能让人心急如焚。文件误删除不仅可能意味着重要资料的永久消失&#xff0c;还可能…