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.

[参考译文] PROCESSOR-SDK-AM64X:从 DDR 运行时、LWIP 堆栈 Enet 初始化崩溃

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1246589/processor-sdk-am64x-lwip-stack-enet-initialization-crash-when-running-from-ddr

器件型号:PROCESSOR-SDK-AM64X
主题中讨论的其他器件:SysConfig

尊敬的支持部门:

我们在将 Enet 堆栈放入 DDR 存储器时遇到了问题、这存在于我们大部分昂贵的电路板上。

问题是、初始化仅在第3次或第4 次尝试时成功。 我们 在 MSRAM 内部时没有看到这个问题、我们仍然能够通过将一半堆栈放入 MSRAM 来屏蔽它、但使用链接器文件的.text、.rodata 和.data 除外。

我的问题是、是否可以从 DDR 运行 LWIP 和 Enet 完成? 我们认为 DDR 不存在问题、因为它通过了我们的 memtests。

初始化 通常 在使用 HwiP_undefined_handler 时失败、在使用 Hwip_prefeting_abort_handler 和 Hwip_data_abort_handler 时失败。

当我回溯时、它在 CPSW 初始化或 Enet phy 初始化时也同样失败。

我们还怀疑 这是由以太网 phy-s DMA 引起的、因为这些缓冲器也被放入到 DDR 中。 这是原因吗?

您能否就导致此问题的原因提出任何解决方案?

