当你将微控制器连接到传感器,显示器或其他模块时,你是否考虑过这两种设备如何相互通信?他们到底在说什么?他们如何理解对方?

电子设备之间的通信就像人类之间的通信。双方都需要说同样的语言。在电子产品中,这些语言称为通信协议。对我们来说幸运的是,在构建大多数DIY电子产品项目时,我们只需要知道几个通信协议即可。在本系列文章中,我们将讨论三种最常见协议的基础:串行外设接口(Serial Peripheral Interface, SPI),集成电路总线(Inter-Integrated Circuit, I2C)和通用异步接收器/发送器(Universal Asynchronous Receiver/Transmitter, UART)驱动的通信。 

首先,我们将从有关电子通信的一些基本概念开始,然后详细说明SPI的工作原理。在下一篇文章中,我们将讨论UART驱动的通信,而在第三篇文章中,我们将深入探讨I2C。

SPI,I2C和UART比USB,以太网,蓝牙和WiFi等协议要慢很多,但它们更简单,使用的硬件和系统资源也更少。SPI,I2C和UART非常适用于微控制器之间以及不需要传输大量高速数据的微控制器与传感器之间的通信。

串行通信 VS. 并行通信

电子设备通过有线物理连接在设备之间发送数据比特来相互通信。有点像单词中的字母,除了不是26个字母(英语字母表中的字母)外,一个比特是二进制的,只能表示1或0。通过电压的快速变化,比特从一个设备转移到另一个设备。在以5V电压工作的系统中,0 V的短脉冲作为0比特进行通信,而5V的短脉冲作为1比特进行通信。

数据位可以通过并行或串行的形式传输。在并行通信中,数据位的所有比特位同时发送,每一个比特链接一根独立的导线。下图显示了二进制中字母“ C”(01000011)的并行传输:

在串行通信中,所有比特位通过单根导线逐一发送。下图显示了二进制中字母“C”(01000011)的串行传输:

SPI通信简介

SPI作为通用通信协议在许多不同设备中使用。例如,SD卡模块,RFID卡读取器模块和2.4 GHz无线发送器/接收器均使用SPI与微控制器通信。

SPI的一个独特优势是可以无中断传输数据。可以在连续流中发送或接收任意数量的位。使用I2C和UART,数据以数据包的形式发送,限制为特定位数。开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。

通过SPI通信的设备处于主从关系。主机是控制设备(通常是微控制器),而从机(通常是传感器,显示器或存储芯片)从主机获取指令。SPI的最简单配置是一个主设备+一个从设备的系统,但是一个主设备可以控制多个从设备(下面有更多介绍)。

MOSI (Master Output/Slave Input) – 主设备向从设备发送数据的信号线

MISO (Master Input/Slave Output) – 从设备向主设备发送数据的信号线

SCLK (Clock) – 时钟信号线

SS/CS (Slave Select/Chip Select) – 主设备选择要向其发送数据的从设备的片选信号线

使用的信号线

4

最大传输速度

最高可达10Mbps

同步/异步

同步

串行/并行

串行

最大主设备数

1

最大从设备数

理论上无限*

*实际上,从站的数量受到系统负载电容的限制,这降低了主机在电压电平之间准确切换的能力。

SPI如何工作

时钟

时钟信号将主设备的数据比特输出同步到从设备的比特采样。每个时钟周期传输一比特数据,因此数据传输的速度取决于时钟信号的频率。由于主机配置并生成时钟信号,因此SPI通信始终由主机启动。

任何在设备间共享时钟信号的通信协议都称为同步通信。SPI是一种同步通信协议。还有一些异步方法不使用时钟信号。例如,在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。

可以使用时钟极性和时钟相位的属性来修改SPI中的时钟信号。这两个属性共同定义何时输出比特以及何时对其进行采样。主机可以设置时钟极性,以允许在时钟周期的上升沿或下降沿输出和采样比特。可以设置时钟相位,以便在时钟周期的第一个沿或第二个沿进行输出和采样,而不管它是上升还是下降。

选择从设备

主设备可以通过将从设备的CS / SS线设置为低电压电平来选择要与之通信的从设备。在空闲,即非传输状态下,从设备选择线保持在高电压电平。主设备上可能有多个CS / SS引脚,以允许多个从设备并行连接。如果仅存在一个CS / SS引脚,则可以通过菊花链将多个从设备连接到主设备。

多个从设备

可以将SPI设置为与单个主设备和单个从设备一起运行,并且可以与由单个主设备控制的多个从设备一起设置。有两种方法可以将多个从设备连接到主设备。如果主设备有多个从设备选择引脚,则从设备可以这样并行连接:

如果只有一个从设备选择引脚可用,则可以通过以下方式菊花链的方式连接从设备:

MOSI和MISO

主设备通过MOSI线以串行方式将数据发送到从设备。从设备通过MOSI引脚接收主设备发送的数据。从主设备发送到从设备的数据通常先发送最高有效位。

从设备也可以通过MISO线以串行方式将数据发送回主设备。从从设备发送回主设备的数据通常先发送最低有效位。

SPI数据传输步骤

  1. 主设备输出时钟信号:

  2. 主设备将SS / CS引脚切换到低电压状态,从而激活从设备:

  3. 主设备使用MOSI信号线每次将1比特数据发送到从设备。从设备读取接收到的数据比特:

  4. 如果需要响应,则从设备使用MISO信号线每次将1比特数据返回给主设备。主设备读取接收到的数据比特:

SPI总线的优点与缺点

