STM32——SPI通信

一、SPI通信

  • SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
  • 四根通信线:SCK(Serial Clock)【CLK或SCL】、MOSI(Master Output Slave Input)【DO(Data Output)】、MISO(Master Input Slave Output)【DI(Data Input)】、SS(Slave Select)【CS或NSS】
  • 同步,全双工
  • 支持总线挂载多设备(一主多从)
  • 最大传输速度取决于芯片厂商设计需求,比I2C最大400KHZ快
  • SPI硬件开销较大,通信线个数较多
  • SS(Slave Select)从机选择线(可以不止一条),专门用来指定通信的从机地址,相比于I2C在起始条件后的寻址操作方便

二、硬件电路

  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚【低电平有效】
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
  • 需要共地
  • 对比I2C的输出引脚配置为复用开漏输出,因为是半双工要切换输入输出,且实现多主机的时钟同步和总线仲裁,容易电源短路
  • 当从机的SS引脚为高电平时,MISO必须切换为高阻态
    在这里插入图片描述

三、移位示意图

在这里插入图片描述

高电平:移位输出
低电平:采样输入

SPI的数据收发都是基于字节交换这个基本单元进行的

如果只要读取从机数据时:主机可以发送0X00或0XFF去和从机换数据

四、SPI时序基本单元

起始条件:SS从高电平切换到低电平
终止条件:SS从低电平切换到高电平

在这里插入图片描述

交换一个字节(模式0)【用的多】

CPOL=0:空闲状态时,SCK为低电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据

在这里插入图片描述
ps:MISO一条线表示高阻态

交换一个字节(模式1)

CPOL=0:空闲状态时,SCK为低电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

在这里插入图片描述

交换一个字节(模式2)

CPOL=1:空闲状态时,SCK为高电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
在这里插入图片描述

交换一个字节(模式3)

CPOL=1:空闲状态时,SCK为高电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
在这里插入图片描述

五、SPI时序

通常采用指令码加读写数据的模型,起始条件后第一个字节为指令码,在从机中会有指令集,指导从机完成相应功能

发送指令

向SS指定的设备,发送指令(0x06)
在这里插入图片描述

指定地址写

向SS指定的设备,发送写指令(0x02),随后在指定地址(Address[23:0])下,写入指定数据(Data)

在这里插入图片描述

  • 由于从机W25Q64芯片内存地址为24位,所以起始条件后要发送三个字节指定地址,先发送的是高位地址,后发送的则是低位地址

指定地址读

向SS指定的设备,发送读指令(0x03),随后在指定地址(Address[23:0])下,读取从机数据(Data)

在这里插入图片描述

参考视频:江科大自化协

猜你喜欢

转载自blog.csdn.net/NRWHF/article/details/129482253