打印
[应用方案]

基于 APM32F411 的 QSPI 接口简介与优势解析

[复制链接]
108|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a976209770|  楼主 | 2024-12-15 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 什么是 QSPI?

QSPI(Quad Serial Peripheral Interface)是 APM32F411 提供的一种增强型 SPI 接口,相比传统 SPI 接口,QSPI 支持多通道数据传输,可在时钟频率不变的情况下显著提升数据吞吐量。该接口被广泛应用于与高速存储设备(如 NOR Flash 和 NAND Flash)的通信,特别适用于固件存储、数据记录和高速读取等场景。

2. APM32F411 中 QSPI 的特点


特性SPI(Serial Peripheral Interface)QSPI(Quad Serial Peripheral Interface)
数据传输模式单通道(1-bit 数据线)四通道(4-bit 数据线,可同时发送/接收数据)
通信速率较低,仅支持 1-bit 数据传输更高,支持 4-bit 数据传输,速率是 SPI 的 4 倍
接口引脚数量通常 4 个(CLK、MOSI、MISO、NSS)通常 6 个(CLK、NCS、IO0、IO1、IO2、IO3)
数据吞吐量较低,受限于单通道数据传输较高,支持多通道数据并行传输
典型应用低速通信设备(传感器、DAC、ADC 等)高速存储设备(外部 Flash、存储扩展等)
功耗较低功耗略高,但相对于其吞吐量提升,能效比更高

3. APM32F411 的硬件资源

  • QSPI 引脚配置:
    • QSPI_CLK:PB1
    • QSPI_NCS:PB6
    • QSPI_IO0:PA7
    • QSPI_IO1:PA6
    • QSPI_IO2:PC4
    • QSPI_IO3:PC5
  • QSPI 支持模式:
    • 标准 SPI 模式:单通道通信,与传统 SPI 兼容。
    • Dual-SPI 模式:双通道通信,速率提升一倍。
    • Quad-SPI 模式:四通道通信,速率提升至传统 SPI 的四倍。

4. QSPI 初始化与配置

(1) QSPI GPIO 引脚配置
void QSPI_GPIO_Config(void)
{
    GPIO_Config_T gpioConfig;

    // 配置 QSPI_CLK
    gpioConfig.pin = GPIO_PIN_1;
    gpioConfig.mode = GPIO_MODE_AF_PP;
    gpioConfig.speed = GPIO_SPEED_HIGH;
    GPIO_Config(GPIOB, &gpioConfig);

    // 配置 QSPI_NCS
    gpioConfig.pin = GPIO_PIN_6;
    GPIO_Config(GPIOB, &gpioConfig);

    // 配置 QSPI_IO0 至 QSPI_IO3
    gpioConfig.pin = GPIO_PIN_7;
    GPIO_Config(GPIOA, &gpioConfig);

    gpioConfig.pin = GPIO_PIN_6;
    GPIO_Config(GPIOA, &gpioConfig);

    gpioConfig.pin = GPIO_PIN_4;
    GPIO_Config(GPIOC, &gpioConfig);

    gpioConfig.pin = GPIO_PIN_5;
    GPIO_Config(GPIOC, &gpioConfig);
}

(2) QSPI 外设初始化
void QSPI_Init(void)
{
    QSPI_Config_T qspiConfig;

    // 初始化 QSPI 配置结构体
    QSPI_ConfigStructInit(&qspiConfig);

    // 设置时钟相位和极性
    qspiConfig.clockPhase = QSPI_CLKPHA_2EDGE;
    qspiConfig.clockPolarity = QSPI_CLKPOL_LOW;

    // 配置帧格式为 Quad 模式
    qspiConfig.frameFormat = QSPI_FRF_QUAD;

    // 设置数据帧大小为 8 位
    qspiConfig.dataFrameSize = QSPI_DFS_8BIT;

    // 设置时钟分频系数(根据系统时钟调整)
    qspiConfig.clockDiv = 4;

    // 初始化 QSPI
    QSPI_Config(&qspiConfig);

    // 启用 QSPI
    QSPI_Enable();
}

5. QSPI 数据传输操作

(1) 写入数据到 Flash
void QSPI_WriteData(uint32_t address, uint8_t *data, uint16_t size)
{
    QSPI_ConfigAddrLen(QSPI_ADDR_LEN_24BIT); // 设置地址长度
    QSPI_ConfigInstLen(QSPI_INST_LEN_8BIT); // 设置指令长度
    QSPI_ConfigInstAddrType(QSPI_INST_ADDR_TYPE_STANDARD); // 设置指令和地址传输类型

    // 写入命令
    QSPI_TxData(WRITE_COMMAND);

    // 写入地址
    QSPI_TxData((address >> 16) & 0xFF);
    QSPI_TxData((address >> 8) & 0xFF);
    QSPI_TxData(address & 0xFF);

    // 写入数据
    for (uint16_t i = 0; i < size; i++)
    {
        QSPI_TxData(data[i]);
    }
}
(2) 从 Flash 读取数据
void QSPI_ReadData(uint32_t address, uint8_t *data, uint16_t size)
{
    QSPI_ConfigAddrLen(QSPI_ADDR_LEN_24BIT);
    QSPI_ConfigInstLen(QSPI_INST_LEN_8BIT);
    QSPI_ConfigInstAddrType(QSPI_INST_ADDR_TYPE_STANDARD);

    // 发送读取命令
    QSPI_TxData(READ_COMMAND);

    // 发送地址
    QSPI_TxData((address >> 16) & 0xFF);
    QSPI_TxData((address >> 8) & 0xFF);
    QSPI_TxData(address & 0xFF);

    // 读取数据
    for (uint16_t i = 0; i < size; i++)
    {
        data[i] = QSPI_RxData();
    }
}
6. 应用场景与优势

(1) 外部存储扩展通过 QSPI,可与高速 NOR Flash 存储器实现高效通信,支持大数据量的读取和存储需求。

(2) 高吞吐量需求适用于需要高速数据传输的场景,例如音视频数据处理、大容量固件更新等。

(3) 高效与低功耗结合通过多通道并行传输,降低总通信时间,从而减少功耗。

7. 总结

基于 APM32F411 的 QSPI 接口,提供了灵活的配置方式和强大的性能支持。通过合理的硬件设计和软件配置,可以充分发挥其在高速数据传输和外部存储中的优势,满足现代嵌入式应用的需求。

使用特权

评论回复
沙发
LEDyyds| | 2024-12-16 15:00 | 只看该作者
QSPI最大的优势就是数据并行,传输速度快

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

32

帖子

0

粉丝