Hi,
非常感谢使用NXP产品,很高兴为你提供技术支持!
我不太理解你的意思,你是想要把代码放到SDRAM内,从SDRAM启动吗?
这显然是不行的,因为LPC54xxx不带内部Flash,再加上你说的贵司的工程代码量很大,在我看来从QSPI flash是最理想的启动方式啊。
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
HI,
非常感谢您的回复。
对,是想把代码放到sdram中执行。
我们在之前的操作中遇到以下两个解决不了的问题:
Hi ,
谢谢你的回复。
针对你的问题:
1. 如果你设置启动是XIP image, 而且load address 就是在QSPI flash中的话, 那你操作SPIFI模块的方式对QSPI flash读写是会有点不妥,毕竟代码就在里面运行呢,所以我赞成你说的代码运行在SDRAM中。
2. 具体实现方式:首先,将QSPI flash中的代码分成两部分,跟着设置MCU启动方式为:Load image, 使得QSPI flash中代码1部分可运行在片内SRAM中,其作用是初始化SDRAM, 并将QSPI flash2中代码2部分拷贝到SDRAM后,实现程序跳转,使得程序能在SDRAM中运行。
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
HI,
非常感谢您的回复。
针对您提出的方案,我比较赞同。
有2点问题,跟您请教:
1. 下载到sdram的第二部分代码, 是否还可以通过 MCUXpresso IDE调试?
2. 之前我做过尝试,但是没有成功,是否有例程?或者成功的案例参考?
谢谢!
Hi ,
回答你的问题
1) 当然,这是可以的。
2)没有现成的application 例程作为参考,因为这算是比较复杂,高级一些的应用了。
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
HI,
理解。
我们项目很紧急,计划参加9月初的德国展览,所以还需要您再帮忙。
我在NXP论坛上看到一个方法,add-symbol-file可以把loader以及main app结合到一起调试,
但是我在54018上调试,一直没有成功,请您也看看这个,方便的话,帮忙调试看看。
地址:https://community.nxp.com/message/1042364?commentID=1042364#comment-1042364
非常感谢您的支持。
谢谢!
Hi ,
请分享一下你的测试步骤(最好附上截图)还有报错的截图,方便我查找出原因。
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
HI,
通过loader启动的方式有一些进展,
1. main app以qspi flash启动的方式,loader可以调用通过,但是main app还是不能对flash进行读写,所以这个不是我们想要的方式。
2. main app以plain load image的方式,具体操作如下:
loader的主体代码:
void boot_jump(uint32_t addr)
{
__asm("LDR SP,[R0]");
__asm("LDR PC,[R0,#4]");
}
int main(void)
{
uint32_t index = 0;
uint32_t *sdram = (uint32_t *)SDRAM_BASE_ADDR; /* SDRAM start address. */
/* Hardware Initialization */
CLOCK_EnableClock(kCLOCK_InputMux);
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
BOARD_InitPins();
BOARD_BootClockFROHF96M();
BOARD_InitDebugConsole();
BOARD_InitSDRAM();
PRINTF("\r\n Start EMC SDRAM access flash .\r\n");
SpifiFlashInit();
SpifiFlashRead(0xa0000000sdram, 0x200000);
PRINTF("\r\n Start EMC SDRAM access example.\r\n");
boot_jump(0xa0000000);//在这里添加断点,在debugger console中这里添加add-sybol-file mainapp.axf 0xa0000000,就可以跳转到main app的resetISR,但是单步再往下执行就跳到HardFault_Hander(这个是loader中的函数)中。
//boot_jump(0x10800000);
/* Prepare data and write to SDRAM. */
while (1)
{
}
}
loader的设置:
Hi fisker avit,
我发现两个疑问的地方,
1. 跳转设置还需要VTOR寄存器的。
2. main app采用以plain load image的方式,程序本身运行于RAM中,你在debugger console中添加add-sybol-file mainapp.axf 0xa0000000, 不知道是否就是上面的 main app。
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
HI,
针对提问逐条回答:
1. 跳转设置还需要时钟VTOR寄存器的。
FISKER:是指SysTick->CTRL = 0;
SCB->VTOR = addr & 0xFFFFFF80;
boot_jump(addr); ?
这样我也尝试过,结果一样。
2. main app采用以plain load image的方式,程序本身运行于RAM中,你在debugger console中添加add-sybol-file mainapp.axf 0xa0000000, 不知道是否就是上面的 main app。
FISKER: 是同一个,我采用的main app会load到external sdram上,如果不使用add-symbol-file,会提示Break at address "" with no debug information available, or outside of programe code.
如果不采用plain load image方式,就是qspi方式启动main的话,是可以从loader到debug 调试的。
所以我检测0x10800000地址以及0xa0000000地址的内容,发现内容也是一模一样,但表现的现象不一样(如上次回复所说)。
Hi fisker avit,
Thanks for your reply.
1)时钟两字是我多打的,请忽略。
2)我很迷惑了,一个已经在芯片内运行程序将存储在QSPI中的‘自己’搬运到SDRAM中,然后跳转??
即使成功了有什么目的,你还是运行自己吗,而现在此程序不就在RAM中运行吗?
3) 最好分享一篇文章,希望有帮助:“No source available”, or how to Debug Multiple Binaries with GDB and Eclipse | MCU on Eclipse
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
HI,
最近出差,没时间回复,请见谅。
有两个程序,1为loader, 2为 main app .
通过QSPI方式启动loader,通过loader获取存储与flash中的main,并拷贝到外部sdram运行。
再请教另外一个问题:
通过外部flash QSPI方式启动程序, 怎么操作外部flash的读写?(测试demo发现会在外部flash reset的时候卡住)
Hi fisker avit,
Thanks for your reply.
如果通过外部QSPI启动,要读写操作此QSPI,可以试试把这一操作的代码放在内部的RAM中执行。
Have a great day,
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------