程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

通信协议-SPI

一、SPI概述

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。

SPI属于一主多从(一个主设备(Master),多个从设备(Slave))的总线结构,当存在多个从设备的时候,主设备通过片选信号来决定选择哪个设备。

1.1 基本结构

SPI共有4条信号线:

  • MISO(Master in slave out):主设备输入从设备输出,数据由从设备发出;
  • MOSI(Master out slave in):主设备输出从设备输入,数据由主设备发出;
  • SCLK/SCK(Serial clock):串行时钟信号,由主设备产生;
  • SS¯/CS¯(Slave/Chip slect):丛机选择信号,一般低电平有效,由主设备发出;

由上图也可以看出当SPI设备间通信时,数据线应该是MOSI连接MOSI,MISO连接MISO,SCLK与SCLK相连。

当只有单一SPI从设备时,如果从设备允许的话,可直接将CS/SS线固定在低电平。

对于多个从设备时,则每个从设备都需要一根CS/SS线来于主设备相连,从而达到主设备能与任一从从设备通信的目的。

1.2 优缺点

SPI总线的优点:

  • SPI通信无起始位和停止位,因此数据可以连续流传输而不会中断;没有像I2C这样的复杂的从站寻址系统,数据传输速率比I2C更高(几乎快两倍)。独立的MISO和MOSI线路,可以同时发送和接收数据;

SPI总线的缺点:

  • SPI使用四根线,而I2C和UART只是使用两根线,没有信号接收成功的确认(I2C拥有该功能),没有任何形式的错误检查(如UART中的奇偶校验位等);

二、主从设备通信过程

在SPI每个时钟中期内,都会进行一次全双工数据的传输,主设备通过MOSI线上发送1位时,从设备也会在读取数据之后通过MISO发送发送1位数据出去。

SPI主从设备都有一个串行移位寄存器,主设备通过向它的SPI串行移位寄存器写入一个字节来发送一次数据传输。

 

SPI数据通信流程可以分为以下几个步骤:

  • 主设备发起信号,将SS¯CS¯拉低,通信开始;
  • 主设备通过发送SCLK时钟信号,告诉从设备进行读写操作。这里的SCLK时钟信号是由SPI的模式来决定高电平还是低电平有效;
  • 主设备将要发送的数据写入到发送数据缓冲区(Memory),缓冲区经过移位寄存器位[7:0],串行移位寄存器通过MOSI将字节数据一位一位的传输到从设备,同时MISO接收到的数据经过移位寄存器一位一位的传输到接收缓冲区;
  • 从设备也将自己的串行移位寄存器位[7:0]的数据通过MISO传输到主设备,同时通过MOSI接收主设备发送的数据,这样这两个移位寄存器中的数据被交换;

三、通信特性

3.1 设备选择

SPI是单主设备(Single Master)通信协议,只有一个主设备能发起通信,当SPI主设备想读/写从设备时,它首先拉低从设备对应的SS¯线。

接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。如下图所示:

3.2 设备时钟 

SPI时钟特点主要包括:时钟频率、时钟极性和时钟相位。

3.2.1 时钟频率

SPI主设备必须在通信开始之前配置并生成相应的时钟信号,当然时钟频率受限于我们SPI主设备能输出的最大频率、以及最大的SPI传输频率。

3.2.2 时钟极性

根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。

时钟极性(CPOL)定义了SCLK时钟线空闲状态时的电平:

  • CPOL=0,即SCLK=0,表示SCLK时钟信号线在空闲状态时的电平为低电平,因此有效状态为高电平;
  • CPOL=1,即SCLK=1,表示SCLK时钟信号线在空闲状态时的电平为高电平,因此有效状态为低电;

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(396)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
历史上的今天:
2022-02-09 linux驱动基础概念以及驱动程序框架搭建
2020-02-09 Spring Security -- 短信验证码登录(转载)
2020-02-09 Spring Security -- 添加记住我功能(转载)
2020-02-09 Spring Security -- 添加图形验证码(转载)
2020-02-09 Spring Security -- 自定义用户认证(转载)
2020-02-09 Spring Security -- Spring Boot中开启Spring Security
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示