硬汉嵌入式论坛

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

F429 HAL库驱动外置SDRAM,并配置SDRAM可运行代码

[复制链接]

9

主题

22

回帖

49

积分

初级会员

积分
49
发表于 2023-6-15 16:52:54 | 显示全部楼层 |阅读模式
本帖最后由 loserman 于 2023-6-15 17:05 编辑

F429驱动外部SDRAM,并配置SDRAM可运行代码,用标准库没问题,切换到HAL,就会进HardFault,有大佬清楚吗?

1、标准库写法:
在system_stm32f4xx.c中的void SystemInit(void)函数中,加入SDRAM驱动,并配置SYSCFG->MEMRMP,交换映射地址,使SDRAM能运行程序,代码截图如下:
Snipaste_2023-06-15_16-50-37.png

然后在分散加载sct文件中,加入以下内容:
Snipaste_2023-06-15_16-51-34.png



2、HAL库代码:
先通过STM32CubeMX生成SDRAM驱动,然后把void MX_SDRAM_Init(void)放在system_stm32f4xx.c中的void SystemInit(void)函数中,类似标准库的写法,截图如下:



然后更改分散加载sct文件,发现只要加入启用RW_RAM1的语句,HAL库的代码就会进入HardFault。

请各位大佬看看咋回事




Snipaste_2023-06-15_16-52-22.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2023-6-15 18:24:02 | 显示全部楼层
可以使用我这个帖子的玩法,标准库,HAL库都可以。

STM32F429的程序加载到SDRAM的运行方法
https://forum.anfulai.cn/forum.p ... 9299&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

9

主题

22

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2023-6-15 19:15:10 | 显示全部楼层
eric2013 发表于 2023-6-15 18:24
可以使用我这个帖子的玩法,标准库,HAL库都可以。

STM32F429的程序加载到SDRAM的运行方法

谢谢eric答复,我的工程代码需求比较特殊,扩展SDRAM大小32MB,即可用于跑代码,也要用于作为扩展RAM使用。
具体来说,就是我的代码中嵌入了图个支持二次编程的runtime,main运行之后,二次编程的代码会被runtime加载到SDRAM中运行
回复

使用道具 举报

9

主题

22

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2023-6-20 14:39:11 | 显示全部楼层

问题解决了,方案如下:
1、必须有bootloader,SDRAM放在bootloader中初始化(也是就是FMC初始化)。
2、跳转到APP后,在system_stm32f4xx.c中的void SystemInit(void)函数中进行SYSCFG的配置,使地址交换
注意:在引入bootloader后,参照官方示例代码,在跳转之前会判断栈顶地址,而启用外部SDRAM后,MDK编译自动把__initial_sp栈顶指针放到了外置SDRAM,在bootloader跳转之前需要特殊处理,或者干脆不判断。
如下图,栈顶地址被编译到了0x8000 0000地址去了。
Snipaste_2023-06-20_14-29-40.png

以上欢迎指正。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2023-6-21 08:51:51 | 显示全部楼层
loserman 发表于 2023-6-20 14:39
问题解决了,方案如下:
1、必须有bootloader,SDRAM放在bootloader中初始化(也是就是FMC初始化)。
2 ...

这个栈顶判断一点用没有(应该是很久以前ST的工程引入的),就是个巨坑,论坛已经很多网友在这个地方入坑。
回复

使用道具 举报

9

主题

22

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2023-6-21 13:39:07 来自手机 | 显示全部楼层
eric2013 发表于 2023-6-21 08:51
这个栈顶判断一点用没有(应该是很久以前ST的工程引入的),就是个巨坑,论坛已经很多网友在这个地方入坑 ...

那有什么其他方案可以代替的?在跳转之前判断APP是否存在
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2023-6-22 11:14:50 | 显示全部楼层
loserman 发表于 2023-6-21 13:39
那有什么其他方案可以代替的?在跳转之前判断APP是否存在

什么都不用加,正确的APP加载姿势是应该对加载的app固件做CRC或者MD5完整性校验。

而不是仅仅判断一个开头就认为APP是否存在就跳转。
回复

使用道具 举报

9

主题

22

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2023-6-25 09:37:56 来自手机 | 显示全部楼层
eric2013 发表于 2023-6-22 11:14
什么都不用加,正确的APP加载姿势是应该对加载的app固件做CRC或者MD5完整性校验。

而不是仅仅判断一个 ...

明白了!官方示例中这种简单的判断太鸡肋
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 18:18 , Processed in 0.069677 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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