硬汉嵌入式论坛

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

[SPI/QSPI] 请教下各位大佬, 我捣鼓 h7 qspi+mdma 写成功但读取数据出错 ?

[复制链接]

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
发表于 2025-10-14 09:18:44 | 显示全部楼层 |阅读模式
请教下各位大佬, 我捣鼓 h7 qspi+mdma 写成功但读取数据出错 ? 这是神马情况呀 ?


qspi + mdma 也参考了 按大神的 例程 及 st 官方例程,也没有发现有什么问题,但是读取偶尔会成功一次,

如果进行仿真读取时都是成功的,就是全速运行时读取数据就会失败 这是神马逻辑呀 ?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-14 09:41:43 | 显示全部楼层
不使用仿真,断电上电运行测试是否正常。
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-14 10:29:00 | 显示全部楼层
本帖最后由 hpdell 于 2025-10-14 10:47 编辑
eric2013 发表于 2025-10-14 09:41
不使用仿真,断电上电运行测试是否正常。

不使用仿真,断电上电运行测试是否正常。  依然不正常啊


使用 查询法 或  中断法 读写都是完全正常的
使用中断法读写:

                                QSPI Write Flash OK
                                Data Len: 8388608Byte, Write Time: 1475ms, Write Speed: 5687KB/s

                                QSPI_ReadBuff ...

                                Data Len: 8388608Byte, Read Time: 596ms, Read Speed: 14074 KB/s
                                QSPI RW OK !          中断法读取,没有进行数据比对可以达到接近 14MB



-----------------------------------------------------------------
                                QSPI Write Flash OK
                                Data Len: 8388608Byte, Write Time: 1477ms, Write Speed: 5679KB/s
                                ................................
                                Data Len: 8388608Byte, Read Time: 689ms, Read Speed: 9586  KB/s
                                QSPI RW OK !           中断法读取,有进行数据比对可以达到接近 10MB  

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-15 09:59:21 | 显示全部楼层
hpdell 发表于 2025-10-14 10:29
不使用仿真,断电上电运行测试是否正常。  依然不正常啊

QSPI驱动有个dummy参数,加大下试试
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-16 09:18:03 | 显示全部楼层
eric2013 发表于 2025-10-15 09:59
QSPI驱动有个dummy参数,加大下试试

我 刚刚测试了, dummy 我从 4-20 都设置了一边,结果都一样,

仿真时每次读取都是成功的,  qspi-mdma-irq  = 0/1/2    qspi-irq = 14/15  都测试过了,结果都是一样的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-16 10:25:11 | 显示全部楼层
hpdell 发表于 2025-10-16 09:18
我 刚刚测试了, dummy 我从 4-20 都设置了一边,结果都一样,

仿真时每次读取都是成功的,  qspi-md ...

如果仿真可以,应该确实有些参数配置合理。特别是延迟类的一些设置
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-16 10:58:50 | 显示全部楼层
eric2013 发表于 2025-10-16 10:25
如果仿真可以,应该确实有些参数配置合理。特别是延迟类的一些设置

仿真时那些参数还是一样的配置, 难道时仿真器有个响应时间,而这个响应时间正好是 qspi 的延时时间 ?

那如果是这样的话, 貌似延时 dummy 就那几个参数啊,

现在有些迷糊了
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-16 21:55:21 | 显示全部楼层
eric2013 发表于 2025-10-16 10:25
如果仿真可以,应该确实有些参数配置合理。特别是延迟类的一些设置




全速运行是读取回来的数据, 貌似前面的 8 字节左右数据始终都是 0
qspi-err.png


--------------------------------------
仿真时读取回来的数据

qspi-ok.png



全速运行与仿真 配置参数完全一样的,


回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-18 12:20:56 | 显示全部楼层
eric2013 发表于 2025-10-16 10:25
如果仿真可以,应该确实有些参数配置合理。特别是延迟类的一些设置

终于找到了问题的根源了, 原来是需要在 读取 dma 之前进行无消耗操作一次才行,他奶奶的

                SCB_CleanInvalidateDCache();
                if (HAL_QSPI_Receive_DMA(&QSPI_Handle, (uint8_t *)data) != HAL_OK)


不知道为何 st 提供的 例程中 使用 mda 读取前没有进行 无效化 读取数据又是成功的,有些搞不懂呀  
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-19 10:25:08 | 显示全部楼层
hpdell 发表于 2025-10-18 12:20
终于找到了问题的根源了, 原来是需要在 读取 dma 之前进行无消耗操作一次才行,他奶奶的

                SCB_Clean ...

MDMA可以使用DTCM RAM空间,这不需要操作Cache
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-19 11:49:32 | 显示全部楼层
eric2013 发表于 2025-10-19 10:25
MDMA可以使用DTCM RAM空间,这不需要操作Cache

现在 加了 那个 cache 无效化 就好了, 具体的原因我也没有搞明白呀
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-21 12:49:20 | 显示全部楼层
hpdell 发表于 2025-10-19 11:49
现在 加了 那个 cache 无效化 就好了, 具体的原因我也没有搞明白呀

说明你分配到通用RAM空间了,且开了Cache,使用DTCM空间,这个没有Cache问题,他的速度和Cache一样的

而且支持MDMA
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-21 18:33:33 | 显示全部楼层
eric2013 发表于 2025-10-21 12:49
说明你分配到通用RAM空间了,且开了Cache,使用DTCM空间,这个没有Cache问题,他的速度和Cache一样的

...

好的,

h7 dtcm 空间的 sram 地址 是多少呀 ?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-22 11:21:19 | 显示全部楼层
hpdell 发表于 2025-10-21 18:33
好的,

h7 dtcm 空间的 sram 地址 是多少呀 ?

STM32H743几块SRAM的分配和地址
https://forum.anfulai.cn/forum.p ... 5939&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
 楼主| 发表于 2025-10-22 20:43:33 | 显示全部楼层
eric2013 发表于 2025-10-22 11:21
STM32H743几块SRAM的分配和地址
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=85939&fromuid ...

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 04:11 , Processed in 0.050461 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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