通信协议整理之 SPI 通信

文章目录

  • 通信协议整理之 SPI 通信
    • 简介
    • 工作原理
    • 通信连接方式
    • 补充
      • 硬件 SPI 和模拟 SPI

简介

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工同步通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI接口主要应用在 EEPROM ,FLASH ,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器等外设之间。
SPI 通信的一个独特优势是数据可以不间断地传输。可以在连续流中发送或接收任意数量的位。在使用 IIC 和 UART 协议时,数据是以数据包的形式发送的,数据包中定义了开始和结束的位,因此数据在传输过程中会中断。
通过 SPI 进行通信的设备属于主从关系。因此,SPI 协议主设备( 主站 )同样可以控制多个从设备( 从站 )。
SPI 引脚定义:

  • MOSI(主输出/从输入):主站将数据发送到从站的线路。
  • MOSI(主输出/从输入):主站将数据发送到从站的线路。
  • SCLK(时钟):时钟信号的线路。
  • SS/CS(从机选择):主站选择线,用于选择要将数据发送到哪个从机。

SPI 是串行通讯协议,数据是一位一位传输的,由 SCLK 提供时钟脉冲, MOSI , MISO 则基于此脉冲完成数据传输及同步的。例如数据输出通过 MOSI 引脚,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取,以此完成一位数据传输,输入也同理。

值得注意的是, SCLK 信号线仅由主设备控制,从设备不能控制信号线。因此,在一个基于 SPI 协议的通信系统中,至少得有一个主设备。

这样的传输方式有一个优点,与普通的串行通讯不同,SPI允许数据一位一位的传送,而不需要一次传输至少八位数据(一个字节),SPI 甚至允许暂停,因为 SCLK 时钟线仅由主控设备控制,主设备通过对 SCLK 时钟线的控制可以完成对通讯的控制,比如当没有时钟跳变时,从设备不采集或传送数据,反之则采集数据。SPI 还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。

工作原理

从上述可知,SPI 协议的通信是由时钟信号控制的,时钟信号负责将主设备的数据位输出与从设备的位采样同步。每个时钟周期传输一位数据,因此数据传输的速度取决于信号的频率。
SPI 中的时钟信号可以使用时钟极性和时钟相位属性进行修改。这两个属性协同工作,以定义何时输出以及何时进行采样。这就涉及 SPI 通信的时序,详解如下:

  • CPOL :时钟极性选择,为 0 时 SPI 总线空闲为低电平;为 1 时 SPI 总线空闲为高电平。
  • CPHA :时钟相位选择,为 0 时在 SCLK 第一个跳变沿采样;为 1 时在 SCLK 第二个跳变沿采样。
    由此组合,可以得到 SPI 的四种工作模式:
SPI 模式 CPOL CPHA 空闲状态下的时钟极性 用于采样和/或移位数据的时钟相位
1 0 0 逻辑低电平 数据在上升沿采样
2 0 1 逻辑低电平 数据在下降沿采样
3 1 0 逻辑高电平 数据在下降沿采样
4 1 1 逻辑高电平 数据在上升沿采样

通信连接方式

SPI 主设备要与某个从设备通信时,可以将从设备的 CS/SS 线路设置为低电平。反之,在空闲下,从设备选择线保持在高电平。主设备可以有多个从设备选择引脚,即 CS/SS 引脚,且允许多个从设备并联接线。如果主设备只有一个 CS/SS 引脚,则可以通过菊花链的形式将多个从设备连接到主站。
具体方法如下:

补充

硬件 SPI 和模拟 SPI

与 IIC 通信类似, SPI 通信也可用 IO 口模拟 SPI 协议时序来实现通信。
硬件 SPI 速度快,且可以使用 DMA 来进行加速。
软件 SPI 接口相对灵活,但时序较复杂,代码量较多。

