QSPI Flash
QSPI Flash的示例工程用于实现QSPI方式连接外部Flash,并读写数据。
QSPI Flash示例的源代码和工程文件位于SDK_Folder\projects\peripheral\qspi\qspi_flash,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图如图 36所示:
- 配置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。
- 调用hal_qspi_init()初始化QSPI模块。代码如下:
hal_qspi_init(&g_qspi_handle) - 调用SPI_FLASH_Read_Device_ID()获取Flash的设备ID。代码如下:
device_id = SPI_FLASH_Read_Device_ID(); printf("Read_Device_ID = 0x%06X\r\n", device_id); - 调用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"); - 调用SPI_FLASH_Read()读取Flash中的数据。代码如下:
SPI_FLASH_Read(FLASH_PROGRAM_START_ADDR, read_buffer, FLASH_OPERATION_LENGTH); - 调用SPI_FLASH_Enable_Quad()使能QSPI的四线模式。代码如下:
SPI_FLASH_Enable_Quad(); - 调用如下接口实现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");
测试验证
- 用GProgrammer下载qspi_flash.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart的Receive Data窗口中将会显示QSPI操作Flash的数据信息。