硬汉嵌入式论坛

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

[SPI/QSPI] STM32H723 QSPI扩RAM离奇问题分享

  [复制链接]

6

主题

268

回帖

286

积分

高级会员

积分
286
发表于 2025-1-8 15:15:17 | 显示全部楼层 |阅读模式
我一个项目用了STM32H723,用了1年多,挺好

当时板子设计时预留了【ESP-PSRAM64H】这个芯片,主要是非常便宜,2块多一片
当时一直没把这个搞转,手工读/写是正常的,就是内存映射一直不正常,只有映射读,写一直不成功,后来就放在哪儿了
一直报这个错误
企业微信截图_20250108143024.png

最近项目在优化,要采集16位AD约10秒钟,又把这个RAM用上去提上日程
想着这个芯片出来好几年了,资料应该多一些了。
然后一直在网上找资料,能搜到的都是STM32H743的内存映射资料,STM32H723只有在硬汉论坛唯一的一篇
在这里【[SPI/QSPI] 贡献一个H723外扩串行RAM的例子】https://www.armbbs.cn/forum.php?mod=viewthread&tid=120719
初步对比了一下,基本没区别,唯一的是它开了MPU,我没开,
然后我将我的MPU开启后再测试,错误依旧
来回折腾依旧不行
我不服气,网友不会骗我吧,
再将它的内存映射代码复制到我的项目中,
就这块
[C] 纯文本查看 复制代码
    OSPI_RegularCmdTypeDef sCommand;
    OSPI_MemoryMappedTypeDef sMemMappedCfg;
    sCommand.FlashId = HAL_OSPI_FLASH_ID_1;
    sCommand.InstructionMode = HAL_OSPI_INSTRUCTION_4_LINES;
    sCommand.InstructionSize = HAL_OSPI_INSTRUCTION_8_BITS;
    sCommand.InstructionDtrMode = HAL_OSPI_INSTRUCTION_DTR_DISABLE;
    sCommand.AddressMode = HAL_OSPI_ADDRESS_4_LINES;
    sCommand.AddressSize = HAL_OSPI_ADDRESS_24_BITS;
    sCommand.AddressDtrMode = HAL_OSPI_ADDRESS_DTR_DISABLE;
    sCommand.AlternateBytesMode = HAL_OSPI_ALTERNATE_BYTES_NONE;
    sCommand.DataMode = HAL_OSPI_DATA_4_LINES;
    sCommand.DataDtrMode = HAL_OSPI_DATA_DTR_DISABLE;
    sCommand.SIOOMode = HAL_OSPI_SIOO_INST_EVERY_CMD;
    sCommand.Address = 0;
    sCommand.NbData = 1;
    /* Memory-mapped mode configuration for Quad Read mode 4-4-4*/
    sCommand.OperationType = HAL_OSPI_OPTYPE_READ_CFG;
    sCommand.Instruction = FAST_READ_QUAD;
    sCommand.DummyCycles = FAST_READ_QUAD_DUMMY_CYCLES;
    if (HAL_OSPI_Command(&PS_OSPI, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE)
            != HAL_OK) {
        Error_Handler();
    }
    /* Memory-mapped mode configuration for Quad Write mode 4-4-4*/
    sCommand.OperationType = HAL_OSPI_OPTYPE_WRITE_CFG;
    sCommand.Instruction = QUAD_WRITE;
    sCommand.DummyCycles = WRITE_QUAD_DUMMY_CYCLES;
    sCommand.DQSMode = HAL_OSPI_DQS_ENABLE;
    if (HAL_OSPI_Command(&PS_OSPI, &sCommand, HAL_OSPI_TIMEOUT_DEFAULT_VALUE)
            != HAL_OK) {
        Error_Handler();
    }
    /*Disable timeout counter for memory mapped mode*/
    sMemMappedCfg.TimeOutActivation = HAL_OSPI_TIMEOUT_COUNTER_DISABLE;
    /*Enable memory mapped mode*/
    if (HAL_OSPI_MemoryMapped(&PS_OSPI, &sMemMappedCfg) != HAL_OK) {
        Error_Handler();
    }


然后,就是TMD奇迹生效了,好了,内存映射能写入了
我再一点点对比,还是没有区别
我再把代码还原,对比,找出了唯一一个区别,就是这个
sCommand.DQSMode = HAL_OSPI_DQS_ENABLE;
我的没启用,它的启用了,我百思不得其解,这个DQS是用于HyperBus里的一个信号,普通4线制的用不上啊
4705243fdaeec1bced3002b13666bb06.png
我再反复测试了好几次,发现只要打勾了就正常,不打勾就不正常。
企业微信截图_20250108151324.png
好了,我也不纠结这个问题了,反正好了就行,网友如果有此问题不防试试这个选项。
折腾了一年多的问题,其间隔三差五的我就要试试这个内存映射,今天终于好了。


谢谢 【regsofweb】网友。

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
 楼主| 发表于 2025-1-8 15:17:29 | 显示全部楼层
最新,MPU不用开,缓存也不用开,只需配置好后,这个DQSE要开启就好了。
回复

使用道具 举报

1

主题

116

回帖

119

积分

初级会员

