硬汉嵌入式论坛

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

[STM32H7] STM32H7B0 + W25Q128 MDK下载算法问题

[复制链接]

34

主题

66

回帖

168

积分

初级会员

积分
168
发表于 2025-5-17 22:24:53 | 显示全部楼层 |阅读模式
本帖最后由 coolaimcu 于 2025-5-17 22:33 编辑


参考硬汉哥的MDK下载算法制作了STM32H7B0 + W25Q128 QSPI的MDK下载算法。


制作算法之前,W25Q128 的QSPI驱动已经全部测试成功,包括读,写,擦除,内存映射等。

由于没有太多经验,现在制作的这个算法,有点不太确定到底有没有成功?具体情况如下,

1,我写了一个简单的点LED灯的程序,根据硬汉哥的 “V7-064_内部Flash和QSPI Flash都运行程序的混合方式,无需单独制作BOOT和APP(强烈推荐)”这个例程,我把点灯程序放到了QSPI Flash中,如下
led0.jpg
其他都是默认放内部flash,然后烧录,烧录过程中,外部烧录算法也没什么报错,最后烧录结束,开机LED灯可以正常闪烁,看起来LED点灯程序已经正常运行。

但是我把内存映射初始化函数注释掉之后,然后编译重新烧录,发现这个LED灯还是可以正常运行。外部QSPI flash中的代码不是通过内存映射读取的吗,为什么注释掉之后还可以读取呢?

虽然烧录过程中全程没有任何报错,但是我不知道这个程序到底有没有烧录进外部flash中?


2,根据以上问题,我又通过下面的方法来测试烧录算法到底有没有问题,我把内部flash算法去掉,直接用外部算法,如下,
dw.jpg


烧录没问题,整片擦除可以顺利完成,这样看起来至少算法的擦除这部分没问题。
但下面那个“No Algorithm found for: 08000000H - 0800B3E3H” 错误是啥问题?
0x08000000地址不是内部flash吗,是不是说有些程序是必须烧在内部flash的?这和我的外部烧写算法有关吗?

ERASE.jpg

目前就发现了这两个问题,我有点不太明白这算法到底有问题没? 尤其是那个注释掉内存映射初始化代码后,程序仍然可以运行有点不太明白。


回复

使用道具 举报

34

主题

66

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2025-5-18 08:24:47 | 显示全部楼层
我后来看了一下,代码确实没有烧录进QSPI flash中,如下图,0x90000000地址中的值全部都是AA。
在寄存器调试中,也找不到以0x90000000开头的地址。。。
无标题.jpg



有点奇怪,我明明按照硬汉哥的如下方法,把某些代码的烧录地址选择到了QSPI flash中,为什么它还是被烧录到了内部flash中呢?

如果外部QSPI flash有问题,也应该报错吧?
但全程外部烧录算法都没有报任何错误,顺利烧录结束,擦除也能显示成功完成。。。
但确实是没有烧录进外部QSPI flash中,算法部分重新检查了一遍,也没发现有什么问题。。

led0.jpg

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-5-18 09:07:02 来自手机 | 显示全部楼层
mdk option选项的linker选项是不是独立设置分散加载了
回复

使用道具 举报

34

主题

66

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2025-5-18 10:03:46 | 显示全部楼层
eric2013 发表于 2025-5-18 09:07
mdk option选项的linker选项是不是独立设置分散加载了

都已经设置了,都是按照你的教程配置的。



44.jpg 441.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-5-18 10:09:11 | 显示全部楼层
coolaimcu 发表于 2025-5-18 10:03
都已经设置了,都是按照你的教程配置的。

不是这个,你是这个应用例子的linker设置
回复

使用道具 举报

34

主题

66

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2025-5-18 11:05:43 | 显示全部楼层
eric2013 发表于 2025-5-18 10:09
不是这个,你是这个应用例子的linker设置

我应用程序里面设置的分散加载是内部几块SRAM的分散加载,其他没有配置。

你意思是要配置外部QSPI flash的分散加载吗?我没太明白,你的教程上好像也没介绍这一块。

求指点,谢谢

51.jpg 52.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-5-19 07:43:05 来自手机 | 显示全部楼层
把linker里面第一个单选框 use memory layout勾上,否则你前面设置的将无效,会使用你这里自定义的sct文件
回复

使用道具 举报

34

主题

66

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2025-5-19 10:35:10 | 显示全部楼层
eric2013 发表于 2025-5-19 07:43
把linker里面第一个单选框 use memory layout勾上,否则你前面设置的将无效,会使用你这里自定义的sct文件

确实是这里的问题,我昨天捣鼓了一下,稀里糊涂的又可以了,好像可以烧录到QSPI flash里了,然后调试也可以看到0x90000000地址有数据了。
总感觉这里的配置有点奇怪,我勾选那个,刚开始不行,我又打开好像又可以了,反复捣鼓了好几次莫名其妙好了,今天空了我在研究研究。

还有个问题,就是,如果勾选“use memory layout”, 我下面那几个SRAM的分散加载是不是不能用了?但实际我也是需要用这些的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-5-19 10:39:15 | 显示全部楼层
coolaimcu 发表于 2025-5-19 10:35
确实是这里的问题,我昨天捣鼓了一下,稀里糊涂的又可以了,好像可以烧录到QSPI flash里了,然后调试也可 ...

勾选后,他mdk还会生成一个sct文件,你把相关的整合到你自定义的这个里面即可
回复

使用道具 举报

34

主题

66

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2025-5-19 11:06:23 | 显示全部楼层
eric2013 发表于 2025-5-19 10:39
勾选后,他mdk还会生成一个sct文件,你把相关的整合到你自定义的这个里面即可

感谢硬汉哥解答,后面的我再研究下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 04:12 , Processed in 0.325240 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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