14、QSPI

1 QSPI基本情况

1.1 SPI分类

标准SPI(Standard SPI):全双工,通信线包含片选CS、时钟线CLK、输入DI、输出DO

双线SPI(Dual SPI):半双工,对标准SPI进行改进将DO与DI变为IO0和IO1,成为双向IO口,一个周期传输两位数据

四线SPI(Qual SPI):半双工,对Dual SPI改进,将写保护WR和维持HOLD引脚复用为IO口,为IO2和IO3,一个周期传输四位数据

1.2 QSPI简介

Queued SPI,简称SPI,是SPI接口的拓展。QSPI可支持1线、2线和4线通信,数据吞吐量大。

1.3 QSPI三种操作模式

间接模式:使用QSPI寄存器执行全部操作(标准SPI)

状态轮询模式:周期读取FLASH状态寄存器(中断产生)

内存映射模式:外部FLASH映射到MCU地址空间

1.4 QSPI命令序列

QSPI最多包含以下五段命令序列:

1、指令:告诉FLASH怎么操作(读、写、擦除等)

2、地址:操作的目标地址

3、交替字节:连续发送备用字节,以保持设备处于工作模式(一般省略)

4、空指令周期:等待周期,用于FLAH设备准备数据的时间

5、数据:存放发送或接收的数据

2 QSPI配置

2.1 QSPI寄存器

寄存器名称

作用

位

功能

CR

控制QSPI

0

0:禁用QSPI

1:使能QSPI

1

0:保留

1:强制终止传输

6

0:禁用双闪存模式

1:使用双闪存模式

7

选择FLASH,仅位6置0时有效

24 ~ 31

设置时钟分频系数

CCR

编排命令序列

0 ~ 7

指令码

8 ~ 9

00:保留 01:单线

10:双线 11:四线

10 ~ 11

地址模式,与位8 ~ 9含义相同

12 ~ 13

地址长度设置

00:8位 01:16位

10:24位 11:32位

14 ~ 15

交替字节模式,与位8 ~ 9含义相同

16 ~ 17

交替字节长度,与位12 ~ 13含义相同

18 ~ 22

空指令周期数0 ~ 31

24 ~ 25

数据模式,与位8 ~ 9含义相同

26 ~ 27

功能模式

00:间接写入

01:间接读取

10:自动轮询

11:内存映射

2.2 配置步骤

1、初始化QSPI:HAL_QSPI_Init()

2、配置QSPI MSP:HAL_QSPI_MspInit()

3、在操作前发送命令序列:HAL_QSPI_Command()

4、传输数据:HAL_QSPI_Transmit()/HAL_QSPI_Receive()

2.3 QSPI初始化配置

QSPI的初始化配置由结构体QSPI_InitTypeDef完成,关键成员如下

成员

功能

参数

ClockPrescaler

设置时钟分频系数

0 ~ 255

FifoThreshold

设置FIFO阈值(仅间接模式)

1 ~ 32

SampleShifting

设置采样移位

无位移:QSPI_SAMPLE_SHIFTING_NONE

半周期:QSPI_SAMPLE_SHIFTING_HALFCYCLE

FlashSize

定义FLASH地址的位数

值为FLASH地址位数-1,范围为0 ~ 31

ChipSelectHighTime

设置片选高电平时间

设置片选信号在两次命令间保持高电平的最短SCLK周期,x范围为1 ~ 8

QSPI_CS_HIGH_TIME_x_CYCLE

ClockMode

设置时钟模式

空闲低:QSPI_CLOCK_MODE_0

空闲高:QSPI_CLOCK_MODE_3

FlashID

选择FLASH

QSPI_FLASH_ID_1或QSPI_FLASH_ID_2

DualFlash

开启双FLASH模式

QSPI_DUALFLASH_DISABLE或QSPI_DUALFLASH_ENABLE

2.4 QSPI命令序列配置

QSPI的命令序列配置由结构QSPI_CommandTypeDef完成,关键成员如下

成员

功能

参数

Instruction

设置指令码

8位指令码

InstructionMode

设置指令发送模式

QSPI_INSTRUCTION_NONE

QSPI_INSTRUCTION_1_LINE

QSPI_INSTRUCTION_2_LINES

QSPI_INSTRUCTION_4_LINES

Address

设置要访问的地址

32位地址

AddressMode

设置地址发送模式

QSPI_ADDRESS_NONE

QSPI_ADDRESS_1_LINE

QSPI_ADDRESS_2_LINES

QSPI_ADDRESS_4_LINE

AddressSize

设定地址的字节数

QSPI_ADDRESS_8_BITS

QSPI_ADDRESS_16_BITS

QSPI_ADDRESS_24_BITS

QSPI_ADDRESS_32_BITS

AlternateBytes

设置交替字节值

32位数据

AlternateByteMode

设置交替字节发送模式

QSPI_ALTERNATE_BYTES_NONE

QSPI_ALTERNATE_BYTES_1_LINE

QSPI_ALTERNATE_BYTES_2_LINES

QSPI_ALTERNATE_BYTES_4_LINES

DummyCycles

设置空指令周期数

0 ~ 31

DataMode

设置数据收发模式

QSPI_DATA_NONE

QSPI_DATA_1_LINE

QSPI_DATA_2_LINES

QSPI_DATA_4_LINES

NbData

设置数据字节数

0 ~ 2^32-1

posted @ 2026-08-20 17:31  老鼠学32  阅读(13)  评论(0)    收藏  举报