STM32学习笔记【30.SPI总线】
文章目录
- 前言
- IIC 与 SPI对比
- 一、SPI是什么?
- 二、SPI物理架构
- 三、SPI工作原理
- 四、 SPI工作模式【4种工作模式】
- 五、SPI寄存器介绍
- 1. SPI控制寄存器1(SPI_CR1)(I2S模式下不使用)
- 2. SPI控制寄存器2(SPI_CR2)
- 3. SPI 状态寄存器(SPI_SR)
- 4. SPI 数据寄存器(SPI_DR)
- 六、库函数
- 总结
前言
本文主要介绍SPI相关理论知识,其物理架构、工作原理、工作模式以及寄存器和库函数等内容,更全面的了解SPI。
IIC 与 SPI对比
- IIC是半双工通讯,无法同时收发信息【发时无法收,收时无法发】;SPI是全双工通讯,可以同时收发信息;
- IIC通讯协议较复杂,而SPI通讯协议较简单
- IIC需要通过地址选择从机,而SPI只需一个引脚即可选中从机;【与从机通信,拉低该引脚既可】
- IIC通讯速率一般为100kHz左右,而SPI可以达到50MHz【速率快】
- IIC需要的通讯线较少,而SPI需要的通讯线较多。
一、SPI是什么?
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。
二、SPI物理架构
SPI总线包含4条通讯线,分别为SS、SCK、MOSI、MISO。它们的作用介绍如下:
(1)MISO- Master Input Slave Output, 主设备数据输入,从设备数据输出
(2)MOSI- Master Output Slave Input,主设备数据输出,从设备数据输入
(3)SCK- Serial Clock,时钟信号,由主设备产生
(4)SS(CS)- Chip Select, 片选信号,由主设备控制
STM32F1系列芯片有3个SPI接口。
三、SPI工作原理
只发送:不管从机收到什么就行
只接收:随便发一点东西,把从机的内容接收过来。
正常发0xFF,把从机数据交换过来。
SPI框图
四、 SPI工作模式【4种工作模式】
思考:SPI通过波特率发生器,来一个时钟进行一次移位,思考时钟是上升沿触发还是下降沿触发?高电平触发还是低电平触发?
需要知道【时钟极性】和【时钟相位】
时钟极性【CPOL】
没有数据传输时时钟线的空闲状态电平
0:SCK在空闲状态保持低电平
1:SCK在空闲状态保持高电平
时钟相位(CPHA):
时钟线在第几个时钟边沿采样数据
0:SCK的第一(奇数)边沿进行数据位采样,数据在第一个时钟边沿被锁存
1:SCK的第二(偶数)边沿进行数据位采样,数据在第二个时钟边沿被锁存
| SPI工作模式 | CPOL | CPHA | SCL空闲状态 | 采样边沿 | 采样时刻 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 低电平 | 上升沿 | 奇数边沿 |
| 1 | 0 | 1 | 低电平 | 下降沿 | 偶数边沿 |
| 2 | 1 | 0 | 高电平 | 下降沿 | 奇数边沿 |
| 3 | 1 | 1 | 高电平 | 上升沿 | 偶数边沿 |
模式0和模式3最常用
模式0时序图:
CS片选信号,先拉低,再拉高
CLK:高低→高低
橙色线进行采样
模式3相反,偶数边沿采样
五、SPI寄存器介绍
1. SPI控制寄存器1(SPI_CR1)(I2S模式下不使用)
BIDIMODE:双向数据模式使能,可选择是全双工还是半双工模式。
DFF:数据帧格式 (Data frame format)。可配置8位或16位。
SSM:软件从设备管理,控制NSS引脚
LSBFIRST:帧格式
SPE:SPI使能,设置1用SPI
BR[2:0]:波特率控制
MSTR:主设备选择,0——从设备;1——主设备
CPOL:时钟极性
CPHA:时钟相位
2. SPI控制寄存器2(SPI_CR2)
TXEIE:发送缓冲区空中断使能
RXNEIE:接收缓冲区非空中断使能
3. SPI 状态寄存器(SPI_SR)
TXE:发送缓冲为空,1为空 TDR
RXNE:接收缓冲非空,1为非空 RDR
4. SPI 数据寄存器(SPI_DR)
数据寄存器对应两个缓冲区:一个用于写(发送缓冲)【TDR】;另外一个用于读(接收缓冲)【RDR】。写操作将数据写到发送缓冲区;读操作将返回接收缓冲区里的数据。
六、库函数
HAL_SPI_Init();// 发送与接收函数,操作DR寄存器HAL_SPI_TransmitReceive();// 数据量大,用DMAHAL_SPI_TransmitReceive_DMA();// 中断HAL_SPI_TransmitReceive_IT();SPI理论部分到这结束,但SPI是一个通信接口,需要一个设备进行通信。【W25Q128设备】
总结
SPI是串行外设接口,是一种高速的、全双工、同步的通信总线。其速度能达到几十Mbps,甚至上百Mbps。
它需要四根线,分别为SCK、MOSI、MISO、SS。MOSI、MISO可以同时传输数据,效率高,无复杂协议,主机拉低片选信号,开始传输时钟和数据。
缺点是多一个从机,多一个SS线,IO口消耗大,虽然可以用译码器扩展,但没有I2C省IO口。
SPI没有标准的协议规范,时钟极性、相位要配置对才能通信。
应用场景上,高速设备首选SPI,Flash存储器、SD卡、高速ADC、DAC、无线模块,都是对高速有要求的。