目录

概述

1 功能介绍

1.1 总述

 1.2 QUADSPI的主要特点

1.3 QUADSPI(直接读写数据模式)

2 QUADSPI功能描述

2.1 QUADSPI框图

2.2 QUADSPI pins

2.3 QUADSPI的命令时序

2.3.1 指令周期

2.3.2 地址周期

2.3.3 Alternate-byte阶段

2.3.4  Dummy-cycle阶段

2.3.5 数据阶段

3 NCS behavior


概述

本文主要介绍STM32G4的QSPI接口相关的知识点,包括模块框架结构,各种类型的时序图,NCS的波形特性等内容。

1 功能介绍

1.1 总述

QUADSPI是一种专门针对单、双或四spi闪存的通信接口。它可以在以下三种模式中任意一种工作:
•间接模式:所有操作都使用QUADSPI寄存器执行。
•自动状态轮询模式:定期读取外部闪存状态寄存器,并在标志设置的情况下产生中断。
•内存映射模式:外部闪存映射到设备地址空间,并被系统视为内部存储器。


使用双闪存模式,吞吐量和容量都可以增加两倍同时访问Quad-SPI闪存

 1.2 QUADSPI的主要特点

三种功能模式:间接、自动状态轮询和内存映射
•双闪存模式,其中8位可以发送/接收同时访问两个闪存并行
•SDR和DDR支持
•完全可编程的操作码间接和内存映射模式
•完全可编程帧格式的间接和内存映射模式
•集成FIFO接收和传输
•允许8位、16位和32位数据访问
•间接模式操作的DMA通道
•在FIFO阈值,超时,操作完成和访问错误上产生中断

1.3 QUADSPI(直接读写数据模式)

当处于间接模式时,命令通过写入QUADSPI寄存器来启动,数据通过写入或读取数据寄存器来传输,与其他通信外设相同。

当FMODE = 00 (QUADSPI_CCR[27:26])时,QUADSPI处于间接写入模式,其中字节在数据阶段被发送到闪存。数据通过写入数据寄存器(QUADSPI_DR)来提供。

当FMODE = 01时,QUADSPI处于间接读取模式,在数据阶段从闪存接收字节。通过读取QUADSPI_DR恢复数据。

要读/写的字节数在数据长度寄存器中指定(QUADSPI_DLR)。如果QUADSPI_DLR = 0xFFFF_FFFF(全部为1),则认为数据长度未定义,并且QUADSPI只是继续传输数据,直到达到闪存的末端(由FSIZE定义)。如果没有要传输的字节,则使用DMODE(QUADSPI_CCR[25:24])必须设置为00。

如果QUADSPI_DLR = 0xFFFF_FFFF和FSIZE = 0x1F(最大值表示4 gb闪存),那么在这种特殊情况下,传输将无限期地继续,仅在中止请求或QUADSPI被禁用后停止。在读取最后一个内存地址(地址0xFFFF_FFFF)之后,继续读取地址= 0x0000_0000。

当需要发送或接收的编程字节数达到时,设置TCF,如果TCIE = 1则产生中断。在数据数量未定义的情况下,根据QUADSPI_CR中定义的闪存大小,当达到外部SPI内存的限制时设置TCF。

2 QUADSPI功能描述

2.1 QUADSPI框图

1) 双闪模式禁用时的QUADSPI框图

2)双闪模式开启时的QUADSPI框图

2.2 QUADSPI pins

下表列出了QUADSPI引脚,六个用于与单个闪存接口,或10在双闪模式下与两个闪存(flash 1和flash 2)接口。

2.3 QUADSPI的命令时序

 QUADSPI使用命令与闪存通信。每个命令可以包括五个阶段:指令、地址、备用字节、虚拟、数据。这些阶段中的任何一个都可以被配置为跳过,但至少有一个指令、地址、备用字节、或者数据阶段必须存在。

NCS在每个命令开始前下降,在每个命令结束后再次上升。

quad-SPI模式下的read命令示例

2.3.1 指令周期

 在这个阶段,一个8位指令,配置在指令位域QUADSPI_CCR[7:0]寄存器,被发送到闪存,指定要执行的操作类型。大多数闪存一次只能从IO0/SO信号中接收一个比特的指令(单spi模式),指令阶段可以选择一次发送2位(在双spi模式下通过IO0/IO1),或一次发送4位(在四spi模式下通过IO0/IO1/IO2/IO3)。这可以使用QUADSPI_CCR[9:8]寄存器的IMODE[1:0]位域进行配置。当IMODE = 00时,跳过指令阶段。

2.3.2 地址周期

