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.

[参考译文] Ubuntu 18-04上的 CCS 10.2 + J-Link 会在连接时清除 SRAM。 将前64 KB 读取为全零

Guru**** 2589280 points
Other Parts Discussed in Thread: TMS570LC4357, SEGGER

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/986401/ccs-10-2-j-link-on-ubuntu-18-04-clears-sram-on-connect-reads-first-64-kb-as-all-zeroes

主题中讨论的其他器件:TMS570LC4357SEGGER

外接板具有 TMS570LC4357、4MB 外部 SRAM、16MB SPI 闪存、8MB CFI 闪存

我正在尝试调试在 Ubuntu 18.04上开发的、由 gcc 编译的应用程序。

我计划在外部 SRAM 中执行应用程序。 CCS 显然无法将 ELF 文件下载到外部闪存/SRAM。

因此、我使用 objcopy 创建一个原始二进制文件、并使用引导加载程序/Y-modem 将其下载到外部 SRAM。
我使用引导加载程序使用二进制文件对外部 SPI 闪存进行编程、并将其加载到正确的位置。
在此期间、启用参数覆盖模块、并将前64KB 重定向到0x08050000处的内部 SRAM。
在引导加载程序主循环中(POM 仍然被启用),我使用 CCS 10.2和一个 J-Link 连接到电路板。
我加载应用程序符号并为引导加载程序添加 sy、s符号。

调试器显示"(未定义任何符号)"、但反汇编器似乎具有符号、但是
无源代码。


"连接"会导致复位吗?
是否有办法避免复位。 我想连接到正在运行的系统并将其停止。

如果我打开一个存储器窗口、闪存存储器的前64KB 似乎全部为零。
如果我在未连接任何探针的情况下应用手动复位、引导加载程序将启动并执行
通常情况下、0x00000000处的闪存是正确的、并非全部为零。

如果我在"Memory"窗口中查看0x08000000、则总内存会被清除。
如果 POM 被启用并且存储器被清除、那么它解释了前64KB 被清除的原因。

为什么 SRAM 是清晰的?
我的 GEL 文件中没有任何看起来可以清除 RAM 的内容。
它们几乎是默认值。

如果我在覆盖位置0x08050000修改存储器、然后在反汇编窗口中点击刷新
它仍然在0x00000000读取数据。 它不变。

如果我在0x08050000处打开反汇编窗口、那么更改内存窗口会影响反汇编窗口。


结论:POM 产生问题的理论似乎不能控制水。

我可以看到生成问题的另一个单元是 MPU

引导加载程序设置第一个 MPU 区域(0)以接受对所有闪存的访问

第二个 MPU 区域覆盖了闪存的前64KB、并且被设置为允许读取和执行、但块写入。

如果 CPU 被复位、那么所有 MPU 区域应该被禁用、对吧?

为什么调试器会在前64 KB 中读出零?

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

    您好 Ulf、

    由于我没有完全回答所有问题所需的器件知识、因此此帖子可能有点超出我的专业知识范围。 我需要邀请一位器件专家。 但是、我可以尝试解决一些更具体的工具:

    [引用 userid="122974" URL"~/support/tools/ccs/f/code-composer-studio-forum/986401/ccs-10-2-j-link-on-ubuntu-18-04-clears-sram-on-connect-reads-first-64-kb-as-all-zeroes "]
    "连接"会导致复位吗?
    是否有办法避免复位。 我想连接到正在运行的系统并将其停止。

    默认情况下不会。 但是、在 GEL OnTargetConnect()回调函数内看到 GEL_Reset()调用是很常见的。 如果您使用的是 GEL 启动文件、则可能需要检查该文件。

    [引用 userid="122974" URL"~/support/tools/ccs/f/code-composer-studio-forum/986401/ccs-10-2-j-link-on-ubuntu-18-04-clears-sram-on-connect-reads-first-64-kb-as-all-zeroes "]为什么调试器会在前64 KB 中读出零?[/quot]

    假设该值确实不是零、则问题可能是调试器无法正确读取存储器的内容。 可能是调试器内存映射问题、MPU 问题、其他一些安全问题等  再说一次、由于我对器件缺乏了解、很难说出这一点。 我将尝试征求器件专家的意见。

    谢谢

    Ki

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

    我解决了我的问题。 CPU 暂停、但未复位。

    我启用了加载复位、清除了 POM 寄存器、 然后
    写入几个 EMIF 寄存器、因此现在我可以完全访问存储器。
    现在问题似乎是断点。

    我没有找到在 J-Link 中使用 H/W 断点的方法。

    不支持吗?

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

    很高兴听到您解决了您的初始问题。

    [引用 userid="122974" URL"~/support/tools/ccs/f/code-composer-studio-forum/986401/ccs-10-2-j-link-on-ubuntu-18-04-clears-sram-on-connect-reads-first-64-kb-as-all-zeroes/3644873 #3644873"]我没有找到在 J-Link 中使用硬件断点的方法。

    这是使用 J-Link 时的已知问题。 请参阅下面的 Johns End of 发表的文章:

    https://e2e.ti.com/support/tools/ccs/f/code-composer-studio-forum/587472/ccs-tm4c1290nczad-cannot-enable-disable-breakpoint-while-the-target-is-running-when-using-j-link/2160085#2160085

    "遗憾的是、要使用 JLink 设置硬件断点、您需要使用 SEGGER 控制面板。 我发现、如果我使用它来设置硬件断点、它可以正常工作、并且可以在器件运行时完成。"

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

    好的、因此它不是很有用。 我成功地测试了 XDS200、它现在回答正确、因此我现在将继续使用它。