格尔格利

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

    您好!

    感谢您的提问。

    我将就此进行检查并回来与您联系。

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:有没有关于此主题的新闻?

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

    尊敬的 Marc:

    很抱歉等了很久。

    它也应该通过 DDR 工作。  

    您能帮助我在设置上重现问题并进行最起码的更改吗?

    比如说、

    • 我可以使用 SDK 8.6.0.45开始?
    • 您在这里指的是哪种测试案例?
    • 为了重现此问题,我需要哪些代码更改?
      • 例如链接器文件更改?
      • 是否有任何其他文件更改?

    您是否可以进入并发送快照导致错误的代码部分?

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:

    由于我们使用不同的 DDR4芯片(专有硬件)、因此复制工作可能会很困难。 我们使用的是 SDK 8.5.0.24与 CCS 12.2.0。

    测试用例源自 enet_cpsw_rawhttpserver、但此后发生了大量更改;并添加了额外内容。

    由于崩溃只会冻结运行 ENET 的 R5内核、并且这是唯一部分通过 DDR 运行的内核;我们怀疑 DDR4访问是与此相关的。 但是、使用 DDR 作为数据缓冲区(TFTP 的文件缓冲区、FW 升级缓冲区或 DDR 应力测试等)时、我们不会立刻发现问题。

    问题:
    -审查 DDR 参数和配置(等待我们的应用工程师,详细信息可用),

    -在 DDR 中是否允许 DMA (我们是否应该筛选出所有 DMA 数据/代码并放置在 MSRAM 中? 这是一个非常乏味的过程,我们已经尝试过;但这里没有解决方案。

    此致、
    马克

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

    尊敬的 Ashwani:

    现在、我已切换到较新的(8.6.0.45) SDK、有时在初始化之前也会看到问题。 也就是说、代码会在  
    void MPU_SECTION MpuP_ENABLE (void)
    在断言中发挥作用。

    这也只出现在使用以太网的内核上。

    关于您的问题:

    • 我可以使用 SDK 8.6.0.45开始?

    我在使用较新的和较旧的 SDK 时都看到了这两种情况下的问题。

    • 您在这里指的是哪种测试案例?

    我主要通过顺序写入和读取进行测试、但 没有进行随机读取结束写入。

    • 为了重现此问题,我需要哪些代码更改?  
      • 例如链接器文件更改?
      • 是否有任何其他文件更改?

    我不确定链接器文件是否有更改、但我将在下提供相关内容。

    我想在坠机后、零件中只有变化。 除此之外、我还需要说明的是、由于我们是在客户电路板上运行的、因此我们拥有不同的 DDR 芯片。 (IS43QR16512A-083TBL)我是否也应该为您提供 DDR config SysConfig?

    linker.cmd 内容:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /* This is the stack that is used by code running within main()
    * In case of NORTOS,
    * - This means all the code outside of ISR uses this stack
    * In case of FreeRTOS
    * - This means all the code until vTaskStartScheduler() is called in main()
    * uses this stack.
    * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack
    */
    --stack_size=64000
    /* This is the heap size for malloc() API in NORTOS and FreeRTOS
    * This is also the heap used by pvPortMalloc in FreeRTOS
    */
    --heap_size=128000
    -e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */
    /* This is the size of stack when R5 is in IRQ mode
    * In NORTOS,
    * - Here interrupt nesting is enabled
    * - This is the stack used by ISRs registered as type IRQ
    * In FreeRTOS,
    * - Here interrupt nesting is disabled
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    此致、

    格尔格利

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

    感谢更新。

    您的定制电路板设置中有多个变量。

    您是否可以使用 AM64x-EVM 启动?

    此致

    阿什瓦尼

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

    我们也在 AM64x-SK-EVM 板上对 其进行了尝试、但在先前的 SDK 版本(8.5)中没有看到此问题。

    由于我们进行了一些修改、我还会尝试将其移植回、并让您知道结果。

    我可以提到的一点是、MpuP_enable ()问题仅在从 OSPI 引导加载程序启动时发生、但当我从 调试器上载代码时问题不存在。

    此致、

    格尔格利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们也在 AM64x-SK-EVM 板上试用了 该软件,但我们在以前的 SDK 版本(8.5)中未发现此问题。

    很高兴听到这个消息。

    由于我们做了一些修改,我也会尝试将其移植回,并让您知道结果。

    期待取得成果。

    仅当从 OSPI 引导加载程序启动 MpuP_enable ()问题时才会发生,但当我从 调试器上载代码时该问题不存在。

    您能否分享您设置的资源分配架构以供审核?

    此致

    阿什瓦尼

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

    您是否在指 Debug.map 文件?

    此致、

    格尔格利

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

    它也会有所帮助。  

    但我希望全面了解资源分配、正如我们已经看到的、如果一个资源多次初始化、还会导致核心崩溃或挂起。

    此致

    阿什瓦尼

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

    我不能完整地确定 如何向您发送所请求的资源分配、但我可以向您发送 debug.map 并告知您初始化时出现错误。

    不能确定它在 init 停止的位置,有时它在 Ethernet init 中,最近甚至不在 main 函数中,但 MPU_Init ()。 现在有一个示例 whitch 在 I2C_open ()的地址转换处停止。 请注意、这并非在所有电路板上都发生、但我们解决了 DDR 通信问题。

    debug.map 文件内容:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ******************************************************************************
    TI ARM Clang Linker PC v2.1.3
    ******************************************************************************
    >> Linked Thu Jul 20 11:52:59 2023
    OUTPUT FILE NAME: <TERM.out>
    ENTRY POINT SYMBOL: "_vectors" address: 00000000
    MEMORY CONFIGURATION
    name origin length used unused attr fill
    ---------------------- -------- --------- -------- -------- ---- --------
    R5F_VECS 00000000 00000040 00000040 00000000 RWIX
    R5F_TCMA 00000040 00007fc0 00000000 00007fc0 RWIX
    R5F_TCMB0 41010000 00008000 00000000 00008000 RWIX
    FLASH 60180000 00080000 00000000 00080000 RWIX
    NON_CACHE_MEM 70068000 00008000 00000000 00008000 RWIX
    MSRAM 700f0000 00050000 00008e28 000471d8 RWIX
    PP_SOM_SHM_MEM 701c0000 00000100 000000bc 00000044 RWIX
    PP_BASE_SHM_MEM 701c0100 00000100 000000bc 00000044 RWIX
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    I2C_OPEN()输出:

    以及处理程序异常、如果它希望将 fileBuffer 数据作为代码执行:

    在最后一个我验证了输出文件,它失败在 0x900209E0 Witch 是 UART_WRITE ()的地址,但该地址的反汇编也是模糊的,因为起初我看到没有函数名称的代码, 如果我向上滚动、它们会切换到.words、比如代码 alingment 错误。

    此致、

    格尔格利

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

    感谢 Gergely 提供的日志。

    请允许我花点时间查看并回复给您。

    您是否已经与 TI 硬件专家团队一起完成了定制电路板原理图审阅?

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:

    我不确定我们是否这样做了、这可能需要等到经理从他们的假期回来。

    马克说,我应该等待对这个问题的答复。

    此致、

    格尔格利

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

    我不确定我们是否这样做了、这可能需要等到经理从他们的假期回来。

    马克说,我应该等待对这个问题的答复。

    [/报价]

    当然可以。

    此致

    阿什瓦尼