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:使用 DSS 自动对芯片进行编程

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1393575/tms320f28379d-using-dss-for-automatic-programming-the-chip

器件型号:TMS320F28379D
主题中讨论的其他器件: UNIFLASH

工具与软件:

您好!

我正在开发双核芯片 TMS320F28379D 的编程、以用于大规模生产。
我对 DSLite 和从 UniFlash 生成的命令行环境有一些不愉快的经历。
最常见的方法是在编程闪存或 OTP 存储器的过程中编程中断、使器件处于奇怪的状态。
通常可以在 CSS 中更正状态、但这很耗时。 编程错误的器件百分比很高。

这就是我决定切换到 DSS (调试服务器脚本编写)的原因。

我已经修改了名为 loadti (用 JavaScript 编写)的示例、并成功地在两个内核中对闪存进行了编程(到目前为止没有 OTP)。

我有一些问题要问 DSS:

  1. 如何在调用 debugSession.memory.loadProgram()时检查和打印编程进度?
    我发现没有办法做到这一点: https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/725300/ccs-how-to-access-the-debug-server-scripting-loadprogram-progress
    但是 DSLite 和 CCS 确实可以实现这一点。
  2. 为什么我在尝试获取记忆的校验和时遇到异常? 我尝试了 debugSession.flash.getFlashChecksum ()以及 calculateChecksum ()。
    日志如下:
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    +++Calculate checksum...
    getFlashChecksum: ENTRY
    waitUntil: ENTRY timeout: infinite
    C28xx_CPU1: Calculating Checksum...
    C28xx_CPU1: Main Flash Checksum: 0x8774
    C28xx_CPU1: Main ECC Checksum: 0x2121
    C28xx_CPU1: OTP Checksum: 0xFC00
    C28xx_CPU1: OTP ECC Checksum: 0xFF80
    waitUntil: RETURN
    waitUntil: ENTRY timeout: infinite
    waitUntil: RETURN
    SEVERE: Error getting data associated with "FLASHCHECKSUM": Unknown key
    Error code #4020, could reset target!
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  3. 在 DSS 中使用 OTP 是否有任何特定的顺序或要求? 

此致、

