罗嗦记录SPI(Serial Peripheral Interface)串行外围设备接口理解

本文资料参考了野火的:
链接: https://embedfire.com/download/
强推SPI学习超级详细的一个博主:
链接: https://blog.csdn.net/WandZ123/article/details/124515711

划删除线斜体字是个人理解哈哈哈

一、spi是什么?

SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。是一种用于在微控制器和外部设备之间进行通信的串行通信协议。

这是接口,接口的一种,这个接口的连接线SPI总线,就比如手机充电,手机通过充电线和充电器连接,这个根充电线要适合手机接口和充电器接口才能起到充电的作用。充电线就类比SPI,有接口的头类比引脚和线SPI总线。

这个就是他们接线方式,而且SPI一般用于要求通讯速率较高的场合

Alt
*单纯的连接可不行,他们之间还要沟通,不然怎么知道对方要做什么。类比人与人沟通一样,要了解对方的语言听清讲啥才知道要干啥。 *

二、spi引脚理解

SPI 通讯使用 3 条总线及片选线, 3 条总线分别为 SCK、 MOSI、 MISO,片选线为SS

SS( Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、 CS.
NSS(Negative Slave Select),意为“低电平有效的从器件选择”信号
个人理解为:面对这么多人,空间这么多方向,这么知道我是对这你说,还是对着空气说还对着别人说的呢。

SCK (Serial Clock): 时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
个人理解为:沟通嘛,说的速度太快听不清也白搭,太慢会降低沟通效率。

MOSI:(Master Output,Slave Input):主设备输出/从设备输入引脚。
*老板安排下属做事(老板和下属的关系) *

MISO:(Master Input,,Slave Output):主设备输入/从设备输出引脚。
*老板问下属事做的怎么样了,下属就汇报 *

三、spi工作模式

时钟极性(CPOL: Clock Polarity)定义了时钟空闲状态电平:
(极性表示电平,比如正负极)

CPOL = 0,表示当SCLK=0时,处于空闲状态,所以有效状态就是SCLK处于高电平;
CPOL = 1,表示当SCLK=1时,处于空闲状态,所以有效状态就是SCLK处于低电平;

时钟相位(CPHA: Clock Phase)定义数据的采集时间:
(相位,X轴移动位置,对应左右,第一个还是第二个边沿)
CPHA = 0,表示:在时钟的第一个跳变沿(上升沿或者下降沿)进行数据采集,在第二个跳变沿发送数据;
CPHA = 1,表示:在时钟的第二个跳变沿(上升沿或者下降沿)进行数据采集,在第一个跳变沿发送数据;

由 CPOL 及 CPHA 的不同状态, SPI 分成了四种模式,见表 25-1,主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是“模式 0”与“模式 3”
只有在同个频道上交流才有意义吧。
图是截的野火的。
在这里插入图片描述
波形图时序图一定要忍痛看完理解,出问题的时候还可用示波器查看波形是否正确

3.1时序图

图是截的野火的。偷瞄喵用一下。
猜猜是什么工作模式
在这里插入图片描述
工作模式:1:
空闲状态下 SCK=0,CPOL= 0;偶边沿采样 CPAH = 1。
(1,6) NSS(片选信号):高–>低,开始通讯;低–>高,停止通讯
(3,5) 偶边沿采样,下降沿采样 CPAH = 1,

3.2不同工作模式对比图

在这里插入图片描述
在这里插入图片描述

四、spi通讯过程简述

1、 控制NSS信号,产生起始信号。
老板要先决定给哪个下属下达命令吧

2、 把要发送的数据写入到数据寄存器中,数据会被存储到发送缓冲区
老板把想说的话,想吩咐做的事,顺一下 ,记在小本本上

3、 通讯开始,SCK时钟运行。MOSI把缓冲区数据传出,MISO把数据存储进接收缓冲。
老板下达命令要进度,下属汇报工作,把下属做啥没做啥记录下来,才更好安排任务。

4、 发送完数据,状态寄存器内的数值会改变,接收同样。
话要一句一句说,命令要一条一条的下。汇报一条一条汇报。如果不知道状态的话会累死吧。

5、 通过读取数据寄存器获取接收缓冲区中的内容
看之前下属汇报的工作记录,在决定后面的工作分配。

五、spi在MCU里的架构图

在这里插入图片描述

  1. 通讯引脚:SPI 的所有硬件架构都从图 25-5 中左侧 MOSI、MISO、SCK 及 NSS 线展开的。见表 25-2。关于 GPIO 引脚的复用功能,可查阅《STM32F10x 规格书》,以它为准。
    在这里插入图片描述
    一般在资源不是十分紧张的情况下, 这几个 IO 口是专门用于下载和调试程序,不会复用为 SPI3。
  2. 时钟控制逻辑
    在这里插入图片描述

SPI时钟配置疑问
要配置SPI的时钟频率,需要考虑以下几个因素:
最大时钟频率: 首先,需要确定外部设备支持的最大时钟频率。外部设备的数据手册或规格表通常会提供这些信息。确保所选的时钟频率不超过外部设备支持的最大频率。
微控制器能力: 其次,需要了解微控制器的时钟发生器和SPI控制器的能力。微控制器通常有特定的时钟发生器模块,可以配置为产生所需的SPI时钟频率。
通信要求: 还需要考虑实际的通信需求。如果通信速度对系统性能至关重要,可能需要选择较高的时钟频率。但是,如果外部设备或系统其他部分无法跟上这样的速度,就需要权衡选择合适的时钟频率。
电气特性: 最后,还需要考虑电气特性和噪声容限。较高的时钟频率可能会引入更多的电气干扰和噪声问题,因此需要在这些方面进行充分评估。
一旦考虑了以上因素,就可以根据具体情况配置SPI的时钟频率。
*所以在用SPI通信器件时,注意看双方芯片手册 *

  1. 数据控制逻辑
    SPI 的 MOSI 及 MISO 都连接到数据移位寄存器上,数据移位寄存器的数据来源及目标接收、发送缓冲区以及 MISO、MOSI 线。
    当向外发送数据的时候,数据移位寄存器以“发送缓冲区”为数据源,把数据一位一位地通过数据线发送出去;
    当从外部接收数据的时候,数据移位寄存器把数据线采样到的数据一位一位地存储到“接收缓冲区”中。
    通过读写 SPI“数据寄存器 DR”,和发送缓冲和接收缓冲区通信
    其中数据帧长度可以通过“控制寄存器 CR1”的“DFF 位”配置
    8 位及 16 位模式;配置“LSBFIRST 位”可选择 MSB 先行还是 LSB 先行
  2. 整体控制逻辑
    在这里插入图片描述

六、编程要点

在这里插入图片描述
一般配置内容:
1、SPI通讯方向,双工,双线只接收,单线只接收等
2、设置主从模式
3、SPI 通讯的数据帧大小
4、通讯模式(CPOL,CPHA)
5、设置 NSS 引脚的使用模式
6、设置波特率分频因子
7、所有串行的通讯协议都会有 MSB 先行(高位数据在前)还是 LSB 先行(低位数据在前)的问题

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值