里飞网

 找回密码
 立即注册
查看: 5095|回复: 0
打印 上一主题 下一主题

QSPI—读写串行 FLASH-W25Q256

[复制链接]

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
跳转到指定楼层
楼主
发表于 2019-12-19 17:35:05 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 阿里兄 于 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字节地址模式。


初始化
  1. void MX_QUADSPI_Init(void)
  2. {

  3.   hqspi.Instance = QUADSPI;
  4.   hqspi.Init.ClockPrescaler = 2;
  5.   hqspi.Init.FifoThreshold = 4;
  6.   hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
  7.   hqspi.Init.FlashSize = 24;
  8.   hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE;
  9.   hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  10.   hqspi.Init.FlashID = QSPI_FLASH_ID_1;
  11.   hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
  12.   if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  13.   {
  14.     Error_Handler();
  15.   }

  16. }
复制代码
配置QSPI为内存映射模式
  1. //配置QSPI为内存映射模式
  2. uint32_t W25QXX_EnableMemoryMappedMode(void)
  3. {
  4.   QSPI_CommandTypeDef      s_command;
  5.   QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;

  6.   s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
  7.   s_command.Instruction       = W25X_QUAD_INOUT_FAST_READ_CMD_4BYTE;
  8.   s_command.AddressMode       = QSPI_ADDRESS_4_LINES;
  9.   s_command.AddressSize       = QSPI_ADDRESS_32_BITS;
  10.   s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;//无交替字节必需设为无,否则读失败
  11.   s_command.DataMode          = QSPI_DATA_4_LINES;
  12.   s_command.DummyCycles       = 6;
  13.   s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
  14.   s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
  15.   s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;

  16.   s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
  17.   s_mem_mapped_cfg.TimeOutPeriod     = 0;

  18.   if (HAL_QSPI_MemoryMapped(&hqspi, &s_command, &s_mem_mapped_cfg) != HAL_OK)
  19.   {
  20.     return HAL_ERROR;
  21.   }

  22.   return HAL_OK;
  23. }
复制代码


读写速度



工程代码: F750_QSPI.rar (642.36 KB, 下载次数: 1660)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|里飞网  

GMT+8, 2024-11-23 15:46 , Processed in 0.072866 second(s), 6 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表