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.

[参考译文] AM6442:在从 DDR 而不是 MSRAM 运行示例工程时出现问题(MCU+ SDK v10.01、CCS v12.8.1、XDS110 探针)

Guru**** 2430620 points
Other Parts Discussed in Thread: AM6442

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1546217/am6442-trouble-running-example-projects-from-ddr-instead-of-msram-mcu-sdk-v10-01-ccs-v12-8-1-xds110-probe

器件型号:AM6442


工具/软件:

我目前正在使用 CCS 测试 AM6442 EVM 板。 我尝试从 MCU+ SDK v10.01 获得一个示例工程(基于 FreeRTOS)、我已经增强了该工程、以便在 R5F0_1 内核上从 DDR 运行、因为我已超过 MSRAM 空间。 工程编译顺利、但在 XDS110 调试接口中将其加载到内核后、没有任何内容。 程序处于运行状态、断点不会命中、当我暂停它时、它卡在 HwiP_armv7r_vectors_freertos_asm 中的 prefetch_abort_addr 调用中:  

到目前为止、在我的研究中、我使用了 SoC 外设驱动程序--> SDK 帮助文件的 DDR 部分来创建和加载 board_ddrReginit.h 文件、但没有找到任何其他具体的帮助。

非常感谢有关此问题的任何帮助、我的 syscfg 和链接器信息如下:  

与 DDR 相关的 SYSCFG 设置:

内存摘要显示:

我对的修改 Memory Configurator -> Section 在 linker.cmd 文件中生成以下结果:

很重要

  .vectors :{
  }> R5F_VECS  , palign(8)  


  组 :  {
  .text.hwi :{
  } palign(8)
  .text.cache :{
  } palign(8)
  .text.mpu:{
  } palign(8)
  .text:abort :{
  } palign(8)
  }> DDR_5RF01   


  组 :  {
  .text:{
  } palign(8)
  .rodata :{
  } palign(8)
  }> DDR_5RF01   


  组 :  {
  .data:{
  } palign(8)
  }> DDR_5RF01   


  组 :  {
  .bss :{
  } palign(8)
  RUN_START (__BSS_START)
  RUN_END (__BSS_END)
  .sysmem :{
  } palign(8)
  .stack :{
  } palign(8)
  }> DDR_5RF01   


  组 :  {
  .irqstack :{
    。 =。 +_IRQ_STACK_SIZE;
  }对齐 (8)
  RUN_START (__IRQ_STACK_START)
  RUN_END (__IRQ_STACK_END)
  .fiqstack :{
    。 =。 +__FIQ_STACK_SIZE;
  }对齐 (8)
  RUN_START (__FIQ_STACK_START)
  RUN_END (__FIQ_STACK_END)
  .svcstack :{
    。 =。 +_SVC_STACK_SIZE;
  }对齐 (8)
  RUN_START (__SVC_STACK_START)
  RUN_END (__SVC_STACK_END)
  .abortstack :{
    。 =。 +_ABORT_STACK_SIZE;
  }对齐 (8)
  RUN_START (__ABORT_STACK_START)
  RUN_END (__ABORT_STACK_END)
  .undefinedstack :{
    。 =。 +__undefined_stack_size;
  }对齐 (8)
  RUN_START (__undefined_stack_start)
  RUN_END (_Undefined_stack_end)
  }> MSRAM   


  组 :  {
  .arm.exidx:{
  } palign(8)
  .init_array:{
  } palign(8)
  .fini_array:{
  } palign(8)
  .text.boot:{
  } palign(8)
  }> MSRAM   

  .bss.user_shared_mem (NoLoad):{
  }> USER_SHM_MEM    

  .bss.log_shared_mem (NoLoad):{
  }> LOG_SHM_MEM    

  .bss.ipc_vring_mem(空载):{
  }> RTOS_NORTOS_IPC_SHM_MEM    

  .bss.nocache (NoLoad):{
  }> MSRAM    
}


