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 |

浙公网安备 33010602011771号