里飞网
标题:
QSPI—读写串行 FLASH-W25Q256
[打印本页]
作者:
阿里兄
时间:
2019-12-19 17:35
标题:
QSPI—读写串行 FLASH-W25Q256
本帖最后由 阿里兄 于 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;
}
复制代码
读写速度
(, 下载次数: 1101)
上传
点击文件名下载附件
工程代码:
(, 下载次数: 1658)
上传
点击文件名下载附件
欢迎光临 里飞网 (http://dz.lfly.xyz/)
Powered by Discuz! X3.3