文章目录
- 前言
- 一、SPI通信协议概述
- 二、SPI硬件框图和软件层次
- 三、SPI通信时序
- 四、SPI控制器
- 总结
前言
本篇文章来给大家讲解一个非常重要的通信协议SPI,SPI在MCU和外设之间的通信用的是非常多的,这篇文章将带大家先来学习SPI的一些概念。
一、SPI通信协议概述
SPI(Serial Peripheral Interface)是一种同步串行数据通信协议,通常用于在数字系统之间传输数据。它是一种非常常见的通信协议,广泛应用于微控制器、传感器、存储器、外围设备等各种数字电路之间的通信。
以下是SPI通信协议的基本概述:
通信方式:
SPI 是一种全双工通信协议,意味着它允许同时在一条线上进行双向数据传输。通常由一个主设备(Master)和一个或多个从设备(Slave)组成。
主设备负责发起通信,生成时钟信号,并控制从设备的选择。
从设备在接收到主设备的请求后,通过从设备选择信号(Slave Select)响应通信,并进行数据传输。
通信线:
SPI使用四根线进行通信:
SCLK(Serial Clock):时钟线,由主设备产生,用于同步数据传输。
MOSI(Master Out Slave In):主设备输出,从设备输入,用于主设备向从设备发送数据。
MISO(Master In Slave Out):从设备输出,主设备输入,用于从设备向主设备发送数据。
SS(Slave Select):从设备选择线,由主设备控制,用于选择要进行通信的从设备。
传输方式:
SPI采用全双工传输,意味着数据可以在主设备和从设备之间同时双向传输。
通信数据是通过数据线(MOSI和MISO)进行传输的,并由时钟信号(SCLK)进行同步。
通常采用一种主设备定时从设备数据接收的方式进行通信,时钟信号的极性和相位可以在通信协议中进行配置。
数据传输格式:
SPI通信中的数据传输可以是不同长度的字节,通常是8位,但有时也支持其他位数,如16位或32位。
数据传输可以是带有附加控制位的帧,也可以是简单的数据字节SPI通信的协议并没有固定的数据帧格式,而是根据具体的应用需求进行定义和配置。
工作模式:
SPI有四种工作模式,由时钟极性(CPOL)和相位(CPHA)来定义:
Mode 0: CPOL = 0, CPHA = 0
Mode 1: CPOL = 0, CPHA = 1
Mode 2: CPOL = 1, CPHA = 0
Mode 3: CPOL = 1, CPHA = 1
工作模式决定了时钟信号在何时激活以及数据采样的时机,以确保正确的数据传输。
二、SPI硬件框图和软件层次
在芯片的内部有SPI控制器可以用来控制外部的Flash等设备。
软件层次:
1.应用程序使用Flash的驱动程序
2.Flash驱动程序需要根据模块的数据手册来编写
3.操作具体模块寄存器需要通过STM32 的SPI控制器来操作
三、SPI通信时序
SPI通信主要根据CS,MOSI,MISO,SCK这四个引脚来控制。
首先需要拉低片选引脚选择对应的从设备进行通信,在通信完成后将片选引脚拉高。
SCK引脚来提供时钟信号,时钟信号主要由主机来发出控制。
MOSI和MISO用于数据的接收和发送,主机发送多少个字节数据从机就能够接收多少个字节的数据。
时钟极性决定了SCK时钟线空闲的时候是高电平还是低电平,当CPOL = 0时 SCK在空闲状态是低电平,CPOL = 1时 SCK在空闲状态是高电平。
CPHA时钟相位决定了在奇数边沿进行采样还是在偶数边沿进行采样。
当CPHA = 0的时候在奇数边沿进行数据的采样:
当CPHA = 1的时候在偶数边沿进行数据的采样:
四、SPI控制器
下面是SPI控制器的框图:
通过SPI控制寄存器中的SPI_CR1中的CPOL和CPHA可以来控制SPI的工作模式。
波特率控制:
SPI控制器数据发送流程:
下面是SPI控制器发送数据的基本流程:
发送缓冲区(Transmit Buffer):首先,主设备将要发送的数据加载到发送缓冲区中。发送缓冲区是一个存储器单元,用于暂时存放将要传输的数据。
移位寄存器(Shift Register):SPI控制器内部有一个移位寄存器,用于将数据从发送缓冲区移至串行输出线(MOSI)。在传输过程中,数据从发送缓冲区被移入移位寄存器,然后以串行方式输出到MOSI线上。
MOSI(Master Out Slave In):MOSI线是SPI总线上的主设备输出从设备输入线。主设备通过MOSI线将数据发送给从设备。移位寄存器中的数据被推送到MOSI线上,以便发送给从设备。
接收缓冲区(Receive Buffer):在发送数据的同时,SPI控制器也可以接收来自从设备的数据。接收缓冲区是一个存储器单元,用于暂时存放从MISO线接收到的数据。
MISO(Master In Slave Out):MISO线是SPI总线上的主设备输入从设备输出线。当主设备发送数据时,从设备可以同时将数据发送回主设备。主设备通过MISO线接收从设备发送的数据。
写入8位数据就会读取到8位数据:SPI通常是一个全双工(Full-Duplex)通信协议,意味着在发送数据的同时也可以接收数据。当主设备向从设备发送8位数据时,在同一时钟周期内,主设备也可以从从设备接收8位数据。因此,发送和接收是同步进行的,每次发送数据都会同时接收到相应数量的数据。
综上所述,SPI控制器发送数据的流程涉及将数据从发送缓冲区移入移位寄存器,通过MOSI线发送给从设备,并在接收缓冲区接收来自从设备的数据。同时,SPI是一个全双工通信协议,每次发送数据都会同时接收到相应数量的数据。
总结
本篇文章主要是讲解了SPI的基础概念和基本原理框图,下一篇文章我们将给大家讲解STM32Cubemx配置SPI通信协议,并且使用SPI来读写Flash。