CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

QSPI Flash

QSPI Flash的示例工程用于实现QSPI方式连接外部Flash,并读写数据。

QSPI Flash示例的源代码和工程文件位于SDK_Folder\projects\peripheral\qspi\qspi_flash,其中工程文件在文件夹Keil_5下。

代码理解

示例工程流程图如图 36所示:

图 36 QSPI Flash工程流程图
  1. 配置QSPI模块。
    g_qspi_handle.init.clock_prescaler = SystemCoreClock / 1000000;
    g_qspi_handle.init.clock_mode = QSPI_CLOCK_MODE_0;
    g_qspi_handle.init.rx_sample_delay = 0;
    
    hal_qspi_deinit(&g_qspi_handle);
    if (HAL_OK != hal_qspi_init(&g_qspi_handle))
    {
        printf("\r\nFlash initial failed.\r\n");
        return 0;
    }
    • init.clock_prescaler:QSPI时钟频率。
    • init.clock_mode:QSPI时钟模式选择,可选择QSPI_CLOCK_MODE_0、QSPI_CLOCK_MODE_1、QSPI_CLOCK_MODE_2、QSPI_CLOCK_MODE_3。
  2. 调用hal_qspi_init()初始化QSPI模块。代码如下:
    hal_qspi_init(&g_qspi_handle)
  3. 调用SPI_FLASH_Read_Device_ID()获取Flash的设备ID。代码如下:
    device_id = SPI_FLASH_Read_Device_ID();
    printf("Read_Device_ID = 0x%06X\r\n", device_id);
    
  4. 调用SPI_FLASH_Page_Program()向Flash写数据。代码如下:
    printf("Page_Program...\r\n");
    SPI_FLASH_Page_Program(FLASH_PROGRAM_START_ADDR, write_buffer);
    printf("Page Program Success.\r\n");
    
  5. 调用SPI_FLASH_Read()读取Flash中的数据。代码如下:
    SPI_FLASH_Read(FLASH_PROGRAM_START_ADDR, read_buffer, FLASH_OPERATION_LENGTH);
  6. 调用SPI_FLASH_Enable_Quad()使能QSPI的四线模式。代码如下:
    SPI_FLASH_Enable_Quad();
  7. 调用如下接口实现QSPI的四线读操作,其源代码均在spi_flash.c源文件中,用户可查看其实现细节。
    SPI_FLASH_Dual_Output_Fast_Read(FLASH_PROGRAM_START_ADDR, read_buffer, 
                                    FLASH_OPERATION_LENGTH);
    printf("Dual_Output_Fast_Read.");
    qspi_flash_memcmp(FLASH_PROGRAM_START_ADDR, write_buffer, read_buffer, 
                      FLASH_OPERATION_LENGTH);
    printf("\r\n");
    
    SPI_FLASH_Dual_IO_Fast_Read(FLASH_PROGRAM_START_ADDR, read_buffer, 
                                FLASH_OPERATION_LENGTH);
    printf("Dual_IO_Fast_Read.");
    qspi_flash_memcmp(FLASH_PROGRAM_START_ADDR, write_buffer, read_buffer, 
                      FLASH_OPERATION_LENGTH);
    printf("\r\n");
    
    SPI_FLASH_Quad_Output_Fast_Read(FLASH_PROGRAM_START_ADDR, read_buffer, 
                                    FLASH_OPERATION_LENGTH);
    printf("Quad_Output_Fast_Read.");
    qspi_flash_memcmp(FLASH_PROGRAM_START_ADDR, write_buffer, read_buffer, 
                      FLASH_OPERATION_LENGTH);
    printf("\r\n");
    
    SPI_FLASH_Quad_IO_Fast_Read(FLASH_PROGRAM_START_ADDR, read_buffer, 
                                FLASH_OPERATION_LENGTH);
    printf("Quad_IO_Fast_Read.");
    qspi_flash_memcmp(FLASH_PROGRAM_START_ADDR, write_buffer, read_buffer, 
                      FLASH_OPERATION_LENGTH);
    printf("\r\n");
    

测试验证

  1. 用GProgrammer下载qspi_flash.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将会显示QSPI操作Flash的数据信息。

扫描关注

打开微信,使用“扫一扫”即可关注。