硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: eric2013
收起左侧

[SPI/QSPI] 爽,一种非常给力的STM32H7内部Flash和QSPI Flash混合运行程序的方式,不再需要用户单独制作BOOT和APP

  [复制链接]

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-7-23 14:37:47 | 显示全部楼层
eric2013 发表于 2021-7-23 09:14
这个应该有解决办法,但是我没用过CubeIDE,帮不上你了。

搞定了,和写bootloader一样,在__libc_init_array前加一个函数进行qspi的初始化(例如我的项目添加在startup_stm32h750vbtx.s里),记得初始化完重置时钟定时器和中断就行
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2021-8-18 17:18:41 | 显示全部楼层
忘了收藏帖子了,找了半天。。
代码不规范,亲人两行泪!
回复

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

积分
132
发表于 2022-7-9 14:04:44 | 显示全部楼层
h750的那个外部flash下载算法是哪个呢?都分不清是在哪了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2022-7-9 15:52:31 | 显示全部楼层
yuntian 发表于 2022-7-9 14:04
h750的那个外部flash下载算法是哪个呢?都分不清是在哪了

0x9000 0000地址是外部QSPI Flash算法对应的地址。

0x0800 0000地址是内部Flash的
回复

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

积分
132
发表于 2022-7-9 18:06:53 | 显示全部楼层
我是想找你的代码,下载外部flash的代码,原来做一个,发现下载速度太慢,做了一个 h7b0的,下载速度超级快,去升级 h750的下载程序,发现死活不行
今天才搞定了,速度也可以,是用 hal 做的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2022-7-10 00:50:25 | 显示全部楼层
yuntian 发表于 2022-7-9 18:06
我是想找你的代码,下载外部flash的代码,原来做一个,发现下载速度太慢,做了一个 h7b0的,下载速度超级快 ...

好的。
回复

使用道具 举报

1

主题

14

回帖

22

积分

新手上路

积分
22
QQ
发表于 2022-8-22 11:30:30 | 显示全部楼层
869934179 发表于 2021-7-22 15:13
在实现stm32cubeIDE的混合运行时遇到了问题若将touchGFX的部分(代码、字体等)分配到外部QSPI
touchGFX有 ...

大佬请教一下。。。这几天也在CubeIDE里尝试混合运行,但CubeIDE没μVision IDE可以指定软件组件、文件组和单个文件的目标内存(例如安富莱V7教程的83章:右键BSP文件夹,设置这个文件夹组的分配区域的Code/Const的目标内存在外部FLASH 0x90000000开始地址),CubeIDE只有一个link Script文件供编辑,没有图形化的设置,最后问题变成了link script如何指定文件夹下的代码到目标内存,但找了很久语法资料没找到这种情况怎么写链接脚本。。。不知思路是否正确?请问您能分享一下如何解决的吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2022-8-23 10:24:04 | 显示全部楼层
OldGerman 发表于 2022-8-22 11:30
大佬请教一下。。。这几天也在CubeIDE里尝试混合运行,但CubeIDE没μVision IDE可以指定软件组件、文件组 ...

可以供参考,

自定义GCC链接LD文件,GCC设置外部SRAM通用方法(F103外挂SRAM,使用HAL库)
https://www.armbbs.cn/forum.php? ... 2684&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

14

回帖

22

积分

新手上路

积分
22
QQ
发表于 2022-8-24 10:52:14 | 显示全部楼层
eric2013 发表于 2022-8-23 10:24
可以供参考,

自定义GCC链接LD文件,GCC设置外部SRAM通用方法(F103外挂SRAM,使用HAL库)

