STM32-SPI总线通信讲解

本文详细介绍了SPI总线的通信原理,包括其架构、工作模式、时钟控制、数据传输以及在STM32F4芯片上的应用,重点讨论了CPOL和CPHA设置对通信的影响。
摘要由CSDN通过智能技术生成

SPI总线通信原理

SPI总线简介

SPI总线介绍

        SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。

SPI总线被广泛地使用在FLASH、ADC、LCD等设备与MCU间,要求通讯速率较高的场合。

SPI总线物理·拓扑结构

SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

•(1)MOSI:主器件数据输出,从器件数据输入

•(2)MISO:主器件数据输入,从器件数据输出

•(3)SCLK:时钟信号,由主器件产生

•(4)/SS:从器件使能信号,由主器件控制(片选)

SPI总线协议

起始信号: NSS信号线由高变低,是SPI通讯的起始信号

结束信号:NSS信号由低变高,是SPI通讯的停止信号

数据传输:SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。

MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。

SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

主从设备间数据交换逻辑示意

        主机和从机都包含一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节发起一次传输。寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机。这样两个移位寄存器中的内容就被交换了。从机的写操作和读操作时同步完成的,因此SPI成为一个很有效的协议。

SPI的四种通信模式

        在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)这两项即是主从设备间数据采样的约定方式。

1.时钟极性CPOL: 设置时钟空闲时的电平

当CPOL = 0,SCK引脚在空闲状态保持低电平;

当CPOL = 1,SCK引脚在空闲状态保持高电平。
 

 

2.时钟相位CPHA:设置数据采样时的时钟沿

当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样

当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样

通信模式的设置

        由CPOL及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,因此通常主机要按照从机支持的模式去设置

STM32F4-SPI控制器特性

STM32的SPI架构剖析:

•通讯引脚

•时钟控制逻辑

•数据控制逻辑

•整体控制逻辑

通讯引脚

        STM32F4芯片有多个SPI外设,它们的SPI通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚,以《STM32F4xx规格书》为准。

        注:其中SPI1、SPI4、SPI5、SPI6是APB2上的设备,最高通信速率达42Mbtis/s,SPI2、SPI3是APB1上的设备,最高通信速率为21Mbits/s。其它功能上没有差异

时钟控制逻辑

        SCK线的时钟信号,由波特率发生器根据“控制寄存器CR1”中的BR[0:2]位控制,该位是对f pclk时钟的分频因子,对f pclk的分频结果就是SCK引脚的输出时钟频率

注:其中的f pclk频率是指SPI所在的APB总线频率,APB1为f pclk1,APB2为f pckl2

数据控制逻辑

        STM32F4的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源来源于接收缓冲区及发送缓冲区。

•通过写SPI的“数据寄存器DR”把数据填充到发送缓冲区中。

•通过读“数据寄存器DR”,可以获取接收缓冲区中的内容。

•其中数据帧长度可以通过“控制寄存器CR1”的“DFF位”配置成8位及16位模式;

•配置“LSBFIRST位”可选择MSB先行还是LSB先行。
整体控制逻辑

•整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据“控制寄存器(CR1/CR2)”的参数而改变,基本的控制参数包括前面提到的SPI模式、波特率、LSB先行、主从模式、单双向模式等等。

•在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR)”,只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、DMA请求及控制NSS信号线。

•实际应用中,一般不使用STM32 SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值