目录

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

1.SPI总线

SPI是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信协议;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选),SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议。

注: SPI总线一般不能使用多个主机,因为多个SPI通信协议的总线占用的仲裁机制会弱一些。

2.SPI的寻址方式

当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中从机设备。

CS使能信号的选择
比如说当主设备要和从设备2进行通信,(假如说使能信号是低电平)那么就会在从设备2的片选信号上发送0,那么在从设备1和其他从设备(如果有的话)的片选信号上就要发送1,以保证主设备和从设备2的正常通信。

如何看一个芯片上的片选信号是需要高电平使能还是低电平使能。每个芯片上对应的元器件上都会有丝印,如果丝印是CS,那么就表示高电平使能,如果丝印是CS上面加横杠,那就表示低电平使能。

3.SPI的工作原理总结

  1. 硬件上为4根线。
  2. 主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
  3. 串行一位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行一位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
  4. 外设的写操作和读操作时同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个直接,就必须发送一个空字节来引发从机的传输。

4.SPI的通讯过程

SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑“1”,低电平表示逻辑“0”;一个字节传送完成后无需应答即可开始下一个字节的传送(SPI的通信方式是没有应答信号这个说法的);SPI采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。


SPI的通信过程中,其中时钟信号处于下降沿的时候,发送器发送数据,当时钟信号变为上升沿以后,接收器接收数据,这就是一个周期,后面不断重复这个过程,当这个周期持续8次以后,就发送了一位字节的数据;此后如果还有数据要进行发送,那么发送过程并不会中断,会继续这8个周期进行数据的发送,其中是先发高位再发低位。

5.SPI的极性和相位

SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素

CPOL表示SCLK空闲时的状态

  • CPOL=0时,空闲时SCLK为低电平
  • CPOL=1时,空闲时SCLK为高电平

CPHA表示采样时刻

  • CPHA=0时,每个周期的第一个时钟沿采样
  • CPHA=1时,每个周期的第二个时钟沿采样

由于极性和相位的组合,那么SPI就有四种工作模式,分别为以下四种:

1.CPOL=0,CPHA=0

第一种情况表示时钟线在空闲的时候是低电平,并且在下降沿的时候,发送器发送数据,在上升沿的时候,接收器接收数据。

2.CPOL=0,CPHA=1

第二种情况表示时钟线在空闲的时候是低电平,并且在上升沿的时候,发送器发送数据,在下降沿的时候,接收器接收数据。

3.CPOL=1,CPHA=0

第三种情况表示时钟线在空闲的时候是高电平,并且在上升沿的时候,发送器发送数据,在下降沿的时候,接收器接收数据。

4.CPOL=1,CPHA=1

第四种情况表示时钟线在空闲的时候是高电平,并且在下降沿的时候,发送器发送数据,在上升沿的时候,接收器接收数据。

需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式;我们在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则是无法进行通信的;所以我们需要对主设备CPOL和CPHA进行配置。

6.IIC和SPI的异同

相同点:
1.均采用串行、同步的方式。
2.均采用TTL电平,传输距离和应用场景类似。
3.均采用主从方式工作。

不同点:
1.IIC为半双工,SPI为全双工。
2.IIC有应答机制,SPI无应答机制。
3.IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送片选信号来寻址。
4.IIC的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调。

7.stm32中SPI配置中常用的寄存器

8.stm32中相关库函数

主要是在spi.h中的库函数
关于spi在stm32中具体配置和使用,我在后期会单独写一篇博客。

总结: 以上内容就是我对于spi总线协议知识的了解,希望各位大佬能帮我指正出错误,不胜感激!!!