感谢硬汉哥回复,链接帖子中的NOLOAD和__attribute__ ((section (".ext_sram")));的套路,很早就在FLASH模拟EEPROM的项目中使用过,昨天又研究了一下,放弃在CubeIDE一个工程里混合运行的想法,改用BOOT+APP的方式,CubeIDE可以在BOOT和APP的两个“.elf”文件之间反复横跳调试,分享一下实现方法:
第一步:根据使用的开发板和片外FLASH,制作下载算法(也叫 外部加载器),下载算法我也在CubeIDE里制作的,参考了以下资料并修改了一下:
ST:通过STM32CubeMX制作外部Flash的烧写驱动 (这个教程方案是基于STM32CubeIDE、开发板是H750,Flash(S25LP128F) ,QSPI模式)然后在APP工程的Debug Config 里的调试器页下拉,External Loader里scan一下,设置制作好的下载算法,我制作的文件名字是STM32H750VB_W25Q64JV.stldr
第二步:修改BOOT和 APP工程的".ld"文件第三步:修改BOOT和APP工程的代码,我按照安富莱v7第82章的例子
修改第四步:设置APP工程的Debug,不需要添加启动脚本

CubeIDE_从BOOT跳转外部FLASH-APP调试设置

CubeIDE_从BOOT跳转外部FLASH-APP调试设置

测试:分别在两个工程的main函数内设置了一个断点测试双.elf文件 debug,debug会先从BOOT工程的main开始,然后一步一步运行到APP工程的main

CubeIDE_双elf调试_起始main断点处

CubeIDE_双elf调试_起始main断点处


CubeIDE_双elf调试_运行停止在BOOT工程main手动添加的断点处

CubeIDE_双elf调试_运行停止在BOOT工程main手动添加的断点处



CubeIDE_双elf调试_运行停止在APP工程main手动添加的断点处

CubeIDE_双elf调试_运行停止在APP工程main手动添加的断点处


相关的工程代码我打包到了Github仓库,
具体的设置细节可以打开项目文件看:https://github.com/oldgerman/workspace_H7/releases/tag/publish
刚入门H7,程序调通FLASH,只跑了安富莱串口fifo示例



回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2022-9-15 16:19:05 | 显示全部楼层
谢谢!给大神点赞
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2022-9-15 16:19:47 | 显示全部楼层
点赞 点赞点赞!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2022-9-16 11:23:57 | 显示全部楼层
OldGerman 发表于 2022-8-24 10:52
感谢硬汉哥回复,链接帖子中的NOLOAD和__attribute__ ((section (".ext_sram")));的套路,很早就在FLASH ...

CubeMX这个暗黑主题看着也不错
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
发表于 2022-10-5 22:12:30 | 显示全部楼层
使用VSCode+OpenOCD+gcc可以实现混合运行吗,MacOS用不了MDK和IAR
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2022-10-7 00:42:28 | 显示全部楼层
JasonGu 发表于 2022-10-5 22:12
使用VSCode+OpenOCD+gcc可以实现混合运行吗,MacOS用不了MDK和IAR

可以,需要修改那个ld文件来手动配置文件的flash和ram位置。
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
发表于 2022-10-12 00:36:10 | 显示全部楼层
搞定了,只不过是bootloader+app的方式,一键同时烧录到内置+外置flash。MAC下改一下换一下hex merger就行。

image.png
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-10-23 14:07:23 | 显示全部楼层
王海靖 发表于 2021-4-26 09:08
已解决,算法里面要关闭 cache

大佬,我也遇到同样的问题,具体咋解决呀
回复

使用道具 举报

32

主题

88

回帖

184

积分

初级会员

积分
184
发表于 2023-6-29 13:49:40 | 显示全部楼层
这个是不是与将变量定义在外部flash的原理有点像?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2023-6-30 09:45:04 | 显示全部楼层
Y1ng 发表于 2023-6-29 13:49
这个是不是与将变量定义在外部flash的原理有点像?

对,本质都是分散加载设置
回复

使用道具 举报

13

主题

222

回帖

261

积分

高级会员