通信协议整理之 SPI 通信相关推荐

  1. 通信协议整理之 IIC 通信

    通信协议整理之 IIC 通信 文章目录 通信协议整理之 IIC 通信 简介 工作原理 数据传输信号 数据有效条件 起始条件和终止条件 地址 读/写 应答 数据 传输步骤 IIC 通信优缺点 补充 硬件 ...

  2. spi通信协议_arduino的SPI通信

    SPI通信简介 SPI全称Serial Peripheral Interface,即串行外设接口. 由Motorola公司提出的一种同步串行数据传输标准. 所谓同步,即数据收发双方共用一个时钟: 所谓 ...

  3. 通信协议篇——SPI通信

    通信协议篇--SPI通信 1.简介 SPI(Serial Peripheral Interface)是一种高速.同步.全双工串行通信总线,采用主从机通信模式,主要应用在EEPROM,FLASH,实时时 ...

  4. ESP32-Arduino开发实例-与Arduino之间SPI通信

    NodeMCU-ESP32与Arduino之间SPI通信 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一种同步串行接口技术,是 ...

  5. 串口通信,IIC通信,SPI通信的简单区别

    一.串口通信 串口通信就是RS-232通信,只有两根线txd和rxd,通信双方必须设定相同的波特率,传输距离比较近. 二.IIC通信 IIC通信是最简单的串行通信协议,只需要一根数据线和一根时钟线,就 ...

  6. 基于FPGA的 SPI通信 设计(1)

    引言 低速通信目前搞过 UART串口通信.IIC通信.其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记 ...

  7. 实现语音识别系统:手把手教你使用STM32C8T6和LD3320(SPI通信版)实现语音识别

    本文实际是对LD3320(SPI通信版)的个人理解,如果单论代码和开发板的资料而言,其实当你购买LD3320的时候,卖家已然提供了很多资料.我在大学期间曾经多次使用LD3320芯片的开发板用于设计系统 ...

  8. STM32 网口转SPI通信

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.网络通信与SPI通信是什么? 二.代码思路 1.流程图 三.测试代码流程与关键代码 总结 前言 `本文介绍利用ST ...

  9. spi通信原理与应用

    平常用uart和can比较多,今天偶然碰见一个spi的问题,借着这个机会总结一下吧. 参考资料: https://blog.csdn.net/Dr_Haven/article/details/8268 ...

最新文章

  1. CCF201803-1 跳一跳(序列处理)
  2. ML之FE:基于load_mock_customer数据集(模拟客户,单个DataFrame)利用featuretools工具实现自动特征生成/特征衍生
  3. 【CV】使用OpenCV进行消失点检测(附代码)
  4. 在 WSL2.0 的 Ubuntu 18 里使用 Docker
  5. methodhandle_概览Java 7 MethodHandle及其用法
  6. 英特尔表示:元宇宙的路还很长
  7. flowable 设置流程跟踪高亮线的颜色
  8. 识别物体是否存在_【科学实践Vol.1】带你玩转“人脸识别”
  9. WinAPI-命令规则
  10. 8. Mac brew usage and php version
  11. Atitit  godaddy 文件权限 root权限设置
  12. 《高性能MySQL》之选择优化的数据类型
  13. java 记住密码的实现,JAVA记住密码功能的实现代码
  14. 自由手写体字帖pdf_何某手写体:一款随心所欲充满趣味的日系手写字体 免费商用...
  15. 智能电视有网但是服务器超时,智能电视越用越卡怎么办?四招教你解决电视卡顿...
  16. 【Scratch-外观模块】像素化特效指令
  17. html阅读小红书,小红书排名怎么刷:以下HTML5页面大纲开始!
  18. 关于入户广州的政策条件?大学生毕业后如何正确处理档案户口的事项?
  19. MFC绘制旋转Bezier曲面
  20. 软件工程中的耦合类型

热门文章

  1. 【机器学习】22个开源的机器学习库,帮助您选择一个适合您的管道工具。
  2. 阿里云服务器购买指南(适合新手小白的图文指导教程)
  3. 神奇的口袋(回溯DP)
  4. c语言游戏代码(c语言制作小游戏)
  5. seq2seq简单总结
  6. norflash的基本操作
  7. LeetCode387号问题
  8. 【转载】linux top命令及参数详解
  9. 微信小程序链接后台接口,进行数据交互
  10. BZOJ 2125 最短路 仙人掌最短路