SPI通信分析

SPI通信分析

许久不更,想你们了。

SPI 模式的配置

  • SPI通信配置

    STM官方的芯片手册中对于SPI通信模式的配置过程,CPHA和CPCL的配置对于通信模式的影响如下图所示:

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
note :中断模式下的连续从机数据传输。

STM32通信接口介绍:

对于STM32F103ZET6配置:

Up to 13 communication interfaces
– Up to 2 × I2C interfaces (SMBus/PMBus)
– Up to 5 USARTs (ISO 7816 interface, LIN,
IrDA capability, modem control)
– Up to 3 SPIs (18 Mbit/s), 2 with I2S
interface multiplexed
– CAN interface (2.0B Active)
– USB 2.0 full speed interface
– SDIO interface

对于 STMF407ZET6配置:

Up to 15 communication interfaces
– Up to 3 × I2C interfaces (SMBus/PMBus)
– Up to 4 USARTs/2 UARTs (10.5 Mbit/s,
ISO 7816 interface, LIN, IrDA, modem
control)
– Up to 3 SPIs (37.5 Mbits/s), 2 with muxed
full-duplex I2S to achieve audio class
accuracy via internal audio PLL or external
clock
– 2 × CAN interfaces (2.0B Active)
– SDIO interface

任务要求:

SCLK: 高于4Mhz

MISO:速度高于2Mbps

note :要求数据要连续传输大约192+1字节,而SPI通信,需要分字节传送数据帧。另外还得兼顾MOSI引脚的配置,和CS片选信号的使用。

寄存器配置:

在这里插入图片描述

F4的无线接口的引脚定义:

在这里插入图片描述

F1的无线引脚的定义:

在这里插入图片描述

对于SPI通信的特点:

  1. 所有的通信过程都是有主设备进行发起。
  2. 在通信配置上,主从设备必须在同一时序模式下进行。即配CPOL 和CPHA.
  3. 在主从通信前,需要先使能从设备,然后才是主设备的SCK发出时钟信号。
  4. 在TI模式下,主设备不用设置CPOL和CPHA。以及配置LSBFIRST位来定义帧格式。
  5. SPI的半双工通信模式可以配置为包含一条时钟和一条数据线(只接受或只发送)。
  6. 在主机启动数据的发送前,需要从机先用软件将数据存储到其内部的发送缓冲区中,然后再启动SPI通信。
  7. 在只发送模式下,应用程序只需要忽略接收缓冲区,而接收管脚可以作为普通的IO使用。
  8. 为了达到最大的传输速度,可以使用DMA进行发送缓冲区数据的更新操作。(ADC的数据也支持DMA的数据传送)

速度测量:

数据分帧:

对于SPI通信而言,一次最多传输32 字节的数据。

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

  • SPI半双工通信下的从机中的只发送模式(MISO上发送数据)

    在这里插入图片描述

验证工作:

分为两个部分,第一是用两个单片机进行通信,测试通信的速率最大是多少;第二步是将主机换成FPGA,而从机依旧是用单片机,进行传输速度的测试。

第一步单片机的SPI通信:

主机:配置为单向只接受模式

单向只接收过程(BIDIMODE=0 且 RXONLY=1)
在此模式下,可以按如下所述简化过程(参见图 282):

  1. 将 SPI_CR2 寄存器中的 RXONLY 位置 1。
  2. 通过将 SPE 位置 1 使能 SPI:
    a) 在主模式下,这会立即激活 SCK 时钟的产生,并以串行方式接收数据,直到关闭
    SPI (SPE=0)。
    b) 在从模式下,当 SPI 主器件将该从器件的 NSS 驱动为低电平并输出 SCK 时钟时,
    接收数据。
  3. 等待 RXNE=1,然后读取 SPI_DR 寄存器以获取接收的数据(此操作会将 RXNE 位清 零)。对每个要接收的数据项重复此操作。
    此外,还可以使用在 RXNE 标志所产生的中断对应的中断子程序来实现该过程。
    注意:如果需要在最后一次传输后关闭 SPI,请采纳第 740 页的第 27.3.8 节:关闭 SPI中所述的 建议。

在这里插入图片描述

在这里插入图片描述

从机:配置为单向只发送模式

只发送模式下的数据发送过程(BIDIMODE=0、RXONLY=0)
在此模式下,可以按下文所述简化过程,并且可使用 BSY 位等待发送完成(参见图 280 和 图 281)。
1.通过将 SPE 位置 1 来使能 SPI。
2. 将第一个要发送的数据项写入 SPI_DR 寄存器(此操作会将 TXE 标志清零)。
3. 等待至 TXE=1,然后写入下一个要发送的数据项。对每个要发送的数据项重复此步骤。
4. 将最后一个数据项写入 SPI_DR 寄存器后,等待至 TXE=1,然后等待至 BSY=0,这表 示最后的数据发送完成。
此外,还可以使用在 TXE 标志所产生的中断对应的中断子程序来实现该过程。
注意:在不连续通信期间,在对 SPI_DR 执行写操作与 BSY 位置 1 之间有 2 个 APB 时钟周期的延 迟。因此,在只发送模式下,写入最后的数据后,必须先等待 TXE 位置 1,然后等待 BSY 位清零。
在只发送模式下,发送两个数据项后,SPI_SR 寄存器中的 OVR 标志将置 1,因为始终不会 读取接收的数据。

在这里插入图片描述

在这里插入图片描述

SPI通信的总线检测信号:

发送缓冲区为空 (TXE)
此标志置 1 时,表示发送缓冲区为空,可以将待发送的下一个数据加载到缓冲区中。对 SPI_DR 寄存器执行写操作时,将清零 TXE 标志。

接收缓冲区非空 (RXNE)
此标志置 1 时,表示接收缓冲区中存在有效的已接收数据。读取 SPI_DR 时,将清零该 标志。

BUSY
BSY 标志由硬件置 1 和清零(对此标志执行写操作没有任何作用)。BSY 标志用于指示 SPI 通信的状态。
在以下情况硬件将清零该标志:
● 传输完成时(主模式下的连续通信除外)
● 关闭 SPI 时
● 发生主模式故障时 (MODF=1)
当通信不连续时,BSY 标志在各通信之间处于低电平。
当通信连续时:
● 在主模式下,BSY 标志在所有传输期间均保持高电平
● 在从模式下,BSY 标志在各传输之间的一个 SPI 时钟周期内变为低电平
注意:请勿使用 BSY 标志处理每次数据发送或接收,最好改用 TXE 标志和 RXNE 标志。

如何使能USART的SPI模式?可细分为两种模式,也就是USART可以当作SPI的MASTER(主机模式),还可以当作SPI的SLAVE(从机模式)。

这里,需要大家注意一下,并不是所有的STM32都可以当作SPI的从机模式,目前主要是STM32L4+和STM32H7这两个系列可以支持SPI的从机模式,其他的都仅支持SPI的主机模式。简而言之,L4和H7系列是既支持主机模式又支持从机模式

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值