半小时搞懂STM32面经知识——SPI

1.SPI

面向面试学习之SPI篇,本文从理论+代码+问答三个维度展开:
1.SPI简介与使用的4根逻辑线(功能)

2.SPI数据通信流程:四步走,片选→时钟信号(四种工作模式)→主机收发数据→从机收发数据

3.SPI的工作模式(此问题其实是围绕SPI数据通信流程的第二步展开来的,做到心中有图)

1.1 什么是SPI

高速(≥10M/bps)+全双工+同步+一主多从+四根线
四根线:
MISO( Master Input Slave Output):主设备数据输入,从设备数据输出;
MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入;
SCLK(Serial Clock):时钟信号,由主设备产生;
CS/SS(Chip Select/Slave Select):由主设备控制,拉低某从设备,开始工作
以下为一个标准的SPI连接方式:
在这里插入图片描述

所有SPI设备的SCK、MOSI、MISO分别连在一起
主机另外引出多条SS控制线,分别接到各从机的SS引脚
输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入

1.2 SPI通信流程

SPI主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器是一种用于临时存储数据的内存单元,主打一个读写速度比内存快的多
在这里插入图片描述
SPI数据通信的流程可以分为以下四步走,看图说话:

主机进行片选→发送时钟信号(四种工作模式)→主机收发数据→从机收发数据

1、主设备发起信号,将CS/SS拉低,启动通信。

2、主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),因为SPI有四种模式,后面会讲到),它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。

3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(缓存长度不一定,看单片机配置),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。

4、从机(Slave)也将自己的串行移位寄存器(缓存长度不一定,看单片机配置)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

例如,下图示例中简单模拟SPI通信流程,主机拉低NSS片选信号,启动通信,并且产生时钟信号,上升沿触发边沿信号,主机在MOSI线路一位一位发送数据0X53,在MISO线路一位一位接收数据0X46,如下图所示:
在这里插入图片描述
这里有一点需要着重说明一下:SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。 若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
在这里插入图片描述

1.3 SPI四种工作模式

时钟极性:
时钟极性通常写为CKP或CPOL,CKP可以配置为1或0。这意味着你可以根据需要将时钟的默认状态(IDLE)设置为高或低。极性反转可以通过简单的逻辑逆变器实现;

CKP = 0:时钟空闲IDLE为低电平 0;
CKP = 1:时钟空闲IDLE为高电平1。

时钟相位:
时钟相位通常写为CKE或CPHA。时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

CKE = 0:在时钟信号SCK的第一个跳变沿采样;
CKE = 1:在时钟信号SCK的第二个跳变沿采样。

SPI有4种不同的传输时序,取决于时钟极性CPOL和时钟相位CPHA的组合。
下面看看具体例子:

时钟线空闲时是低电平,数据在第1个跳变沿(上升沿)采样
在这里插入图片描述

时钟线空闲时是低电平,数据在第2个跳变沿(下降沿)采样
在这里插入图片描述

时钟线空闲时是高电平,数据在第1个跳变沿(下降沿)采样

在这里插入图片描述

时钟线空闲时是高电平,数据在第2个跳变沿(上降沿)采样
在这里插入图片描述

1.4 SPI优缺点

优点:
1.无起始位和停止位,因此数据位可以连续传输而不会被中断;
2.没有像I2C这样复杂的从设备寻址系统;
3.数据传输速率比I2C更高(几乎快两倍);
4.分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
5.极其灵活的数据传输,不限于8位,它可以是任意大小的字;
6.非常简单的硬件结构。从机不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)
缺点:
1.使用四根信号线(I2C和UART使用两根信号线);
2.无法确认是否已成功接收数据(I2C拥有此功能);
3.没有任何形式的错误检查,如UART中的奇偶校验位;
4.只允许一个主设备;
5.没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
6.没有定义硬件级别的错误检查协议;
7.与RS-232和CAN总线相比,只能支持非常短的距离;

1.5 API的最大传输速率受什么的影响?

主设备的时钟频率
从设备的响应速度
cpu的处理spi数据的能力
输出端的驱动能力(pcb所允许最大信号传输速率)

1.6 主设备如何选择数据传输模式?

根据从设备的数据传输模式,主设备要去匹配相应模式,主从匹配才能建立spi通信

1.7 SPI通信中,两个设备都是主机模式,会出现什么情况

SPI是单主机通信,两个设备都启动的话,无法建立通信。

1.8 SPI最少可以几根线?

两根收发用一根,只能单方向,片选也去掉;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值