硬汉嵌入式论坛

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

[SPI/QSPI] STM32H7花式玩转QSPI Flash教程更新完毕,MDK下载算法制作,MDMA方式,内存映射方式,程序执行等全部集齐(2020-11-09)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
发表于 2020-11-9 04:06:29 | 显示全部楼层 |阅读模式
例子:
V7-029_QSPI读写例程,四线DMA方式,读每秒48MB(V1.2).
V7-032_QSP Flash的FatFS文件系统+QSPI Flash虚拟U盘(带文件系统,读每秒24.6MB)
V7-059_QSPI读写例程,查询方式
V7-060_QSPI Flash的MDK下载算法制作
V7-061_QSPI Flash的STM32CubeProg下载算法制作
V7-062_QSPI Flash运行程序(Bootloader)
V7-063_QSPI Flash运行程序(用户APP)
V7-064_内部Flash和QSPI Flash都运行程序的混合方式,无需单独制作BOOT和APP(强烈推荐)

教程:
第78章 STM32H7的 QSPI总线基础知识和 HAL库 API
第79章 STM32H7 的 QSPI 总线应用之驱动W25QXX(支持查询和 MDMA)
第80章 STM32H7 的 QSPI 总线应用之 QSPIFlash 的 MDK 下载算法制作
第81章 STM32H7 的 QSPI 总线应用之 QSPI Flash 的 STM32CubeProg 下载算法制作
第82章 STM32H7 的 QSPI 总线应用之 QSPI Flash 执行程序(BOOT+APP 方式)
第83章 STM32H7 的内部 Flash 和 QSPI Flash都运行程序的混合方式(强烈推荐)

例子和教程下载:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980








回复

使用道具 举报

6

主题

636

回帖

654

积分

金牌会员

积分
654
QQ
发表于 2020-11-9 21:18:00 | 显示全部楼层
希望硬汉也做个F4的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-10 09:08:59 | 显示全部楼层
yklstudent 发表于 2020-11-9 21:18
希望硬汉也做个F4的

也会做。近期就会发。
回复

使用道具 举报

0

主题

22

回帖

22

积分

新手上路

积分
22
发表于 2020-11-10 14:04:19 | 显示全部楼层
666,安富莱的都是精品,一个系列的知识点讲的透彻清晰。
回复

使用道具 举报

609

主题

3050

回帖

4897

积分

至尊会员

积分
4897
发表于 2020-11-11 14:53:30 | 显示全部楼层
你好大神,请教下,我想吧 qspi 的内存地址映射的地址改成 0x9200 0000 开始,那么是不是在 内存映射里面修改地址为

  s_command.Address           = 0x02000000;    // 是不是在这个地方修改 啊 ???

  s_command.AddressSize       = QSPI_ADDRESS_32_BITS;
  s_command.AlternateBytes    = 0x00000000;
  s_command.AlternateBytesSize= QSPI_ALTERNATE_BYTES_8_BITS;
  s_command.NbData            = 0x00000000;


因为在 0x9000 0000 - 0x9200 0000 之间的数据我不想修改也不想被破坏掉

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-12 03:27:31 | 显示全部楼层
hpdell 发表于 2020-11-11 14:53
你好大神,请教下,我想吧 qspi 的内存地址映射的地址改成 0x9200 0000 开始,那么是不是在 内存映射里面修 ...

内存映射的首地址应该是必须用0x9000 0000开始。

设置为内存映射模式后,所有数据都是无法修改的。即仅支持读。
回复

使用道具 举报

609

主题

3050

回帖

4897

积分

至尊会员

积分
4897
发表于 2020-11-12 10:23:38 | 显示全部楼层


000.png

发现一个 小小小小的 bug, 83.2 内部 fkash ,这个 k 应该是手误了吧 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-12 10:47:43 | 显示全部楼层
hpdell 发表于 2020-11-12 10:23
发现一个 小小小小的 bug, 83.2 内部 fkash ,这个 k 应该是手误了吧 ?

好的,我记录下,下版修正。
回复

使用道具 举报

609

主题

3050

回帖

4897

积分

至尊会员

积分
4897
发表于 2020-11-19 21:21:39 | 显示全部楼层
大神,请问下,mdk下载算法与内存映射 模式,是不是需要aspirations flash 支持xip功能才行?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-20 09:49:21 | 显示全部楼层
hpdell 发表于 2020-11-19 21:21
大神,请问下,mdk下载算法与内存映射 模式,是不是需要aspirations flash 支持xip功能才行?

