文章目录

  • 前言
  • 一、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。

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 SPI基础概念解析

    发表评论