SPI通信四大模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPI通信四大模式相关的知识,希望对你有一定的参考价值。

参考技术A SPI是由Motorola公司提出的一种同步串行外围接口;它在速度要求不高,低功耗,需要保存少量参数的智能化传感系统中得到了广泛应用;

  SPI是一个全双工的同步串行接口,在数据传输过程中,总线上只能是一个主机和一个从机进行通信;

  通信四种模式:

  1、MISO(Master In Slave Out)

  主机输入,从机输出;

  2、MOSI(Master Out Slave In)

  主机输出,从机输入;

  3、SCK(Serial Clock)

  串行时钟信号

  4、SS(Slave Select)

  从机选择信号,低电平有效;(即作从机时,该位置低)

  SPI总线可在软件的控制下构成各种系统

  SPI总线与多从机连接

  SPI的基本结构相当于两个8位移位寄存器的首尾相接,构成16位的环形移位寄存器,从而实现了主机与从机的数据交换;

  SPI接口的基本结构图

  SPI主从模式

  设置MSTR(主设备选择)和SPE位(使能位)来选择是否工作在主模式还是从模式;

  stm32强大之处:因为从机NSS位必须接0,而主机NSS位接1;stm32可以有软件来设置相应的主从位;

  SPI下时钟信号的相位和极性(设置由与之通信的具体芯片来设定)

  SPI接口可由CPOL和CPHA设定4种不同传输格式的时序;

  CPOL决定时钟脉冲SCK的有效脉冲方式(正脉冲、负脉冲)。CPHA决定数据线MOSI什么时候输出数据或采集数据;

  根据CPOL和CPHA的组合数目,一共四种设置情况;

  数据图分析:

  数据帧的格式

  根据SPI_CR1寄存器中的LSBFIRST位,输出数据位时可以MSB(高位先传)在先也可以是LSB(低位先传),根据SPI_CR1寄存器的DFF位,每个数据帧可以是8位或者16位,所选择的数据帧格式对发送/接收都有效;

  SPI通信配置步骤:(在主模式下,串行时钟在SCK脚产生)

  1、通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率;

  2、选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系;

  3、设置DFF位来定义8/16位数据帧格式;

  4、配置SPI_CR1寄存器的LSBFIRST位定义帧格式;

  5、如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式中,需要设置SPI_CR1寄存器的SSM和SSI位,如果NSS引脚工作在输出模式,则只需设置SSOE位;

  6、必须设置MSTR和SPE位(只当NSS被连到高电平,这些位才能保存置位)。

  在这个配置中,MOSI脚是数据输出,而MISO脚是数据输入;

  SPI通信过程:

stm32之SPI通信视频资料

http://www.makeru.com.cn/live/3523_1795.html?s=156461

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系列是既支持主机模式又支持从机模式

以上是关于SPI通信四大模式的主要内容,如果未能解决你的问题,请参考以下文章

SPI通信分析

SPI通信分析

STM32F103 SPI 通信问题!

请教STM32的SPI通信中的CRC校验问题 SPI

2个stm32怎么用spi通信

SPI通信