|
本帖最后由 阿里兄 于 2019-12-19 17:41 编辑
QSPI—读写串行 FLASH-W25Q256
一些注意事项,后面直接看代码
1、W25Q256的最大时钟为104M,时钟配置为hqspi.Init.ClockPrescaler = 2;即216M/(2+1)=72M。
2、QSPI FlashSize为2^(FlashSize+1)次方,W25Q256为32M字节,hqspi.Init.FlashSize = 24;即2^(24+1)=32MB,此处需配置为24。
3、QUADSPI 内存映射模式为只读模式,在此模式下, 只允许对外部 FLASH 进行读操作。
4、内存映射地址为0x90000000。
5、W25Q256大小为32M,需要配置为4字节地址模式。
初始化
- void MX_QUADSPI_Init(void)
- {
- hqspi.Instance = QUADSPI;
- hqspi.Init.ClockPrescaler = 2;
- hqspi.Init.FifoThreshold = 4;
- hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
- hqspi.Init.FlashSize = 24;
- hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE;
- hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
- hqspi.Init.FlashID = QSPI_FLASH_ID_1;
- hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
- if (HAL_QSPI_Init(&hqspi) != HAL_OK)
- {
- Error_Handler();
- }
- }
复制代码 配置QSPI为内存映射模式
- //配置QSPI为内存映射模式
- uint32_t W25QXX_EnableMemoryMappedMode(void)
- {
- QSPI_CommandTypeDef s_command;
- QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;
- s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
- s_command.Instruction = W25X_QUAD_INOUT_FAST_READ_CMD_4BYTE;
- s_command.AddressMode = QSPI_ADDRESS_4_LINES;
- s_command.AddressSize = QSPI_ADDRESS_32_BITS;
- s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;//无交替字节必需设为无,否则读失败
- s_command.DataMode = QSPI_DATA_4_LINES;
- s_command.DummyCycles = 6;
- s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
- s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
- s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
- s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
- s_mem_mapped_cfg.TimeOutPeriod = 0;
- if (HAL_QSPI_MemoryMapped(&hqspi, &s_command, &s_mem_mapped_cfg) != HAL_OK)
- {
- return HAL_ERROR;
- }
- return HAL_OK;
- }
复制代码
读写速度
工程代码:
F750_QSPI.rar
(642.36 KB, 下载次数: 1661)
|
|