在地址阶段,将1-4个字节发送到闪存,以指示操作的地址。发送的地址字节数是在QUADSPI_CCR[13:12]寄存器的ADSIZE[1:0]位域中配置的。在间接和自动状态轮询模式下,要发送的地址字节是在QUADSPI_AR寄存器的address[31:0]位域中指定的,而在内存映射模式下,地址是直接通过AHB给出的皮质或来自DMA)。地址阶段可以一次发送1位(在单spi模式下通过SO),一次发送2位(通过IO0/IO1双spi模式),或4位。

2.3.3 Alternate-byte阶段

在交替字节阶段,将1-4个字节发送到闪存,一般用于控制操作模式。要发送的备用字节数在QUADSPI_CCR[17:16]寄存器的[1:0]位域中配置。要发送的字节在QUADSPI_ABR寄存器中指定。

交替字节相位可以一次发送1位(在单spi模式下通过SO),一次发送2位(在双spi模式下通过IO0/IO1),或者一次发送4位(在四spi模式下通过IO0/IO1/IO2/IO3)。这可以使用QUADSPI_CCR[15:14]寄存器的ABMODE[1:0]位域进行配置。当ABMODE = 00时,跳过交替字节阶段,命令序列直接进入下一个阶段(如果有的话)。有时在交替字节阶段只需要发送一个小块,而不是一个完整的字节,例如当使用双模式并且只使用两个周期时。

2.3.4  Dummy-cycle阶段

在虚拟周期阶段,给出1-31个周期而不发送或接收任何数据,以便在使用更高时钟频率时给闪存时间为数据阶段做准备。在此阶段给出的周期数在QUADSPI_CCR[22:18]寄存器的DCYC[4:0]位域中指定。在SDR和DDR模式中,持续时间被指定为若干完整的CLK周期。当DCYC为零时,跳过虚拟周期阶段,命令序列直接进入数据阶段(如果存在)。虚拟周期相位的工作方式由DMODE
控制。

为了保证足够的“周转”时间将数据信号从输出模式转换为输入模式,使用双模式或四模式从闪存接收数据时必须至少有一个虚拟周期。

2.3.5 数据阶段

在数据阶段,可以向闪存发送或从闪存接收任意数量的字节。在间接和自动状态轮询模式中,要发送/接收的字节数在QUADSPI_DLR寄存器中指定。

在间接写入模式下,要发送到闪存的数据必须写入QUADSPI_DR登记。在间接读取模式下,从闪存接收的数据是通过读取QUADSPI_DR寄存器获得的。在内存映射模式中,读取的数据直接通过AHB发送回Cortex或DMA。

数据相位一次可以发送/接收1位(在单spi模式下通过SO/SI),一次2位(在双spi模式下通过IO0/IO1),或者一次4位(在四spi模式下通过IO0/IO1/IO2/IO3)。这可以使用QUADSPI_CCR[15:14]寄存器的ABMODE[1:0]位域进行配置。

当DMODE = 00时,跳过数据阶段,通过触发NCS立即完成命令序列。此配置只能在非直接写模式下使用。

3 NCS behavior

默认情况下,NCS为高,取消选择外置闪存。NCS在操作开始前下降,在操作结束后上升。
当CKMODE = 0 (" mode0 ",其中CLK在没有操作进行时保持低)时,NCS在操作第一次上升CLK边前下降一个CLK周期,在操作最后一次上升CLK边后上升一个CLK周期,如下图所示:

当CKMODE=1 (" mode3 ",当没有操作正在进行时CLK变为高电平)和DDRM=0 (SDR模式),NCS在操作第一次上升CLK边前仍下降1个CLK周期,在操作最后一次上升CLK边后,NCS上升1个CLK周期,如下图所示: 

当CKMODE = 1 (" mode3 ")和DDRM = 1 (DDR模式)时,NCS下降一个CLK周期
在操作前首先上升CLK边缘,而NCS在操作后上升一个CLK周期最终活动上升的CLK边缘,如下图所示。因为DDR操作必须以下降沿结束,所以当NCS上升时CLK很低,而CLK上升到a的一半
CLK周期之后 

NCS when CKMODE = 1 in DDR mode (T = CLK period)

当FIFO在读操作中保持满或者FIFO在写操作中保持空时,操作停止并且CLK保持低,直到固件为FIFO服务。如果在操作停止时发生中止,则NCS在请求中止后上升,然后CLK在半个CLK周期后上升,如图所示。

NCS when CKMODE = 1 with an abort (T = CLK period)

当非双FLASH模式(DFM = 0)和FSEL = 0(默认值)时,只访问FLASH 1。因此,BK2_NCS保持高,如果FSEL = 1,只有FLASH 2被访问和BK1_NCS保持高位。在双闪模式下,BK2_NCS的行为与BK1_NCS。因此,如果有一个FLASH 2,如果应用程序是双闪光灯模式,那么BK1_NCS信号也可用于flash2,专用于BK2_NCS的引脚可用于其他功能。 

作者:mftang

物联沃分享整理
物联沃-IOTWORD物联网 » STM32G4的QSPI接口介绍

发表回复