对,现在大部分SPI Flash基本都支持。
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2020-11-21 14:53:15 | 显示全部楼层
太强了
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-5-13 23:51:18 | 显示全部楼层
硬汉哥,我想问下普通的SPI 可以做内存地址映射吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-5-14 08:41:19 | 显示全部楼层
hwj 发表于 2021-5-13 23:51
硬汉哥,我想问下普通的SPI 可以做内存地址映射吗

SPI不行,做不了内存映射。
回复

使用道具 举报

0

主题

20

回帖

20

积分

新手上路

积分
20
发表于 2021-6-22 11:30:01 | 显示全部楼层
我用QSPI读 W25Q16  能读出来,代码不变只打开内存映射后,就读不出来了,还报错,不知道是什么原因?
回复

使用道具 举报

0

主题

20

回帖

20

积分

新手上路

积分
20
发表于 2021-6-22 11:33:48 | 显示全部楼层
我用教程里的MDK做了个下载算法,但是不知道怎么测试。就又按照教程做了个STM32CUBEProgrammer 的下载文件,发现教程里面 的首地址一个是0x90000000  一个是0xc00000000 ;不应该都是0x90000000吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-6-22 12:00:59 | 显示全部楼层
ARM2010 发表于 2021-6-22 11:30
我用QSPI读 W25Q16  能读出来,代码不变只打开内存映射后,就读不出来了,还报错,不知道是什么原因?

注意,不同厂家,不同系列,使用的命令都是不一样的,建议你先裸机调试通了,再做算法文件。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-6-22 12:01:50 | 显示全部楼层
ARM2010 发表于 2021-6-22 11:33
我用教程里的MDK做了个下载算法,但是不知道怎么测试。就又按照教程做了个STM32CUBEProgrammer 的下载文件 ...

1、不能直接用我这个算法。

不同厂家,不同系列,使用的命令都是不一样的,建议你先裸机调试通了,再做算法文件。

2、QSPI Flash的地址是x90000000

SPI Flash不支持内存映射,地址随意
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-6-22 12:11:18 | 显示全部楼层
沒有百度帳號, 可以放一份在Google ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-6-22 12:16:44 | 显示全部楼层
jones.hsu 发表于 2021-6-22 12:11
沒有百度帳號, 可以放一份在Google ?

好的,有时间了弄下。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-8-3 13:18:13 | 显示全部楼层
按照大佬的例程,也使用了大佬的下载算法。
boot 可以进入,进入后QSPI 开启地址映射,然后从 0x90000000 开始读出 QSPI FLASH 中的数据,与 app 代码比较一致。
boot 跟踪调试一直到 跳转的那一步都是正常的。 但是一跳转就会进入 MemManage_Handler。

问下大佬这是啥情况。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-8-3 17:19:28 | 显示全部楼层
大佬,这个文档的 82 章, STM32H7 的 QSPII 总线应用之 QSPII Fllash 执行程序(BOOT+APP 方式)。。
按照文档和例程中的代码,在裸机中可以正常跳转到 QSPI FLASH 执行 APP。
但如果在 ThreadX 系统中,把跳转代码放到任务里去,就不能正常跳转了,一跳就会进 MemManage_Handler。  

大佬试一下,也不晓得是我哪里没设置好还是怎么的。  
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-11-12 14:18:48 | 显示全部楼层
给跪了,好强  这就是强者的知识吗
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-3-30 10:18:10 | 显示全部楼层
这个flash的芯片中的读时钟速度不是最大为50M吗,为什么例程的qspi设置是2分频(100M)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-3-30 10:58:30 | 显示全部楼层
yuanzhongda 发表于 2022-3-30 10:18
这个flash的芯片中的读时钟速度不是最大为50M吗,为什么例程的qspi设置是2分频(100M)

50M说的是03H指令。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2022-3-30 16:13:07 | 显示全部楼层
同一片QSPI flash上放了运行代码(app),剩余的空间就不能再作为数据存取了吧?
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-3-30 21:36:09 | 显示全部楼层
qspi的nor flash还区分同步 异步吗,我看mouser上的两款芯片对比,还有这区别
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-3-31 09:11:42 | 显示全部楼层
caicaptain2 发表于 2022-3-30 16:13
同一片QSPI flash上放了运行代码(app),剩余的空间就不能再作为数据存取了吧?