stm32中常见的通信协议之SPI相关推荐

  1. 物联网系统中常见的通信协议分析

    物联网(Internet of Things, 简称IoT)是指将各种传感器.设备等通过互联网连接起来,形成一个庞大的网络,实现物与物之间的互联互通.在实现这个过程中,各种不同的通信协议被广泛应用.本 ...

  2. STM32中的通信协议

    STM32中的通信协议 通讯协议是指在嵌入式开发中,不同的硬件系统或者操作系统之间进行数据交换的方式,是一种数据通讯的规约. 通讯协议有很多种,而我今天要说的是串口通讯协议,而且是基于STM32来说的 ...

  3. stm32 中bootloader、startup_stm32f10x_md.s的作用

     stm32 中bootloader.startup_stm32f10x_md.s的作用 转载 2016-09-12 10:47:39 一.启动文件的作用是: 1.  初始化堆栈指针 SP; 2. ...

  4. 收藏 | 电子通信协议之SPI通信协议篇

    当你将微控制器连接到传感器,显示器或其他模块时,你是否考虑过这两种设备如何相互通信?他们到底在说什么?他们如何理解对方? 电子设备之间的通信就像人类之间的通信.双方都需要说同样的语言.在电子产品中,这 ...

  5. socket编程中常见的概念问题!

    socket编程一般指的就是网络编程,常见的服务端和客户机都是必不可少的,今天小千就来给大家介绍一下socket编程中常见的概念问题. 一.常见传输协议 1.tcp协议 TCP (Transmissi ...

  6. STM32中C语言知识点:初学者必看,老鸟复习(长文总结)

    说在前面的话 一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法. 其实C语言是可以边学单片机边学的,学单片机的 ...

  7. STM32中GPIO_Mode--GPIO配置

    本篇由转载而来,有侵权请联系作者,谢谢. 原博客地址:https://blog.csdn.net/snow416/article/details/6540646 一.GPIO配置 (1)GPIO_Mo ...

  8. stm32使用XR20M1172详细攻略·SPI转UART串口

    1.XR20M1172总结概述 XR20M1172是一块高性能的2通道通用异步接收器和发送器,通常用于串口不够用或外设模块只支持串口的场景中,其输入端有SPI和IIC两种协议可选,输出端两路UART, ...

  9. 计算机常用的颜色英文缩写,计算机用语中常见英文缩写和词组J

    J JAF Java Activation Framework Java启动框架 java IDL java Interface Definition Language java接口定义语言 java ...

最新文章

  1. raft算法与paxos算法相比有什么优势,使用场景有什么差异?
  2. MySQL迁移到ClickHouse方案
  3. 马云将于阿里巴巴功成身退?
  4. zookeeper集群配置并让metaq注册进来
  5. Linux线程-概念和控制
  6. 架构设计常见的几类问题
  7. python新建代码编辑文档快捷键大全_Python IDE PyCharm的快捷键大全
  8. openwrt反攻局域网arp攻击shell脚本
  9. springboot freemarker不渲染页面返回字符串
  10. opencv-python实际演练(二)军棋自动裁判(1)棋子图像采集设备DIY
  11. lempel ziv matlab,1.9 Lempel-Ziv算法
  12. 怎样开发微信小程序(最初的页面)
  13. 操作系统--磁盘存储器篇
  14. .NET Conf China 2022 第一批讲师阵容大揭秘!整个期待了!
  15. 最近打算更新一篇图片上传的文档!(一直更新得比较缓慢)
  16. C#iText7对PDF进行签章
  17. 站住!你会修改NPM全局模式的默认安装路径嘛?
  18. Java实现TCP通讯
  19. python hadoop wordcount_在Hadoop上用Python实现WordCount
  20. 国外常用的7个大数据分析软件

热门文章

  1. BASE32编码 --记录
  2. java-net-php-python-ssm巴音学院本科部校园网站计算机毕业设计程序
  3. 网络漫画书市场现状研究分析报告-
  4. 计算机水平考试 初级,计算机水平考试-初级程序员下午试题模拟38
  5. MySQL安装与启动
  6. 第四节——生成go测试代码
  7. linux节点状态 slurm,linux – 为什么slurm中的作业在TensorFlow脚本中无限期冻结?
  8. FTTB+NAT+pppoe+CBAC+*** client+AAA配置
  9. ElasticSearch 亿级数据检索深度优化
  10. CGWallpapers网站不登录下载图片