SPI通信协议

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双 工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达 25MHz以上。
SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。
SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设 备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从 设备使能选择(Chip Select,CS)。与I²C类似,协议都比较简单,也可以使用GPIO模拟SPI时序。
在这里插入图片描述
SPI可以同时发出和接收数据,因此SPI的理论传输速度比I²C更快。
但是SPI 通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚,而I²C通过设备地 址选择从机,只要设备地址不冲突,始终只需要两个引脚。

SPI可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连接示意图如图
在这里插入图片描述
SPI 一主一从示意图

在这里插入图片描述
SPI 一主多从示意图

2**.数据交换**
在SCK时钟周期的驱动下,MOSI和MISO同时进行,如图所示,可以看作一个虚拟的环形拓扑结构。
在这里插入图片描述
虚拟环形拓扑结构

主机和从机都有一个移位寄存器也是串行移位寄存器,主机移位寄存器数据经过MOSI将数据写入从机的移位寄存器,此时从机的串行移位寄存器的数据也通过MISO传给了主机,实现了两个移位寄存器的数据交换。无论主机还是从机, 发送和接收都是同时进行的,如同一个“环”。
如果主机只对从机进行写操作,主机只需忽略接收的从机数据即可。如果主机要读取从机数据,需要主机发送一个空数据来引发从机发送数据。

STM32F103系列的SPI控制器,可作为通信主机或从机,支持完整的四种传输模式,支持8位或16位数据 长度。每个SPI控制器都有一个片选引脚NSS,使用该引脚作为片选时,称为硬件片选模式,也可以使用任 意GPIO作为片选引脚,称之为软件片选模式。
SPI控制器结构如图所示,可以看作四部分组成。
①引脚:SPI协议需要四个个引脚:MOSI、MISO、SCK、NSS。其中NSS可以使用任意GPIO代替,通过软件控制电平实现手动片选。
②数据收发:SPI的传输可以看成一个环形拓扑结构。发送数据时,总线上的数据写入发送缓冲区,由 发送缓冲区进入移位寄存器,最后从MOSI输出。同时,MISO的数据也进入移位寄存器,传入接收缓冲区,
最后达到总线。
③时钟信号:SPI的时钟来源于PCLK,通过配置SPI_CR1寄存器的BR[2:0]实现对PCLK进行分频,最高为fPCLK/2。由前面图可知,SPI1挂载在APB2上的,SPI2是挂载在APB1上的。由前面图可知APB2最高72MHz,APB1最高36MHz。因此SP1工作最高频率为fPCLK2/2=36MHz,SPI2工作最高频率为 fPCLK1/2=18MHz。
④主控制逻辑:有两个控制寄存器(Control Register 1,CR1)和(Control Register 2,CR2)用于控制逻辑。通过它们可以修改SPI的工作模式(CPOL、CPHA),配置外设时钟频率,DMA使能等。同时控制逻辑的状态会反馈到(Status Register ,SR)这个状态寄存器上,得知SPI工作状态。

在这里插入图片描述
SPI 控制器模块图

3.STM32的SPI接口可以配置为支持SPI协议或者支持IIS
音频协议,默认是SPI协议,也可以通过软件方式切换成IIS方式。
SPI特征
● 3线全双工同步传输
● 带或不带第三根双向数据线的双线单工同步传输
● 8或16位传输帧格式选择
● 主或从操作
● 支持多主模式
● 8个主模式波特率预分频系数(最大为fPCLK/2)
● 从模式频率 (最大为fPCLK/2)
● 主模式和从模式的快速通信
● 主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变
● 可编程的时钟极性和相位
● 可编程的数据顺序,MSB在前或LSB在前
● 可触发中断的专用发送和接收标志
● SPI总线忙状态标志
● 支持可靠通信的硬件CRC
─ 在发送模式下,CRC值可以被作为最后一个字节发送
─ 在全双工模式中对接收到的最后一个字节自动进行CRC校验
● 可触发中断的主模式故障、过载以及CRC错误标志,所以我们可以根据中断标志来判断数据发送情况,数据是否开始发送。
● 支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求

在这里插入图片描述
SP1接在APB1上

SPI一些寄存器
在这里插入图片描述
当SSM被置位时,NSS引脚上的电平由SSI位的值决定。
在这里插入图片描述
帧格式
0:先发送MSB; 意思为先发送高字节
1:先发送LSB。 意思为先发送低字节

SPE:SPI使能 (SPI enable)
位6
0:禁止SPI设备;
1:开启SPI设备。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

传输模式
SPI有四种传输模式,如表 18.1.2 所示,主要差别在于CPOL和CPHA的不同。
CPOL(Clock Polarity,时钟极性)表示SCK在空闲时为高电平还是低电平。当CPOL=0,SCK空闲时为
低电平,当CPOL=1,SCK空闲时为高电平。
CPHA(Clock Phase,时钟相位)表示SCK在第几个时钟边缘采样数据。当CPHA=0,在SCK第一个边
沿采样数据,当CPHA=1,在SCK第二个边沿采样数据。
在这里插入图片描述
如图CPHA=0时,表示在时钟第一个时钟边沿采样数据。当CPOL=1,即空闲时为高电平,
从高电平变为低电平,第一个时钟边沿(下降沿)即进行采样。当CPOL=0,即空闲时为低电平,从低电平变为高电平,第一个时钟边沿(上升沿)即进行采样。
在这里插入图片描述
从高电平变为低电平再变为高电平,第二个时钟边沿(上升沿)即进行采样。当CPOL=0,即空闲时为低电
平,从低电平变为高电平再变为低电平,第二个时钟边沿(下降沿)即进行采样。

