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.

[参考译文] TMS320F28379D:在 TMS320F28379D 上擦除后出现 verifyProgram () 问题 (CCS 20.4)

Guru**** 2680875 points

Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1595802/tms320f28379d-issue-with-verifyprogram-after-erase-on-tms320f28379d-ccs-20-4

部件号: TMS320F28379D

您好:

我请求您提供帮助、以解决发现的不一致行为 Code Composer Studio 20.4.0 、使用 旧 DSS (dss.bat) 在 A 上 TMS320F28379D 目标 (CPU1 + CPU2)

我目前正在将旧版 DSS 脚本(从 CCS 9.2)迁移到 CCS 20.4.0、并且遇到与相关的阻塞问题 闪存擦除后的闪存内容验证

发现的问题

可以了 .out每个 CPU 在闪存中加载 5 个程序 () (CPU1 和 CPU2)。

标称外壳(工作正常)

loadProgram(.out)
verifyProgram(.out)

 

→验证正常

有问题的情况

使用以下器件执行的闪存擦除:

debugSessionsMap[cpuName].flash.options.setString(
    "FlashEraseSelection",
    "Entire Flash"
);
debugSessionsMap[cpuName].flash.erase();

擦除两个 CPU 后、我执行:

debugSessionsMap[cpuName].memory.verifyProgram(binPath);

意外结果

  • verifyProgram()不抛出任何异常 和打印件 “验证成功“ 指定 五个已加载程序之一

  • 这种行为 始终出现在同一程序中 在五人中。

  • 问题是 CPU1 和 CPU2 上都是相同的

不过:

  • a. 原始内存转储 擦除后立即执行的操作显示相应的闪存区域已存在 完全充满了 0xFF

  • 下载程序后、相同的转储文件正确地显示程序存在于闪存中。

因此:

  • 闪存为 有效擦除 转换为擦除操作。

  • 但是 verifyProgram()错误地报告程序仍然存在

所用代码

验证/闪存

try {
    debugSessionsMap[cpuName].memory.verifyProgram(binPath);
    print("Verification successful on " + cpuName +
          " FLASH for the binary '" + binPath + "'.");
} catch (ex) {
    print("Verification failed on " + cpuName +
          " FLASH for the binary '" + binPath + "'.");
    if (mode === "FLASH") {
        print("Flashing to " + cpuName +
              " FLASH the binary '" + binPath + "'...");
        debugSessionsMap[cpuName].memory.loadProgram(binPath);
    }
}

原始闪存读取(转储)

var nativeArray = debugSessionsMap[cpuName].memory.readData( 0, startAddr, 8, lengthBytes );

 

提前感谢您的帮助。

此致、
Mathis Grenier
软件工程师

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

    你好、Mathis、  

    所有这些功能是否都在 CCS 9.2.0 环境中工作? 该问题可能并不是 DSS 特有的、而是两个版本之间的闪存操作发生了变化。

    谢谢

    Ki

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

    您好、Ki、

    是的、它使用相同的基于 DSS 的流程在 CCS 9.2.0 中正常工作。

    根据我的调查、调用时闪存会被有效擦除flash.erase()(通过相应闪存区域中显示的原始存储器转储进行确认)0xFF。 因此,这个问题似乎与具体相关memory.verifyProgram(),即使闪存中不再存在该程序,它也会报告成功的验证。

    这表明verifyProgram() CCS 9.2.0 和 CCS 20.4.0 之间的行为发生了变化、而不是闪存擦除操作本身出现问题。

    请告知我是否有已知的更改、限制或建议的替代方案可在较新的 CCS 版本中进行程序验证。

    谢谢、
    Mathis

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

    您可以尝试完全验证吗? 默认值为“部分“、因此您需要显式设置它:

    debugSessionMap[cpuName].options.setString(“VerifyAfterProgramLoad","Full verification"“ verification")“);“;

    此外、仅尝试闪存验证。 将闪存程序选项设置为仅验证:

    仅 debugSessionsMap.flash.options.setString(“FlashDownloadSetting","Verify "“ ")“);“;

    然后正常调用 loadProgram 并查看闪存验证是否失败。

    谢谢

    Ki

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

    感谢您的反馈和建议。

    我测试了两种方法、但行为保持不变。

    在对程序.map文件进行详细分析后、我可能已经确定了一个可能解释此行为的关键点:

    .out是一个仅数据 ELF:

    • 0 字节代码

    • .text部分

    • 仅将~0x150 字节的初始化数据放置在闪存中

    • ENTRY POINT SYMBOL = 0

    在这方面:

    • 闪存被真正擦除(通过显示 0xFF 的原始存储器转储确认)

    • 中的预期数据.out不是 0xFF

    • verifyProgram()仍返回验证成功

    这意味着在 CCS 20.4 中、闪存验证机制(快速验证或完全验证)会忽略或视为经过简单验证的 ELF 文件、这些文件仅包含数据段而不包含可执行段。
    在 CCS 9.2 中并非如此、因为使用完全相同的文件时、验证可正常工作。

    是否有官方或推荐的方法来验证仅数据部分的闪存内容?

    谢谢、
    Mathis

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

    啊、这很有趣。 感谢您提供这一额外的数据点。

    是否可以获取相关的*。out 文件? 您可以通过私人 E2E 消息发送。

    谢谢

    Ki

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

    好的、我正在通过私人消息发送给您。

    谢谢、  

    Mathis

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

    感谢您提供该文件。 这是非常有帮助的。 我重现了这个问题。 这不是 DSS 问题、而是调试器和闪存编程器的验证过程。

    我为此提交了一个错误,跟踪链接: https://sir.ext.ti.com/jira/browse/EXT_EP-13085

    如错误中所述、调试器和闪存验证过程都无法在 CCS 20.4.0 中按预期工作。 在 CCS 9.3.0 中、两者都是这样。 在 CCS 12.8-1 中、只有一条检测通道。

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

    我的初始分析是错误的。 只有调试器完全验证无法正常工作。 闪存编程器验证似乎能够识别问题。

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

    我从 DSS 测试脚本中获得了相同的结果:

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

    非常感谢您的帮助和抽出时间来帮助我。