使用SPI总线有一些优点和缺点,如果要在不同的通信协议之间进行选择,则应根据项目要求来判断何时使用SPI总线:

优点

  • 无起始位和停止位,因此数据位可以连续传输而不会被中断

  • 没有像I2C这样复杂的从设备寻址系统

  • 数据传输速率比I2C更高(几乎快两倍)

  • 分离的MISO和MOSI信号线,因此可以同时发送和接收数据

缺点

  • 使用四根信号线(I2C和UART使用两根信号线)

  • 无法确认是否已成功接收数据(I2C拥有此功能)

  • 没有任何形式的错误检查,如UART中的奇偶校验位

  • 只允许一个主设备

希望本文让你对SPI有更好的了解。继续阅读本系列的第二部分,以学习有关UART驱动通信的知识,或者继续进行第三部分,我们将讨论I2C协议。

参考原文:https://www.circuitbasics.com/basics-of-the-spi-communication-protocol

扫描上图二维码可直达课程页面,马上试听

往期精彩:

获取验证通关密语,就在本周日开班的验证V2课程

30w+还送股送房?60+IC企业2019薪资全面攀升!

UVM RAL模型:用法和应用

我们准备做第二期线下培训,依旧认真且严肃

如果你突然被裁员了,你的Plan B是什么?

[彩虹糖带你入门UVM]

理解UVM-1.2到IEEE1800.2的变化,掌握这3点就够

收藏 | 电子通信协议之SPI通信协议篇相关推荐

  1. MPU6050开发 -- 进阶之I2C/SPI通信协议

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78611309 上一篇基本概念讲了一通,大体上对MPU6050有了一个了解.对 ...

  2. stm32中常见的通信协议之SPI

    目录 1.SPI总线 2.SPI的寻址方式 3.SPI的工作原理总结 4.SPI的通讯过程 5.SPI的极性和相位 6.IIC和SPI的异同 7.stm32中SPI配置中常用的寄存器 8.stm32中 ...

  3. Verilog实现的SPI通信协议(主机模式)

    一.前言 最近在使用FPGA调试一个MCP2515CAN芯片的时候,需要用到SPI通信协议,也在网上看了许多不同人写的博客,也学习了很多种不同的写法,从结果来看,网上给出的大部分例子都能实现SPI通信 ...

  4. 【总线】SPI 通信协议

    目录 SPI总线协议概述 串行与并行通信 SPI通信介绍 SPI的工作原理 时钟 从属选择 多个从机 常规方法 菊花链方法 MOSI 和 MISO SPI 数据传输的步骤 SPI 的优缺点 优点 缺点 ...

  5. 【嵌入式】STM32基于SPI通信协议OLED屏显示

    STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...

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

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

  7. 嵌入式开发基础—SPI通信协议解析

    嵌入式开发基础-SPI通信协议解析 1 通信方式(主从通信) 1.1 什么是主从通信 1.2 主从通信如何实现 1.2.1 相关控制引脚介绍 1.2.2 如何通过控制引脚实现主从通信 2 通信数据交换 ...

  8. 电子制作之制作工具篇

    2006-04-28 21:00:10 电子制作之制作工具篇 无论是电子爱好者还是新产品开发者在制作电路或者研制样机时都离不开电子制作,这里简单介绍一下站长在电子制作方面的一些小经验,希望能对入门者有 ...

  9. 电子垃圾也很香 篇一:垃圾佬捡个路由器1:选择与刷机

    电子垃圾也很香 篇一:垃圾佬捡个路由器1:选择与刷机 前言 最近丈母娘总是抱怨家里的路由器不好用,总是动不动就断网.丈母娘的需求必须得满足啊,目前丈母娘家用的是tp的wr740n垃圾路由器,立马着手准 ...

最新文章

  1. java struts json_struts2的json插件配置详解(附demo)
  2. HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理
  3. GC之7大垃圾收集器详解(上)
  4. 关刀机器人_小学机器人活动总结
  5. python3 批量定义多个变量_Python 3.8 新功能大揭秘
  6. CentOs搭建svn
  7. 设计模式8(享元模式,解释器模式)
  8. 从Element ui看开发公共组件的三种方式
  9. 查找一个数据库内的所有表的行数
  10. 如何从源码包安装软件?
  11. mysql if join_如何在MySQL中使用JOIN编写正确的If … Else语句?
  12. 怎么用命令开远程主机的telnet服务1
  13. 05-树7 堆中的路径
  14. jdk和tomcat
  15. 利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值
  16. python爬虫之图片的懒加载
  17. html5ify插件,漂亮的jQuery对话框插件Dialogify
  18. 基于 Windows系统的 KingbaseES 数据库软件安装指南(3. 安装前准备工作)
  19. Freertos中空闲任务的重要性
  20. ERP与CRM、MRP、PLM、APS、MES、WMS、SRM的关系

热门文章

  1. LayUI: 工具条toolbar 绑定事件lay-event
  2. 小芒果键盘鼠标连点器搬砖神器工作室专用键盘录制鼠标录制正式发布啦
  3. 制作炫酷AR卡片特效——小技巧
  4. ccs是轮_DEH一次调频与 CCS一次调频
  5. 主动加人是小程序运营古老但不过时的招式
  6. OpenHarmony 的helloWorld尝试
  7. NGUI 背包系统的拖拽
  8. 74161功能表_74ls161引脚图与管脚功能表资料
  9. 产品经理需不需要懂技术
  10. 敏捷开发:5种主流方法介绍