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.

[参考译文] CCS/TMS320DM642:无法调试:发生数据验证错误、文件加载失败。

Guru**** 2993200 points

Other Parts Discussed in Thread: TMS320DM642

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/914376/ccs-tms320dm642-not-able-to-debug-data-verification-error-occured-file-load-failed

器件型号:TMS320DM642

工具/软件:Code Composer Studio

您好!

我在 Windows 10下运行 CCS7.3。 当我尝试启动调试会话(XDS560V2 Traveler)时、会显示以下错误消息:

C64x:文件加载器:验证失败:地址0x8004AD60处的值不匹配请验证目标存储器和存储器映射。
C64x:GEL:file:app.out:发生数据验证错误、文件加载失败。

在检查存储器映射、.gel 文件和链接器命令文件时、没有任何可疑内容(http://software-dl.ti.com/ccs/esd/documents/troubleshooting-data_verification_errors.html)。

GEL 文件中的行:GEL_MapAdd (0x8000000、0、0x080000001、1);

存储器映射行:起始地址= 0x74000000;结束地址= 0x87FFFFFF;属性= RAM

cmd 文件中的行:SDRAM:O = 8000000000h  l = 01000000h

使用存储器浏览器时、我可以在此存储器位置设置值。 刷新时、存储器保存此值。

您能否为我提供进一步的支持来解决此问题?

提前感谢。

此致、
Daniel

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

    Daniel:

    实际上、您似乎在该页面上遵循了我们的建议、此时我会开始怀疑存储器本身可能存在物理错误。  

    为了彻底检查这一点、我可能会尝试对外部存储器执行老化或步行测试、以尝试查找与外部存储器的任何不一致之处。 Spectrum Digital 仍有电路板支持库示例可供下载、其中提供了 SDRAM 测试。

    http://c6000.spectrumdigital.com/evmdm642/

    这些项目是为非常旧的 CCS 版本设计的、但它们可能很容易导入到较新版本的 CCS 中(我认为它们不使用 DSP/BIOS、这会使事情复杂化)。 无论怎样、您都可以使用他们的例程作为基础来创建自己的。  

    除此之外 、除了破坏数据传输的不良 JTAG 连接(极不可能)之外、我实际上无法想到在这种情况下可能发生的任何其他问题。 我也考虑了缓存问题、但 JTAG 存储器负载完全绕过了缓存。  

    如果我认为有任何其他可能相关的事情,我会回覆。  

    希望这对您有所帮助、

    拉斐尔

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

    您好、Rafael、

    我对这个问题有了新的发现。 如果我多次重试调试、那么任意次数的重试后、调试就会起作用。 错误消息中的地址只是在增加(而不是减少)。 调试工作前重试次数可以超过10次。

    以下是一个示例:

    单击 Debug Symbol (首次):

    C64x:文件加载器:验证失败:地址0x00000001处的值不匹配请验证目标内存和内存映射。

    C64x:GEL:文件:C:\projects\xxxx\xxxx\Debug\example.out:发生数据验证错误、文件加载失败。

     

    单击 Debug (第二次):

    C64x:文件加载器:验证失败:地址0x00000001处的值不匹配请验证目标内存和内存映射。

    C64x:GEL:文件:C:\projects\xxxx\xxxx\Debug\example.out:发生数据验证错误、文件加载失败。

     

    点击 Debug (第三次):

    C64x:文件加载器:验证失败:地址0x8000000处的值不匹配请验证目标存储器和存储器映射。

    C64x:GEL:文件:C:\projects\xxxx\xxxx\Debug\example.out:发生数据验证错误、文件加载失败。

     

    点击 Debug (第四次):现在调试正常

    我为什么会有这种行为? 调试首次运行后、只要处理器的硬件通电、停止调试并再次开始调试就没有问题。 对硬件进行下电上电后、需要执行上述过程才能再次进行调试。 因此、调试非常耗时。 使用 TI 的另一个处理器(其他项目)和同一个 Spectrum Digital 仿真器/调试器、无法重建此问题。

    我期待收到你的回复。 提前感谢!

    此致、

    Daniel

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

    Daniel:

    很难确定后续故障的确切原因、未将其链接到硬件故障或启动模式不良。   

    第一条错误消息很明显、因为存储器地址属于内部 RAM、应始终正确访问。 如果缓存已关闭、调试探针应能够无问题地写入该地址。 在尝试加载代码时、您能否确认缓存已禁用? 您可以手动启动调试器并确认配置-请查看 CCS 用户指南的第7.3.2节、网址为:

    https://software-dl.ti.com/ccs/esd/documents/users_guide/index.html 

    第三条错误消息对应于无法写入外部 DDR、但这需要通过 GEL 文件正确初始化器件。 鉴于这似乎是在稍后阶段发生的、我将重点介绍第一个错误首先发生的原因。  

    后续启动导致硬件正常工作的原因可能是每个步骤可能会对器件进行少量配置、直到器件达到稳定状态。 我过去看到过这种情况、但没有那么多步骤(通常是两个步骤)。  

    我将尝试考虑可能会对这种情况有所帮助的其他详细信息、并在发现任何相关问题时进行报告。  

    希望这对您有所帮助、

    拉斐尔

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

    您好、Rafael、

    感谢您对我的问题做出响应。 我尝试手动启动调试器(启动、连接)、然后使用"Program Load"选项手动加载.out 文件。 我发现了同样的问题。

    您能解释一下如何禁用高速缓存吗? 我需要知道这一点、以确认缓存已禁用。

    提前感谢。

    此致、

    Daniel

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

    Daniel:

    我对该器件不是最了解、但请查看下面有关启用/禁用 L2高速缓存方法的主题。

    https://e2e.ti.com/support/processors/f/791/t/318988

    希望这对您有所帮助、

    拉斐尔

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

    您好、Rafael、

    我使用 EVMDM642.GEL 默认文件调整了 GEL 文件。 例如、我添加了 onRestart 函数、该函数关闭 L2。 没有明确禁用 L1和 L2高速缓存的函数。 在进行此调整后、调试将在重试后工作、但遗憾的是、以下错误消息经常出现:

    C64x:GEL 输出:GEL 复位 DSP3。 (OnReset)
    C64x:GEL 输出:GEL 启动完成。 (启动)
    C64x:GEL 输出:GEL 复位 DSP3。 (OnReset)
    C64x:GEL 输出:GEL 准备程序加载。 (OnPreFileLoaded)
    C64x:写入寄存器 PC 时出现问题:(错误-1141 @ 0x0)器件未响应请求。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包7.0.48.0)
    C64x:GEL 输出:重新启动 GEL DSP3。 (OnRestart)
    C64x:GEL 输出:加载了 GEL 程序。 (OnFileLoaded)

    您是否有任何想法、错误是什么? 我是否还必须在任何其他函数中禁用 L1和 L2高速缓存?

    此致、

    Daniel

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

    Daniel:

    一个问题:为了帮助进一步隔离问题的根本原因、您是否尝试手动启动调试器、但没有 GEL 文件? 这可以提供有关 JTAG 连接状态和器件本身的附加提示。  

    我遇到的另一个方面:您能否启用 Reset  the target on a connect 并启动板选项? 这可能会触发 CPU 复位、从而在连接(甚至运行 GEL 例程)之前使器件处于更稳定的状态。 有关详细信息、请参阅前面链接的 CCS 用户指南的第7.2.4节。  

    在不稳定期间、您可以断开所有内核并发出"Reset Emulator"以尝试恢复 JTAG 状态机。 这通常不是必需的、但此时我会尝试一切。  

    有关重置的详细信息 、请参阅重置类型页面、网址为:

    https://software-dl.ti.com/ccs/esd/documents/xdsdebugprobes/emu_resets.html

    如果这不能带来可靠的运行、我开始再次怀疑 JTAG 连接本身可能有问题-如果正确连接到器件后连接显示出某种不稳定(通过移动电缆等)、这将得到确认。

    您可以尝试使用低级 JTAG 实用程序 dbgjtag 发出连续数据传输、然后摆动电缆以查看是否会出现任何问题。 请查看调试 JTAG 页面的硬件检查清单部分的步骤6、网址为:

    https://software-dl.ti.com/ccs/esd/documents/ccs_debugging_jtag_connectivity_issues.html

    希望这对您有所帮助、

    拉斐尔

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

    您好、Rafael、

    我尝试了这两种方法、分别使用自动调试选项和手动启动调试器。 连接调试器始终工作正常。 一旦软件被加载到带有"程序加载"的器件上、就会发生错误。

    通过使用.gel 文件、"器件不响应请求"。 或者出现"Verification Failed"(验证失败)错误、但"Verification Failed"(验证失败)错误现在通常只需两次尝试、直到调试工作为止。

    测试后、JTAG 连接似乎正常。

    此致、

    Daniel

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

    大家好、Daneil、

    遗憾的是、CCS 团队与您合作时不知道原因是什么。 我们作为设备组、没有任何您在 DM642产品文件夹中看到的资料或资源。 您可以在 E2E 论坛中搜索以前讨论的存档帖子、这些帖子可能有助于解决您的问题。 有关 TMS320DM642支持的更多信息、请参阅中的常见问题解答  

      https://e2e.ti.com/support/processors/f/791/t/813421

     对由此给您带来的不便和缺乏指导表示遗憾。

    雷克斯

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

    您好!

    我找到了问题。 视频端口在加载程序期间写入内存、这就是验证失败的原因。 但实际上我不理解这一点。

    我希望在程序加载期间内核会停止、因此所有内容都会被冻结。 此外,我在"OnPreFileLoaded()函数中有"Reset_VideoPorts"函数,但这没有任何效果。 我必须手动启动目标配置、连接到目标、在加载程序之前、我必须通过热菜单手动调用 GEL 脚本"Reset_VideoPorts"。 此过程非常不方便且耗时。

    您能解释一下这种行为吗?您能不能有任何提示来改进/加速我的调试过程。

    提前感谢。

    此致、

    Daniel

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

    [报价用户="user4990587)]我发现了问题。 视频端口在加载程序期间写入内存、这就是验证失败的原因。

    啊、这是有用的信息。 验证可能会失败、因为在程序加载后但在验证过程之前(或期间)更改了存储器。

    [引用 user4990587"]预计在程序加载期间内核会停止,因此所有内容都将被冻结。 [/报价]

    目标本身被暂停。 但是、我想在此期间其他外设仍然可以处于活动状态并访问存储器。

    [引用 user4990587"]此外,我在"OnPreFileLoaded()函数中具有"Reset_VideoPorts"函数,但这没有任何效果。

    此函数的作用是什么? 另请注意、并非所有 GEL 操作都是同步的。 当程序加载完成时、操作可能尚未完成。

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

    好的、感谢您提供的信息。

    我在该 Reset_VideoPorts()函数之前调用了另一个 GEL 函数,现在一切都按预期工作。

    非常感谢你的帮助。

    此致、

    Daniel