对,如果要用的话,只能动态的切换状态。比如先跳转到RAM里面,设置QSPI为正常读写模型,操作完毕了,再设置为内存映射模式,并跳转回来。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-3-31 09:12:12 | 显示全部楼层
yuanzhongda 发表于 2022-3-30 21:36
qspi的nor flash还区分同步 异步吗,我看mouser上的两款芯片对比,还有这区别

带时钟的,都是同步设计,不带时钟的,没关注过。
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-3-31 11:08:16 | 显示全部楼层
eric2013 发表于 2022-3-31 09:12
带时钟的,都是同步设计,不带时钟的,没关注过。

我用同一个程序在743的v和y版两个板子试验,v版的qspi需要降速到50MHz以下,y版的不用,有这个现象吗,还是我弄错了
回复

使用道具 举报

3

主题

56

回帖

65

积分

初级会员

积分
65
发表于 2022-4-1 07:47:28 来自手机 | 显示全部楼层
qspi驱动flash的程序我没见过一个能读flash内部8字节的唯一码的,是qspi驱动就不可以读吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-4-1 10:13:04 | 显示全部楼层
yuanzhongda 发表于 2022-3-31 11:08
我用同一个程序在743的v和y版两个板子试验,v版的qspi需要降速到50MHz以下,y版的不用,有这个现象吗,还 ...

都不用啊,我们的开发板早期用的是Y版,现在用的是V版,都正常。
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2022-4-6 11:24:32 | 显示全部楼层
yuanzhongda 发表于 2022-3-31 11:08
我用同一个程序在743的v和y版两个板子试验,v版的qspi需要降速到50MHz以下,y版的不用,有这个现象吗,还 ...

是我自己傻逼了,竟然没给flash供电,没想到他靠着IO馈电还能跑到50MHz
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-4-6 11:28:14 | 显示全部楼层
yuanzhongda 发表于 2022-4-6 11:24
是我自己傻逼了,竟然没给flash供电,没想到他靠着IO馈电还能跑到50MHz

STM32有这个问题,遇到过多次。
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2022-5-25 09:22:51 | 显示全部楼层
版主,请问这个QSPI Flash内存映射的起始地址0x90000000是从哪得到的,我看了STM32H7的数据手册,没看到哪边提到这个映射地址是从这边开始的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-5-25 10:33:16 | 显示全部楼层
iceburgconner2 发表于 2022-5-25 09:22
版主,请问这个QSPI Flash内存映射的起始地址0x90000000是从哪得到的,我看了STM32H7的数据手册,没看到哪 ...

image.png
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2022-5-25 12:24:51 | 显示全部楼层

好的,我搜到了,还有一个问题请教,我现在采用的是Boot loader+APP方式,其中Bootloader是在内部Flash,APP在QSPI Flash,就像你们例程中82章那样,目前是可以实现。我的疑问是这样使用后我还可以把QSPI Flash的其他空间用作其他用途吗,就是在APP程序里我需要存放一些其他的数据,这种方案可行吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-5-26 09:33:43 | 显示全部楼层
iceburgconner2 发表于 2022-5-25 12:24
好的,我搜到了,还有一个问题请教,我现在采用的是Boot loader+APP方式,其中Bootloader是在内部Flash, ...

可以,需要点骚操作,QSPI Flash执行内存映射的时候,是不可以写操作的,所以你需要存数据的时候,可以在RAM里面也加载个任务或者函数,在里面动态切换QSPI Flash的模式,执行完毕后,切换回来内存映射模式。
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2022-5-26 19:23:21 | 显示全部楼层
eric2013 发表于 2022-5-26 09:33
可以,需要点骚操作,QSPI Flash执行内存映射的时候,是不可以写操作的,所以你需要存数据的时候,可以在 ...

好的,感谢版主解答,看上去有点复杂,后面如果需要确定这么使用,我再尝试一下
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-12-6 10:27:42 | 显示全部楼层
版主您好,我借用您第60历程QSPI的下载算法,已经更改了,管脚配置,可是擦除和写入后,程序没有变化,感觉程序就是没写进去,这是怎么回事啊,我用的是STM32H750
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2022-12-8 11:14:21 | 显示全部楼层
15241459685ted 发表于 2022-12-6 10:27
版主您好,我借用您第60历程QSPI的下载算法,已经更改了,管脚配置,可是擦除和写入后,程序没有变化,感觉 ...

校验通过了吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 06:13 , Processed in 0.524916 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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