在这里插入图片描述

SPI接口模式
1.数据帧格式
在这里插入图片描述
根据SPI_CR1寄存器的LSBFIRST位,输出数据可以选择MSB(高位)先或者LSB(低位)先。
根据SPI_CR1寄存器的DFF位,可以选择数据帧是8位或者16位,对发送和接收都有效。
在这里插入图片描述

2.状态标志
通过三个标志可以完全监控SPI总线的状态

发送缓存器空闲标志(TXE)
在这里插入图片描述
此标志为1的时候,表示发送缓冲寄存器为空,可以写入下一个待发送数据进入缓冲器中,当写入SPI_DR(数据寄存器)时,TXE标志被清除。
接收缓冲器非空(RXNE)
在这里插入图片描述
此标志为1表明接收缓冲器中包含有效数据,读SPI数据寄存器可以清楚此标志。
BSY标志
BSY标志由硬件设置与清楚,此标志表明SPI通信层的状态。
在这里插入图片描述

SPI中断
在这里插入图片描述

SPI引脚配置

从设备引脚管理(NSS)
①软件模式:
可以设置SPI_CR1寄存器的SSM位来使能这种模式,在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动。

②硬件模式:
第一种情况:NSS输出使能,当STM32工作为SPI模式的时,NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从的SPI设备。

第二种情况:NSS输出被关闭:允许操作于多主环境。

版权声明:本文为CSDN博主「玻璃晴朗橘子辉煌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_56926420/article/details/122915746

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双 工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达 25MHz以上。
SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。
SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设 备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从 设备使能选择(Chip Select,CS)。与I²C类似,协议都比较简单,也可以使用GPIO模拟SPI时序。
在这里插入图片描述
SPI可以同时发出和接收数据,因此SPI的理论传输速度比I²C更快。
但是SPI 通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚,而I²C通过设备地 址选择从机,只要设备地址不冲突,始终只需要两个引脚。

SPI可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连接示意图如图
在这里插入图片描述
SPI 一主一从示意图

在这里插入图片描述
SPI 一主多从示意图

2**.数据交换**
在SCK时钟周期的驱动下,MOSI和MISO同时进行,如图所示,可以看作一个虚拟的环形拓扑结构。
在这里插入图片描述
虚拟环形拓扑结构

主机和从机都有一个移位寄存器也是串行移位寄存器,主机移位寄存器数据经过MOSI将数据写入从机的移位寄存器,此时从机的串行移位寄存器的数据也通过MISO传给了主机,实现了两个移位寄存器的数据交换。无论主机还是从机, 发送和接收都是同时进行的,如同一个“环”。
如果主机只对从机进行写操作,主机只需忽略接收的从机数据即可。如果主机要读取从机数据,需要主机发送一个空数据来引发从机发送数据。

STM32F103系列的SPI控制器,可作为通信主机或从机,支持完整的四种传输模式,支持8位或16位数据 长度。每个SPI控制器都有一个片选引脚NSS,使用该引脚作为片选时,称为硬件片选模式,也可以使用任 意GPIO作为片选引脚,称之为软件片选模式。
SPI控制器结构如图所示,可以看作四部分组成。
①引脚:SPI协议需要四个个引脚:MOSI、MISO、SCK、NSS。其中NSS可以使用任意GPIO代替,通过软件控制电平实现手动片选。
②数据收发:SPI的传输可以看成一个环形拓扑结构。发送数据时,总线上的数据写入发送缓冲区,由 发送缓冲区进入移位寄存器,最后从MOSI输出。同时,MISO的数据也进入移位寄存器,传入接收缓冲区,
最后达到总线。
③时钟信号:SPI的时钟来源于PCLK,通过配置SPI_CR1寄存器的BR[2:0]实现对PCLK进行分频,最高为fPCLK/2。由前面图可知,SPI1挂载在APB2上的,SPI2是挂载在APB1上的。由前面图可知APB2最高72MHz,APB1最高36MHz。因此SP1工作最高频率为fPCLK2/2=36MHz,SPI2工作最高频率为 fPCLK1/2=18MHz。
④主控制逻辑:有两个控制寄存器(Control Register 1,CR1)和(Control Register 2,CR2)用于控制逻辑。通过它们可以修改SPI的工作模式(CPOL、CPHA),配置外设时钟频率,DMA使能等。同时控制逻辑的状态会反馈到(Status Register ,SR)这个状态寄存器上,得知SPI工作状态。

在这里插入图片描述
SPI 控制器模块图

