硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2410|回复: 3
收起左侧

[SPI/QSPI] H750VB接W25Q128进行XIP映射问题

[复制链接]

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2021-8-13 09:07:13 | 显示全部楼层 |阅读模式
本帖最后由 efuntech 于 2021-8-13 11:50 编辑

最近一直在学习H750 接QSPI flash 进行外扩Flash进行开发的问题

目前遇到一个问题:H750VB通过QSPI接口接W25Q128,读取W25Q128的ID,读写操作都正确。但是通过QSPI_MemoryMapped进行XIP映射的时候,从0x90000000读到的数据不对,都是88,

XIP.png
  1. void QSPI_MemoryMapped(void)
  2. {
  3.     QSPI_CommandTypeDef s_command = {0};
  4.     QSPI_MemoryMappedTypeDef s_mem_mapped_cfg = {0};

  5.     /* 基本配置 */
  6.     s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;      /* 1线方式发送指令 */
  7.     s_command.AddressSize = QSPI_ADDRESS_32_BITS;             /* 32位地址 */
  8.     s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;  /* 无交替字节 */
  9.     s_command.DdrMode = QSPI_DDR_MODE_DISABLE;                /* W25Q256JV不支持DDR */
  10.     s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;   /* DDR模式,数据输出延迟 */
  11.     s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;            /* 每次传输都发指令 */
  12.    
  13.     /* 全部采用4线 */
  14.     s_command.Instruction = QUAD_INOUT_FAST_READ_4_BYTE_ADDR_CMD; /* 快速读取命令 */
  15.     s_command.AddressMode = QSPI_ADDRESS_4_LINES;                 /* 4个地址线 */
  16.     s_command.DataMode = QSPI_DATA_4_LINES;                       /* 4个数据线 */
  17.     s_command.DummyCycles = 6;                                    /* 空周期 */

  18.     /* 关闭溢出计数 */
  19.     s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
  20.     s_mem_mapped_cfg.TimeOutPeriod = 0;

  21.     if (HAL_QSPI_MemoryMapped(&QSPI_Handler, &s_command, &s_mem_mapped_cfg) != HAL_OK)
  22.     {
  23.        ////Error_Handler(__FILE__, __LINE__);
  24.     }
  25. }
复制代码


请问H750VB是否支持XIP映射?进行XIP映射的参数是否正确?请弄过的帮忙看看? 多谢了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-13 09:55:37 | 显示全部楼层
支持内存映射。

代码重新整理下
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2021-8-13 15:11:14 | 显示全部楼层
仔细检查了参数,发现还是参数配置的问题。 以后遇到这样的问题就是仔细查配置参数。按照如下参数,可以正常进行XIP映射。

  1. void QSPI_MemoryMapped(void)。
  2. {
  3.     QSPI_CommandTypeDef s_command = {0};
  4.     QSPI_MemoryMappedTypeDef s_mem_mapped_cfg = {0};

  5.     /* 基本配置 */
  6.     s_command.InstructionMode = QSPI_INSTRUCTION_4_LINES;      /* 4线方式发送指令 */
  7.     s_command.AddressSize = QSPI_ADDRESS_32_BITS;             /* 32位地址 */
  8.     s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_4_LINES;  /* 四字节交替 */
  9.     s_command.DdrMode = QSPI_DDR_MODE_DISABLE;                /* W25Q256JV不支持DDR */
  10.     s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;   /* DDR模式,数据输出延迟 */
  11.     s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;            /* 每次传输都发指令 */
  12.    
  13.     /* 全部采用4线 */
  14.     s_command.Instruction = QUAD_INOUT_FAST_READ_4_BYTE_ADDR_CMD; /* 快速读取命令 */
  15.     s_command.AddressMode = QSPI_ADDRESS_4_LINES;                 /* 4个地址线 */
  16.     s_command.DataMode = QSPI_DATA_4_LINES;                       /* 4个数据线 */
  17.     s_command.DummyCycles = 4;                                    /* 空周期 */

  18.     /* 关闭溢出计数 */
  19.     s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
  20.     s_mem_mapped_cfg.TimeOutPeriod = 0;

  21.     if (HAL_QSPI_MemoryMapped(&QSPI_Handler, &s_command, &s_mem_mapped_cfg) != HAL_OK)
  22.     {
  23.        ////Error_Handler(__FILE__, __LINE__);
  24.     }
  25. }
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-14 08:24:38 | 显示全部楼层
efuntech 发表于 2021-8-13 15:11
仔细检查了参数,发现还是参数配置的问题。 以后遇到这样的问题就是仔细查配置参数。按照如下参数,可以正 ...

对,参数配置比较重要。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 16:50 , Processed in 0.217037 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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