Piotr Romaniuk

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

    您好!

    [报价 userid="64714" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1393575/tms320f28379d-using-dss-for-automatic-programming-the-chip "]最痛苦的是在对闪存或 OTP 内存进行编程的过程中编程中断、使设备处于奇怪的状态。[/QUOT]

    Dslite 应该非常可靠。 至少这是目标。 您能否提供有关此故障的更多详细信息、例如任何错误消息和解决此问题所需的技术?

    调用 debugSession.memory.loadProgram ()时,如何检查和打印编程进度?

    仍然没有一种简单的方法可以做到这一点。 我想您可以为控制台启用完全详细信息、并且您应该在程序加载期间获得更多诊断消息、但消息中也会有很多噪声。

    yan li10 说:
    为什么在尝试获取记忆的校验和时出现异常? 我尝试了 debugSession.flash.getFlashChecksum ()以及 calculateChecksum ()。
    日志如下:
    yan li10 说:

    dslite 不会出现此问题、正确吗? 正在使用哪个 CCS 版本。

    yan li10 说:
    在 DSS 中使用 OTP 是否有任何特定的顺序或要求?

    这是面向器件专家的问题。 我会为它创建一个单独的线程。

    谢谢

    Ki

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

    尊敬的 Ki:

    dslite 应该非常可靠

    使用 DSLite 时、我发现大约5%的编程失败。 我在 Linux 中使用了 XDS100v3和 bash 脚本。
    我运行以下编程序列:
    DSLite 的首次调用- cpu02的 OTP 和闪存、
    DSLite 的第二次调用-如上所述、但对于 cpu01。

    不幸的是、DSLite 正在闪存之前对 OTP 进行编程-它可能会按地址升序排列来自一个文件的数据[?]

    我刚刚在我的环境中改进了日志记录、所以我会收集一些问题的统计数据、并将与您分享准确的消息。

    现在、我只记得以下内容、单独出现错误:

    • FTDI 驱动程序返回错误状态、
    • Dslite 抱怨 OTP ECC 不正确(2种情况:(1) OTP 完全未编程、(2) LINKPOINTERS 被移至未编程的块)-它应该正常、
    • 更常见的情况是编程序列中断、所以芯片:  
      • 部分编程的 OTP、
      •  OTP 已编程、但闪存未编程
      • cpu02已编程、但 cpu01未编程
    您能否提供此故障的更多详细信息、如任何错误消息以及解决此问题所需的技术?

    我修复了 CCS 中的芯片、方法是启动调试会话并针对错误编程的内核执行手动解锁、擦除和编程操作。 这一过程耗时、不是大规模生产的可接受解决方案。 我写了详细的错误消息、稍后我将提供这些错误消息。

    进一步说明与 DSS 有关。

    这还不是一个简单的方法。 我想您可以为控制台启用完全详细信息、并且您应该在程序加载期间获得更多诊断消息、但消息中也会有很多噪音。

    我已经对打印的消息使用了设置"全部"、但没有显示任何进度。 LoadProgram ()只是封锁,直到它完成,我感到惊讶,因为 CCS 和 DSLite 提供了一些进度信息。 它看起来很奇怪,因为有一些大块,但至少有一些东西。 这两个程序是如何实施进展的、它们是否依赖于 DSS API?  

    使用 dslite 时不出现此问题、正确吗? 正在使用哪个 CCS 版本。[/QUOT]

    是的、这是 DSS。 我使用 CCS 12.1.0中的 DDS、到目前为止 Windows 版本、稍后我切换到 Linux。

    [报价 userid="2210" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1393575/tms320f28379d-using-dss-for-automatic-programming-the-chip/5332989 #5332989"]
    在 DSS 中使用 OTP 是否有任何特定的顺序或要求?

    这是面向器件专家的问题。 我会为它创建一个单独的线程。

    [报价]

    我只是想确定是否可以通过执行 LoadProgram()函数从一个文件(.hex 或.out)对 OTP 和 FLASH 进行编程。 我知道芯片站点、我的问题不是关于编程 API (即 DSS)。  

    此致、

    Piotr Romaniuk

    PS
    使用 Java 中的 DSS 时、日志如下所示:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    C28xx_CPU2: Calculating Checksum...
    C28xx_CPU2: Main Flash Checksum: 0x4E91
    C28xx_CPU2: Main ECC Checksum: 0xE052
    C28xx_CPU2: OTP Checksum: 0xFC00
    C28xx_CPU2: OTP ECC Checksum: 0xFF80
    waitUntil: RETURN
    waitUntil: ENTRY timeout: infinite
    waitUntil: RETURN
    SEVERE: Error getting data associated with "FLASHCHECKSUM": Unknown key
    ERROR
    com.ti.ccstudio.scripting.environment.ScriptingException: Error getting data associated with "FLASHCHECKSUM": Unknown key
    at com.ti.debug.engine.scripting.Flash.getData(Flash.java:225)
    at com.ti.debug.engine.scripting.Flash.calculateChecksum(Flash.java:248)
    at test1.main(test1.java:34)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用 DSLite 时、我观察到大约5%的编程失败。 [报价]

    好的、这是一个偶发的误差。 也许有些模糊的时间问题。

    我写了详细的错误消息、稍后我将提供。

    谢谢你

    我已经对打印的邮件使用了设置"全部"、但没有显示任何进度。 LoadProgram ()只是封锁,直到它完成,我感到惊讶,因为 CCS 和 DSLite 提供了一些进度信息。 它看起来很奇怪,因为有一些大块,但至少有一些东西。 这两个程序是如何实施进展的、它们是否依赖于 DSS API?  [报价]

    DSLite 与 DSS 分开。 CCS IDE 可以依赖多个 API、包括 DSS 以及直接在后台调用 GEL。  

    我能看到您的 DSS 脚本吗? 您是否可以重命名为*。txt 并将其附加?

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

    感谢您添加的详细信息。 我会跟一些专家跟进。 当我收到更多信息时、我会随时向您通报最新情况。

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

    Ki:

    这件事是紧迫的。
    本周13块板编程错误。 闪存或 OTP 编程已中断。

    此致、
    Piotr Romaniuk

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

    很抱歉延迟了响应。 我有一些答案。

    对于以下各项:

    yan li10 说:
    严重:获取与"FLASHCHECKSUM"相关的数据时出错:未知密钥

    这是由于 flash.calculateChecksum ()调用造成的。 此 API 用于支持旧版旧版 C2000器件。  虽然此调用还将在更现代的 C2000器件上获得校验和、但 API 依赖于这些更现代的器件中不存在的 FLASHCHECKSUM 属性。 因此、这是例外情况。 可以捕获和忽略异常。 一个更好的选择是 改用 flash.performOperation ("CalculateChecksum")、这不会导致异常。

    [报价 userid="64714" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1393575/tms320f28379d-using-dss-for-automatic-programming-the-chip/5335840 #5335840"] 2. .  一切都连接正确
     致命错误:IcePick_C_0:连接到目标时出错:(错误-151 @ 0x0)连接期间使用的其中一个 FTDI 驱动程序函数返回错误状态或错误。 原因可能是以下一个或多个:未插入 XDS100、XDS100序列号无效、XDS100 EEPROM 空白、FTDI 驱动程序缺失、USB 电缆故障。 使用"common/uscif"文件夹中的 xds100serial 命令行实用程序验证是否可以找到 XDS100。 (仿真包12.7.0.0.00059)
    失败:操作已中止

    dslite 无法检测到 XDS100调试探针。 如果主机操作系统未正确枚举 XDS100或由于某种原因断开了连接、则可能会发生这种情况。 我没有很好的解释为什么这会突然发生,如果事情已经正常工作。 我假设当这种情况发生时、xds100串行实用程序无法检测到任何东西。

    yan li10 说:
    在 DSS 中使用 OTP 是否有任何特定的顺序或要求?

    我还在做这方面的工作。 我可能需要将该线程重新分配给器件闪存专家。

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

    尊敬的 Ki:

    这是由于 flash.calculateChecksum ()调用。 此 API 用于支持旧版旧版 C2000器件。  虽然此调用还将在更现代的 C2000器件上获得校验和、但 API 依赖于这些更现代的器件中不存在的 FLASHCHECKSUM 属性。 因此、这是例外情况。 可以捕获和忽略异常。 更好的选择是改用 flash.performOperation ("CalculateChecksum")、这不会导致异常。[/QUOT]

    我如何读取校验和? 我在 API 文档 getFlashCheckChecksum ()和 getOTPChecksum ()中看到了,但我如何获得 ECCs 校验和呢?

    我假设在这种情况下 xds100serial 实用程序无法检测到任何内容。

    FDTI 驱动器对我而言始终是稳定可靠的。 也许 XDS100v3上存在一些问题?

    我有一些来自板的标度、它们被错误编程。 我还没有日志、但我遵循以下情况:

    1. 闪存和 OTP 完全未编程、
    2. 只有 OTP 中的 LINKPOINTERS 已编程(正确值)、闪存为空
    3. OTP 已正确编程、但闪存为空
    4. OTP 正确、但闪存已部分编程(I 比较校验和)  

    除[1]之外的所有这些情况看起来都已中断编程序列。 案例[1]看起来未执行到 XDS 的连接。

    此致、
    Piotr Romaniuk

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何阅读校验和? 我在 API 文档 getFlashCheckChecksum ()和 getOTPChecksum ()中看到了,但我如何获得 ECCs 校验和?[/报价]

    flash.calculateChecksum 将把所有的校验值输出到控制台。 但我假设您希望在脚本中获取校验和值、以便将其分配给变量。 有一种方法可以通过访问调试器属性来实现此目的。 我将研究如何为您获取此信息。

    [报价 userid="64714" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1393575/tms320f28379d-using-dss-for-automatic-programming-the-chip/5349070 #5349070"]

    我有一些来自板的标度、它们被错误编程。 我还没有日志、但我遵循以下情况:

    1. 闪存和 OTP 完全未编程、
    2. 只有 OTP 中的 LINKPOINTERS 已编程(正确值)、闪存为空
    3. OTP 已正确编程、但闪存为空
    4. OTP 正确、但闪存已部分编程(I 比较校验和)  

    除[1]之外的所有这些情况看起来都已中断编程序列。 案例[1]看起来未执行到 XDS 的连接。

    [报价]

    我看到您创建了一个相关主题。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1397762/tms320f28379d-dslite-programs-flash-and-otp-in-wrong-order

    谢谢观看、下面请 C2000闪存专家进行讲解。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有一种方法可以通过访问调试器属性来执行此操作。 我将为您寻找此信息。

    尝试如下操作:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    var checksum = debugSession.flash.performOperation("CalculateChecksum");
    // Checksum values
    var main = debugSession.options.getString("FlashCRCMainValue");
    var ecc = debugSession.options.getString("FlashCRCECCValue");
    var otp = debugSession.options.getString("FlashCRCOTPValue");
    var otp_ecc = debugSession.options.getString("FlashCRCOTPECCValue");
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    你(们)好

    感谢您提供校验和的解决方案。
    我没有将其标记为"这已解决我的问题"、因为仍有其他问题未决、我还不希望此主题关闭。

    此致、

    Piotr Romaniuk

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有将它标记为"这解决了我的问题"、因为还有其他未决问题、我还不希望关闭此主题帖。

    让我们使用您的另一个线程来解决其他闪存 OTP 问题。 我已提请 C2000专家注意该报告。