移动数据

  R5F_VECS  :origin = 0x0、长度= 0x40  
  R5F_TCMA  :origin = 0x40、长度= 0x7FC0  
  R5F_TCMB0  :origin = 0x41010000、长度= 0x8000  
  non_cache_MEM  :origin = 0x70040000、长度= 0x8000  
  MSRAM  :origin = 0x70000000、length = 0x40000  
  USER_SHM_MEM  :原点= 0x70050000、长度= 0x4000  
  Log_SHM_MEM  :原点= 0x70054000、长度= 0x4000  
  RTOS_NORTOS_IPC_SHM_MEM  :origin = 0x70048000、length = 0x8000  
  Flash  :origin = 0x60180000、length = 0x80000  
  DDR_5RF01  :origin = 0x80000000、length = 0x800000  
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    忘记添加:通过 XDS110 探针加载程序后、我使用内存浏览器查看 DDR 空间、看到的就是“???“ 查看器。

    此外、完全从 MSRAM 运行程序根本没有问题、因此我相信我的 EVM 板的整体设置可以正常工作。

    再次感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果看到“???“、则表明 DDR 似乎未初始化。  您在加载应用之前是否运行任何引导代码?  是否有一个在某处执行的 DDR_Init() 函数?  您可能需要查看该函数之后是否可以访问存储器、如果不能、则需要进行一些调试

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、James:

    感谢您的答复。 我不是从我的代码中显式调用它,但我看到它是在 ti_drivers_config.c->Datamos( System_Init ) 中调用的,这是我 main () 中的第一个调用,它使用由在线 TI 工具生成并位于 board_ddrReginit.h 文件中的 gDdrParams 结构。

    在回答您的回复时、我意识到是的、我有一个程序加载到电路板上、该程序在 OSPI 模式下自动启动、我没有认为这可能会干扰我在 CCS 中加载到 r5f01 的内容、因此我使用 default_sbl_null.cfg 重新刷写了电路板。 不幸的是没有帮助。

    我将 EVM 设置为 OSPI 引导模式、我为电路板上电->启动目标配置->连接到 r5f01 ->问题 CPU 复位->加载我的.out 文件

    我注意到、当我加载.out 文件时、可以看到“MAIN_Cortex_R5_0_1:GEL 输出:CPU 复位(软复位)已通过 GEL 发出。“ 中的“Console"窗口“窗口中。

    r5f01 内核进入运行状态、我没有得到其他反馈。 点击 Suspend 时、它位于 prefetch_abort_addr 行。

    另请注意,我在 main ()(这是对 system_init () 的调用)的第一个调用处放置了一个断点,它从不会到达那里。

    当内核处于运行状态时、我看到不仅是 DDR 存储器没有初始化、看起来没有初始化内容。 MSRAM、R5F_VECS、R5F_TCMA 等、一切都是“???“

    就情况而言、对于该项目、我从“empty_am64x-evm_r5fss0-1_freertos_ti-arm-clang"工程“工程开始、并添加了其中一个 GPIO 工程(切换 TEST_LED1)中的代码以及 IPC_spinlock 共享存储器示例工程。  

    接受任何建议!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Dawn、让我更经常地找一些人处理这些项目。  sbl_null 可能执行了一些与应用程序 init 冲突的 init。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 James、非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、James:

    我有一个良好的学习/调试会话与 Stuart 和设法找到问题!. 在这里发帖帮助未来的人谁可能会遇到这一天.

    首先、我意识到我的存储器浏览器显示“???“ 对于内存空间,因为我在寻找时没有处于暂停状态,我完全监督。

    接下来、在调试时、我们发现所有 MPU 函数(从 mpu_init () 开始)都已加载到 DDR 中、这会产生问题、因为 DDR 需要在我们访问 MPU 之前完全设置 MPU。  

    在仔细检查我的所有存储器段时、我意识到.text.mpu 输出段指向 DDR 空间、我修改了此区域以加载到 MSRAM 空间中、这样我的实际代码就可以耗尽 DDR 空间

    现在、当我在 main() 中断点时、我可以验证我的实际代码是否已正确加载到 DDR 空间中。

    当然,现在它崩溃的新的和令人兴奋的方式,但至少我们已经过去了从 DDR 空间运行代码的嗡嗡声:)。

    感谢您的时间,并希望这有助于未来的人!