This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在使用TMS570LS3137芯片时,设计了 bootloader 并烧录到Bank0 上 0x00000000 地址,App 烧录到 Bank1 上 0x00180000 地址上,从bootloader 跳转到 App 的 0x00180000 地址 APP 是可以正常启动的,
但是 我修改 sys_link.cmd 文件里的配置后,把 APP 烧录到 TMS570LS3137 Emif 接口上的 MRAM 上,使用 工具读取 Mram 上的数据和烧录的固件是一样的,但是我在 bootloader 里 跳转到 Mram 0x60000000 地址 APP不
能正常启动 , bootloader 里有初始化 emif 配置,并且可以正常读取 emif 上 Mram 内的数据,这是什么问题?
Mram app sys_link.cmd 配置:
您好,
您能解释一下您是如何将应用的.out 文件加载到0x60000000地址的起始地址的吗?
我是说引导加载程序会接收二进制文件并使用 EMIF 加载到地址中?
或者
您是否与引导加载程序一样直接从 CCS 中刷写此.out?
我想您使用的第二种方法是直接从 CCS 进行编程、如果为真、您是否能够在调试模式下看到正确地将代码刷入 MRAM 中?
我是在 bootloader 通过 UART 接收编译出来的 .bin 文件数据并 在Emif 0x60000000首地址顺序写入数据 到 Mram 内,我通过 uniflash 工具读取 起始地址为 0x60000000 到指定长度地址的数据后,读出的数据和 .bin 文件 数据是一致的,然后再 bootloader 里 执行跳转函数 jump_load_app():
跳转函数如下:
#define MRAM_APP_ADDR 0x60000000U
void jump_load_app(uint32 appxaddr)
{
uint32 g_ulTransferAddress;
g_ulTransferAddress = (uint32_t)appxaddr;
((void (*)(void))g_ulTransferAddress)();
}
jump_load_app(MRAM_APP_ADDR);
我尝试上传文件一直上传失败,只能粘贴了,这是我修改使用的 cmd 文件,麻烦帮忙验证一下,感谢!
=======================
sys_link_Bootloader.cmd
=======================
/* */ /*----------------------------------------------------------------------------*/ /* USER CODE BEGIN (0) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Linker Settings */ --retain="*(.intvecs)" /* USER CODE BEGIN (1) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Memory Map */ MEMORY { VECTORS (X) : origin=0x00000000 length=0x00000020 KERNEL (RX) : origin=0x00000020 length=0x00008000 FLASH0 (RX) : origin=0x00008020 length=0x00177FE0 STACKS (RW) : origin=0x08000000 length=0x00002a00 KRAM (RW) : origin=0x08002a00 length=0x00000800 RAM (RW) : origin=(0x08002a00+0x00000800) length=(0x0003d600 - 0x00000800) /* USER CODE BEGIN (2) */ /* USER CODE END */ } /* USER CODE BEGIN (3) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Section Configuration */ SECTIONS { .intvecs : {} > VECTORS /* FreeRTOS Kernel in protected region of Flash */ .kernelTEXT : {} > KERNEL .cinit : {} > KERNEL .pinit : {} > KERNEL /* Rest of code to user mode flash region */ .text : {} > FLASH0 .const : {} > FLASH0 /* FreeRTOS Kernel data in protected region of RAM */ .kernelBSS : {} > KRAM .kernelHEAP : {} > RAM .bss : {} > RAM .data : {} > RAM .sysmem : {} > RAM FEE_TEXT_SECTION : {} > FLASH0 FEE_CONST_SECTION : {} > FLASH0 FEE_DATA_SECTION : {} > RAM /* USER CODE BEGIN (4) */ /* USER CODE END */ }
=======================
sys_link_Mram_App.cmd
=======================
/* */ /*----------------------------------------------------------------------------*/ /* USER CODE BEGIN (0) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Linker Settings */ --retain="*(.intvecs)" /* USER CODE BEGIN (1) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Memory Map */ MEMORY { /*Mram App*/ VECTORS (X) : origin=0x60000000 length=0x00000020 KERNEL (RX) : origin=0x60000020 length=0x00010000 FLASH2 (RX) : origin=0x60010020 length=(0x00180000 - 0x00010000 - 0x00000020) STACKS (RW) : origin=0x08000000 length=0x00008000 KRAM (RW) : origin=0x08008000 length=0x00002000 RAM (RW) : origin=0x0800A000 length=(0x40000 - 0x00008000 - 0x00002000) /* USER CODE BEGIN (2) */ /* USER CODE END */ } /* USER CODE BEGIN (3) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Section Configuration */ SECTIONS { .intvecs : {} > VECTORS /* FreeRTOS Kernel in protected region of Flash */ .kernelTEXT : {} > KERNEL .cinit : {} > KERNEL .pinit : {} > KERNEL /* Rest of code to user mode flash region */ .text : {} > FLASH2 .const : {} > FLASH2 /* FreeRTOS Kernel data in protected region of RAM */ .kernelBSS : {} > KRAM .kernelHEAP : {} > RAM .bss : {} > RAM .data : {} > RAM .sysmem : {} > RAM FEE_TEXT_SECTION : {} > FLASH2 FEE_CONST_SECTION : {} > FLASH2 FEE_DATA_SECTION : {} > RAM /* USER CODE BEGIN (4) */ /* USER CODE END */ }
您好,
对延迟回复深表歉意:
我看不到 cmd 文件有任何主要问题、但您能否让客户尝试在 cmd 文件中进行此小幅修改并查看行为:
=======================
sys_link_Mram_App.cmd
=======================
/* */ /*----------------------------------------------------------------------------*/ /* USER CODE BEGIN (0) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Linker Settings */ --retain="*(.intvecs)" /* USER CODE BEGIN (1) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Memory Map */ MEMORY { /*Mram App*/ VECTORS (X) : origin=0x60000000 length=0x00000020 KERNEL (RX) : origin=0x60000020 length=0x00010000 FLASH2 (RX) : origin=0x60010020 length=(0x00180000 - 0x00010000 - 0x00000020) STACKS (RW) : origin=0x08006000 length=0x00002000 KRAM (RW) : origin=0x08008000 length=0x00002000 RAM (RW) : origin=0x0800A000 length=(0x40000 - 0x00008000 - 0x00002000) /* USER CODE BEGIN (2) */ /* USER CODE END */ } /* USER CODE BEGIN (3) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Section Configuration */ SECTIONS { .intvecs : {} > VECTORS /* FreeRTOS Kernel in protected region of Flash */ .kernelTEXT : {} > KERNEL .cinit : {} > KERNEL .pinit : {} > KERNEL /* Rest of code to user mode flash region */ .text : {} > FLASH2 .const : {} > FLASH2 /* FreeRTOS Kernel data in protected region of RAM */ .kernelBSS : {} > KRAM .kernelHEAP : {} > RAM .bss : {} > RAM .data : {} > RAM .sysmem : {} > RAM FEE_TEXT_SECTION : {} > FLASH2 FEE_CONST_SECTION : {} > FLASH2 FEE_DATA_SECTION : {} > RAM /* USER CODE BEGIN (4) */ /* USER CODE END */
--
我按照上面的 sys_link_Mram_App.cmd 文件,配置后还是不能正常跳转到 Mram 运行 app,还有其他可以排查的地方吗?
Bootloader 跳转到 App 指令如下:(使用此函数 在 flash 内部由 bank0 地址 跳转到 bank1 地址 是可以正常跳转的)
#define APP_START_ADDRESS 0x60000000
g_ulTransferAddress = (uint32_t)APP_START_ADDRESS;
((void (*)(void))g_ulTransferAddress)();
您好,
转发我们的工程师的回复,
是否可以设置一次与客户的实时调试会话、客户可以在其中显示其屏幕和正在执行的步骤。
这将有助于我更清楚地了解问题、我可以在调试调用本身中提供我的建议。
我将在上午10点至晚上8点 IST (印度标准时间)提供服务。 如果客户满意实时调试会话、我们可以根据客户空闲情况在周一进行规划。