硬汉嵌入式论坛

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

[SDRAM] 求助~使用IAR调试运行在外部SDRAM的程序

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2021-11-25 16:38:54 | 显示全部楼层 |阅读模式
本帖最后由 opensix 于 2021-11-25 16:42 编辑

使用STM32H7的开发板,
已经写好了用户程序,储存在QSPI Flash中,运行在SDRAM中,采用了Bootloader来复制程序到SDRAM中并跳转。

下载程序的方法是Bootloader + 自制的命令行程序,进行串口通信下载。

调试方式是使用IAR进行编译,然后下载程序,再通过IAR的Debug Without Downloading进行调试。

但是这样的话就很麻烦,在IAR编译以后,要打开命令行工具下载程序,然后回到IAR调试。

我了解到IAR可以通过Option -> Debugger -> Setup中设置自定义的setup micros (.mac file)脚本,
在程序下载前,运行脚本初始化外部SDRAM,然后直接下载程序到外部SDRAM。

然后就要像在内存中调试代码一样,可以直接调试了。

就是有一点非常困难,setup micros (.mac file)脚本都是寄存器操作,请问有没有人有类似的经验?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2021-11-25 17:35:04 | 显示全部楼层
帮顶,如果仅仅是跳转里面执行比较简单,调试的话,要好好搞下。

STM32F429的程序加载到SDRAM的运行方法
http://www.armbbs.cn/forum.php?mod=viewthread&tid=89299
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2023-5-31 17:10:23 | 显示全部楼层
我也遇到了个类似的问题,用的STM32H750的板子,App固件打包成.c的数组文件集成到bootloader,使用分散加载把固件地址映射到Qflash中,使用下载算法将固件下载到qflash,开机后通过bootloader将qflash中的程序转存到SDRAM(0xD0000000)中并跳转。可是bootloader跳转完貌似并没有进入App固件
[C] 纯文本查看 复制代码
int main(void)
{
	uint32_t *SouceAddr = (uint32_t *)&__Objects_App_bin;
	uint32_t *DestAddr = (uint32_t *)APPLICATION_ADDRESS;
	
	CPU_CACHE_Enable();
  HAL_Init();	
	SystemClock_Config();
	
	DEBUG_USART_Config();
	BSP_MPU_ConfigRegion();
	SDRAM_Init();
	
	QSPI_FLASH_Init();

	fh_memcpy(DestAddr, SouceAddr, 0x1000000);		//转存1Mqflash数据至SDRAM
	printf("booting to sdram success !!!\n");

  CPU_CACHE_Disable();
  SysTick->CTRL = 0;
	
  JumpToApplication = (pFunction) (*(__IO uint32_t*) (APPLICATION_ADDRESS + 4));
  __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
  JumpToApplication();
  while(1)
  {
  }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-6-1 00:46:51 | 显示全部楼层
wandeng123 发表于 2023-5-31 17:10
我也遇到了个类似的问题,用的STM32H750的板子,App固件打包成.c的数组文件集成到bootloader,使用分散加载 ...

有个复制到内部SRAM运行的,你可以对比试试。

制作了一个通过BOOT复制APP程序到AXI SRAM运行的案例,适合H750,H7B0玩
https://www.armbbs.cn/forum.php? ... 2748&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2023-6-8 10:09:21 | 显示全部楼层
eric2013 发表于 2023-6-1 00:46
有个复制到内部SRAM运行的,你可以对比试试。

制作了一个通过BOOT复制APP程序到AXI SRAM运行的案例, ...

谢谢硬汉哥,这个问题已经解决了,是我App跳转之后,没有在初始化时关闭SDRAM的时钟导致总线频率更改,现在已经不用SDRAM做外部app使用了,遇到了一堆问题,放弃了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-6-9 09:13:57 | 显示全部楼层
wandeng123 发表于 2023-6-8 10:09
谢谢硬汉哥,这个问题已经解决了,是我App跳转之后,没有在初始化时关闭SDRAM的时钟导致总线频率更改,现 ...

好的。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

职业摆烂选手,退堂鼓一级演奏家

积分
3
QQ
发表于 2023-6-19 15:26:46 | 显示全部楼层
wandeng123 发表于 2023-6-8 10:09
谢谢硬汉哥,这个问题已经解决了,是我App跳转之后,没有在初始化时关闭SDRAM的时钟导致总线频率更改,现 ...

能简单说明一下你都遇到了哪些问题嘛?我踩踩坑,目前有这个需求需要把APP丢到SDRAM ,但是我目前跳过去启动不起来,我测试使用内部SRAM,却可以....
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2023-7-5 14:40:24 | 显示全部楼层
candang 发表于 2023-6-19 15:26
能简单说明一下你都遇到了哪些问题嘛?我踩踩坑,目前有这个需求需要把APP丢到SDRAM ,但是我目前跳过去启动 ...

当在SDRAM中运行的时候,对spiflash进行读写操作会出现读写错误,但是放单片机上运行就没这个问题,没太细查,也可能是代码问题,怕后面遇到的坑多
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 18:24 , Processed in 0.258376 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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