通信协议整理之 SPI 通信
通信协议整理之 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 通信相关推荐
- 通信协议整理之 IIC 通信
通信协议整理之 IIC 通信 文章目录 通信协议整理之 IIC 通信 简介 工作原理 数据传输信号 数据有效条件 起始条件和终止条件 地址 读/写 应答 数据 传输步骤 IIC 通信优缺点 补充 硬件 ...
- spi通信协议_arduino的SPI通信
SPI通信简介 SPI全称Serial Peripheral Interface,即串行外设接口. 由Motorola公司提出的一种同步串行数据传输标准. 所谓同步,即数据收发双方共用一个时钟: 所谓 ...
- 通信协议篇——SPI通信
通信协议篇--SPI通信 1.简介 SPI(Serial Peripheral Interface)是一种高速.同步.全双工串行通信总线,采用主从机通信模式,主要应用在EEPROM,FLASH,实时时 ...
- ESP32-Arduino开发实例-与Arduino之间SPI通信
NodeMCU-ESP32与Arduino之间SPI通信 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一种同步串行接口技术,是 ...
- 串口通信,IIC通信,SPI通信的简单区别
一.串口通信 串口通信就是RS-232通信,只有两根线txd和rxd,通信双方必须设定相同的波特率,传输距离比较近. 二.IIC通信 IIC通信是最简单的串行通信协议,只需要一根数据线和一根时钟线,就 ...
- 基于FPGA的 SPI通信 设计(1)
引言 低速通信目前搞过 UART串口通信.IIC通信.其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记 ...
- 实现语音识别系统:手把手教你使用STM32C8T6和LD3320(SPI通信版)实现语音识别
本文实际是对LD3320(SPI通信版)的个人理解,如果单论代码和开发板的资料而言,其实当你购买LD3320的时候,卖家已然提供了很多资料.我在大学期间曾经多次使用LD3320芯片的开发板用于设计系统 ...
- STM32 网口转SPI通信
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.网络通信与SPI通信是什么? 二.代码思路 1.流程图 三.测试代码流程与关键代码 总结 前言 `本文介绍利用ST ...
- spi通信原理与应用
平常用uart和can比较多,今天偶然碰见一个spi的问题,借着这个机会总结一下吧. 参考资料: https://blog.csdn.net/Dr_Haven/article/details/8268 ...
最新文章
- CCF201803-1 跳一跳(序列处理)
- ML之FE:基于load_mock_customer数据集(模拟客户,单个DataFrame)利用featuretools工具实现自动特征生成/特征衍生
- 【CV】使用OpenCV进行消失点检测(附代码)
- 在 WSL2.0 的 Ubuntu 18 里使用 Docker
- methodhandle_概览Java 7 MethodHandle及其用法
- 英特尔表示:元宇宙的路还很长
- flowable 设置流程跟踪高亮线的颜色
- 识别物体是否存在_【科学实践Vol.1】带你玩转“人脸识别”
- WinAPI-命令规则
- 8. Mac brew usage and php version
- Atitit godaddy 文件权限 root权限设置
- 《高性能MySQL》之选择优化的数据类型
- java 记住密码的实现,JAVA记住密码功能的实现代码
- 自由手写体字帖pdf_何某手写体:一款随心所欲充满趣味的日系手写字体 免费商用...
- 智能电视有网但是服务器超时,智能电视越用越卡怎么办?四招教你解决电视卡顿...
- 【Scratch-外观模块】像素化特效指令
- html阅读小红书,小红书排名怎么刷:以下HTML5页面大纲开始!
- 关于入户广州的政策条件?大学生毕业后如何正确处理档案户口的事项?
- MFC绘制旋转Bezier曲面
- 软件工程中的耦合类型