积分
261
发表于 2023-11-18 10:26:02 | 显示全部楼层
请教下,IAR的IED怎么把分组目录里的xx.c与xx.h files 全部指定到外部Flash。
现在一个函数一个变量的指定太麻烦了。
014637yhhhh5whlhhww26w.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2023-11-18 10:45:21 | 显示全部楼层
yunqi 发表于 2023-11-18 10:26
请教下,IAR的IED怎么把分组目录里的xx.c与xx.h files 全部指定到外部Flash。
现在一个函数一个变量的指定 ...

IAR貌似只能手动配置那个LD文件。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-8-22 21:08:50 | 显示全部楼层
eric2013 发表于 2020-11-9 04:33
已经发布:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=869

被删除了,痛苦
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2024-8-23 08:54:19 | 显示全部楼层
Xianshi 发表于 2024-8-22 21:08
被删除了,痛苦

可以,地址贴错了,已经修改

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2024-9-8 15:47:19 | 显示全部楼层
更新帖子。
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2024-10-16 11:06:12 | 显示全部楼层
硬汉哥,请问在SRAM内调试时能与QSPI内存映射同时使用吗,只在qspi存放图片数据。我仿照flash加qspi内存映射的方式,不在keil添加keep命令就会被优化,添加keep命令后会报这个错误:
Error: L6211E: Ambiguous section selection. Object _weilai_320x240.o contains more than one section.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2024-10-16 11:19:22 | 显示全部楼层
dingyi 发表于 2024-10-16 11:06
硬汉哥,请问在SRAM内调试时能与QSPI内存映射同时使用吗,只在qspi存放图片数据。我仿照flash加qspi内存映 ...

还有个办法,程序里面调用下这个数组的任意地址变量,就不会优化了。
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2024-10-16 11:25:33 | 显示全部楼层
eric2013 发表于 2024-10-16 11:19
还有个办法,程序里面调用下这个数组的任意地址变量,就不会优化了。

谢谢硬汉哥,前面提示空间不足后就把调用图片的语句屏蔽了,终于可以愉快的玩耍了
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-11-12 09:33:12 | 显示全部楼层
版主求助,内部外部flash混合烧写,发现外部一直出错,output输出如下:
Internal parameter error

File       : D:\Soft\Kile\Packs\Keil\STM32H7xx_DFP\3.1.0\Keil.STM32H7xx_DFP.pdsc
Sequence   : DebugDeviceUnlock -> CheckID
Context    : Item #0: <block>:ine 11
Expression : "Kile\Packs\Keil\STM32H7xx_DFP\3.1.0\Keil.STM32H7xx_DFP.pdsc"
E310       : Debug access failed - cannot read address 0xE00E0FE4 (accsize '4', AP '0x00000002')

Internal parameter error
No Algorithm found for: 08020000H - 0802FFFFH
No Algorithm found for: 08030000H - 0803F553H
Partial Erase Done (areas with no algorithms skipped!)
No Algorithm found for: 08020000H - 0802FFFFH
No Algorithm found for: 08030000H - 0803F553H
Partial Programming Done (areas with no algorithms skipped!)
Partial Verify OK (areas with no algorithms skipped!)
Application running ...
Flash Load finished at 09:29:13
谢谢
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-11-12 09:42:19 | 显示全部楼层

已解决
1. uncheck “Debug Description - Enable” on the Pack tab.
After that, the device disappears from the SW Device list on the Debug tab - but this is not an error.
2. uncheck “Update Target before Debugging” in Utilities tab
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2024-11-13 09:48:18 | 显示全部楼层
小飞侠1717 发表于 2024-11-12 09:42
已解决
1. uncheck “Debug Description - Enable” on the Pack tab.
After that, the device disappe ...

好的,解决了就好。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-12-3 22:15:57 | 显示全部楼层
请教,混合模式如何实现bootloader
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116861
QQ
 楼主| 发表于 2024-12-4 09:25:08 | 显示全部楼层
HOT007 发表于 2024-12-3 22:15
请教,混合模式如何实现bootloader

这种的只能跳转到RAM执行BOOT来更新了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 03:41 , Processed in 0.436707 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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