3.STM32的SPI接口可以配置为支持SPI协议或者支持IIS
音频协议,默认是SPI协议,也可以通过软件方式切换成IIS方式。
SPI特征
● 3线全双工同步传输
● 带或不带第三根双向数据线的双线单工同步传输
● 8或16位传输帧格式选择
● 主或从操作
● 支持多主模式
● 8个主模式波特率预分频系数(最大为fPCLK/2)
● 从模式频率 (最大为fPCLK/2)
● 主模式和从模式的快速通信
● 主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变
● 可编程的时钟极性和相位
● 可编程的数据顺序,MSB在前或LSB在前
● 可触发中断的专用发送和接收标志
● SPI总线忙状态标志
● 支持可靠通信的硬件CRC
─ 在发送模式下,CRC值可以被作为最后一个字节发送
─ 在全双工模式中对接收到的最后一个字节自动进行CRC校验
● 可触发中断的主模式故障、过载以及CRC错误标志,所以我们可以根据中断标志来判断数据发送情况,数据是否开始发送。
● 支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求

在这里插入图片描述
SP1接在APB1上

SPI一些寄存器
在这里插入图片描述
当SSM被置位时,NSS引脚上的电平由SSI位的值决定。
在这里插入图片描述
帧格式
0:先发送MSB; 意思为先发送高字节
1:先发送LSB。 意思为先发送低字节

SPE:SPI使能 (SPI enable)
位6
0:禁止SPI设备;
1:开启SPI设备。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

传输模式
SPI有四种传输模式,如表 18.1.2 所示,主要差别在于CPOL和CPHA的不同。
CPOL(Clock Polarity,时钟极性)表示SCK在空闲时为高电平还是低电平。当CPOL=0,SCK空闲时为
低电平,当CPOL=1,SCK空闲时为高电平。
CPHA(Clock Phase,时钟相位)表示SCK在第几个时钟边缘采样数据。当CPHA=0,在SCK第一个边
沿采样数据,当CPHA=1,在SCK第二个边沿采样数据。
在这里插入图片描述
如图CPHA=0时,表示在时钟第一个时钟边沿采样数据。当CPOL=1,即空闲时为高电平,
从高电平变为低电平,第一个时钟边沿(下降沿)即进行采样。当CPOL=0,即空闲时为低电平,从低电平变为高电平,第一个时钟边沿(上升沿)即进行采样。
在这里插入图片描述
从高电平变为低电平再变为高电平,第二个时钟边沿(上升沿)即进行采样。当CPOL=0,即空闲时为低电
平,从低电平变为高电平再变为低电平,第二个时钟边沿(下降沿)即进行采样。

在这里插入图片描述

SPI接口模式
1.数据帧格式
在这里插入图片描述
根据SPI_CR1寄存器的LSBFIRST位,输出数据可以选择MSB(高位)先或者LSB(低位)先。
根据SPI_CR1寄存器的DFF位,可以选择数据帧是8位或者16位,对发送和接收都有效。
在这里插入图片描述

2.状态标志
通过三个标志可以完全监控SPI总线的状态

发送缓存器空闲标志(TXE)
在这里插入图片描述
此标志为1的时候,表示发送缓冲寄存器为空,可以写入下一个待发送数据进入缓冲器中,当写入SPI_DR(数据寄存器)时,TXE标志被清除。
接收缓冲器非空(RXNE)
在这里插入图片描述
此标志为1表明接收缓冲器中包含有效数据,读SPI数据寄存器可以清楚此标志。
BSY标志
BSY标志由硬件设置与清楚,此标志表明SPI通信层的状态。
在这里插入图片描述

SPI中断
在这里插入图片描述

SPI引脚配置

从设备引脚管理(NSS)
①软件模式:
可以设置SPI_CR1寄存器的SSM位来使能这种模式,在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动。

②硬件模式:
第一种情况:NSS输出使能,当STM32工作为SPI模式的时,NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从的SPI设备。

第二种情况:NSS输出被关闭:允许操作于多主环境。

版权声明:本文为CSDN博主「玻璃晴朗橘子辉煌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_56926420/article/details/122915746

生成海报
点赞 0

玻璃晴朗橘子辉煌

我还没有学会写个人说明!

暂无评论

相关推荐

HAL库控制PS2手柄

吐槽一下 最近买了个ps2手柄,结果买家发的例程全都是好几年前的库函数版本,尝试移植基本没啥可能。虽然PS2手柄已经被开发很久了,不过我看网上用hal库来写控制的很少,例程也都是用库函数

STM32G4之RTC实时时钟

前言 一、RTC介绍 STM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器

stm32进不去串口中断的问题

今天遇到了特别棘手的问题,程序进入串口中断 原本应该进入这段程序: void USART1_IRQHandler(void) {if(USART_GetITStatus(USART1,USART_IT_RXNE)

2022寒假自学蓝桥杯嵌入式

2022寒假自学蓝桥杯嵌入式 欢近似从0开始准备2022年4月份省赛 学习记录分享 2022/1/22晚 硬件部分的认识(国信长天) 液晶屏,芯片在液晶屏下 电源选择跳线 下载调试文件接口