硬汉嵌入式论坛

 找回密码
 立即注册
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

主题

1403

回帖

1472

积分

至尊会员

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

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
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万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

好的。
回复

使用道具 举报

1

主题

12

回帖

20

积分

新手上路

积分
20
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万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
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

主题

12

回帖

20

积分

新手上路

积分
20
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

主题

13

回帖

16

积分

新手上路

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

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
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万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
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

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

使用道具 举报

23

主题

58

回帖

127

积分

初级会员

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 06:37 , Processed in 0.239872 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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