积分
119
发表于 2025-1-8 16:23:37 | 显示全部楼层
谢谢楼主的分享,过几天也要用这个芯片
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-1-9 06:43:51 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2025-1-10 17:17:39 | 显示全部楼层
ST论坛说了,H723不支持QSPI PSRAM。
你这个解法有概率还是会出问题的。
下面是我整理的结果:
according to link below, OSPI SDR PSRAM write doen't work, but not test:
https://community.st.com/t5/stm3 ... ped-mode/m-p/229476

We have studied this case and concluded it's not possible to get full functionnality of STM32H7A (also H72x/3x) with QSPI SDR. But it works well with QSPI DDR (7pins, 128Mb in WLCSP) and OPI (11pins, 64Mb~512Mb BGA24/WLCSP). Other STM32 works well also with all device, including QSPI SDR (6 pins, 16Mb~128Mb, SOP8/USON/WLCSP).

but after enable cache and MPU, this may be fixed:
https://community.st.com/t5/stm3 ... ped-mode/m-p/596127
https://community.st.com/t5/stm3 ... 04l-3sqr/m-p/596182
https://community.st.com/t5/stm3 ... qspi-ram/m-p/710009
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2025-1-10 17:19:31 | 显示全部楼层
ST论坛有讨论过这个问题,H723是不支持QSPI PSRAM的
你这个能解决一部分,但是不能保证一定不出问题,下面是我整理的结果:
according to link below, OSPI SDR PSRAM write doen't work, but not test:
https://community.st.com/t5/stm3 ... ped-mode/m-p/229476

We have studied this case and concluded it's not possible to get full functionnality of STM32H7A (also H72x/3x) with QSPI SDR. But it works well with QSPI DDR (7pins, 128Mb in WLCSP) and OPI (11pins, 64Mb~512Mb BGA24/WLCSP). Other STM32 works well also with all device, including QSPI SDR (6 pins, 16Mb~128Mb, SOP8/USON/WLCSP).

but after enable cache and MPU, this may be fixed:
https://community.st.com/t5/stm3 ... ped-mode/m-p/596127
https://community.st.com/t5/stm3 ... 04l-3sqr/m-p/596182
https://community.st.com/t5/stm3 ... qspi-ram/m-p/710009
回复

使用道具 举报

7

主题

24

回帖

50

积分

初级会员

积分
50
发表于 2025-1-13 10:41:09 | 显示全部楼层
当时这个DQSE也卡了我好久,再加上MPU的配置,基本上是试出来的。ST的bug实在是太多。最近升级到1.17.1,freertos配置被莫名修改,又退回1.15.1.
回复

使用道具 举报

14

主题

58

回帖

100

积分

初级会员

积分
100
发表于 2025-3-26 14:31:10 | 显示全部楼层
h750支持吗?
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
 楼主| 发表于 2025-3-26 17:02:10 | 显示全部楼层
zjq985062714 发表于 2025-1-10 17:17
ST论坛说了,H723不支持QSPI PSRAM。
你这个解法有概率还是会出问题的。
下面是我整理的结果:

谢谢,文中也讲了,是一个BUG

As the PSRAM I'm using does not support DQS signaling I'm applying the hard-fault mitigation technique outlined the errata sheet (Rev. 7, March 2022, 2.7.6 Memory-mapped write error response when DQS output is disabled), i.e. the DQSE bit is set for writes, despite DQS not being physically connected and not being mapped via the GPIO matrix to a pin.
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
 楼主| 发表于 2025-3-26 17:02:47 | 显示全部楼层
regsofweb 发表于 2025-1-13 10:41
当时这个DQSE也卡了我好久,再加上MPU的配置,基本上是试出来的。ST的bug实在是太多。最近升级到1.17.1,fr ...

是啥,这个折腾了半年,差点放弃了。
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
 楼主| 发表于 2025-3-26 17:04:07 | 显示全部楼层

h750比h723早出来,它的IP核好像旧&差一个挡次。
也支持的。
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
 楼主| 发表于 2025-3-26 19:26:07 | 显示全部楼层
企业微信截图_20250326191255.png
刚特意到官网找了一下纠错文档,看了一下QSPI的文档,好多BUG啊,
回复

使用道具 举报

3

主题

74

回帖

83

积分

初级会员

积分
83
发表于 2025-3-26 20:39:31 | 显示全部楼层
这个读写速度可以达到多少?
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
 楼主| 发表于 2025-3-27 08:44:17 | 显示全部楼层
跟着硬汉学 发表于 2025-3-26 20:39
这个读写速度可以达到多少?

群里有其它人做的读取速度比较快,我用的是4线的,PCB布线布的不好,时钟20M以上波形示波器看起来就特别差,有点振荡。
回复

使用道具 举报

10

主题

53

回帖

83

积分

初级会员

积分
83
发表于 2025-3-28 08:43:00 | 显示全部楼层
fxyc87 发表于 2025-3-27 08:44
群里有其它人做的读取速度比较快,我用的是4线的,PCB布线布的不好,时钟20M以上波形示波器看起来就特别 ...

也可以试试 我之前那个 HyperRAM 8线的
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-5-11 16:25:27 | 显示全部楼层
如果开启Cache,需要在MPU配置中将PSRAM的内存空间设置为Devices或者Strongly ordered类型.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 03:18 , Processed in 0.321102 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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