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:大规模生产的专业编程

Guru**** 2483085 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1438704/tms320f28379d-professional-programming-in-mass-production

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

工具与软件:

您好!

如何在生产中进行大规模编程? 它必须以自动方式完成(脚本等)。

我已经在 Linux 下测试并使用了 DSLite (来自 UniFlash)和 DSS。 这些技术具有显著的 故障率(故障率的10-20%)或不便、

如果失败、微控制器保持部分编程状态并具有安全存储器。

这非常令人沮丧、我们正在使用这些 API、无法扩大生产规模。

许多板必须手动固定、非常耗时。

此致、

Piotr Romaniuk

PS
我在该论坛的许多线程中讨论了问题。

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

    很遗憾听到您的糟糕体验。 这涉及到很多组件。 有些可能是硬件问题、有些与闪存编程器相关、有些则使用工具。 感谢您与您创建的各种主题帖分享您的反馈。

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

    尊敬的 Ki:

    今天、我在 CCS 中固定了20多个电路板。 您告诉过我、它使用另一个 API (哪一个? 我可以使用它吗?)

    DSLite 的主要区别在于、 我 为所有操作保留了一个开放会话(DSLite I 使用4个调用)。

    尽管如此、对于 CCS、我有很多问题、包括以下类型:

    1) 1)[ x3不同电路板]当我为 CPU1编程 OTP 时(我序列中4个步骤的最后一个)、它返回错误:

    C28xx_CPU2:闪存编程期间的错误(闪存算法返回的错误代码)。 FMSTAT (某些器件上的 STATCMD)值= 48。 操作已取消(0)。
    C28xx_CPU2:文件加载程序:内存写入失败:未知错误
    C28xx_CPU2:GEL:文件:bootloader_cpu01-part-otp.hex:加载失败。

    我想、我误选了另一个内核(或 CCS 选择了该内核- CCS 在运行期间会在这两个内核之间切换)、但没有选择 我仔细检查了一下,它是对的。 尽管我选择了 CPU1、但 CCS 正在尝试对 CPU2进行编程 已编程、因此出现错误!

    2)[x1]当我尝试计算内核的校验和时、我有:

    C28xx_CPU1:闪存操作期间发生错误:在执行 wr_PLL.ALG 时等待目标停止超时
    C28xx_CPU1:写入 PLL 值时出错(闪存算法超时)。 操作已取消。
    C28xx_CPU1:在擦除/加载闪存之前执行调试器复位并执行引导 ROM 代码(点击 CCS 调试窗口中的"Resume"按钮)。 如果这样无助于成功执行闪存擦除/加载、请检查复位原因(RESC)寄存器、NMI 影子标志(NMISHDFLG)寄存器和引导 ROM 状态寄存器以进行进一步调试。
    C28xx_CPU1:闪存编程器:初始化器件时出错。
    C28xx_CPU2:注意:缺失时钟状态标志是根据设置检测到的、需要清零以锁定 PLL。 (0x2)

    擦除两个 CPU 中的闪存后、工作正常。

    编写程序(甚至发送到 RAM)和运行我可以自行处理的程序的最通用方法是什么?

    是 DebugServer 吗? 您能和我分享一些关于这个主题的文档吗?

    涉及许多组件。 一些可能是硬件问题、一些与闪存编程器相关、一些与工具有关。[/QUOT]

    我还认为这种多层结构是潜在的问题根源。 这就是我尝试限制元件数量并找出根本原因的原因。

    此致、

    Piotr Romaniuk

    PS
    我检查了闪存内容、发现具有闪存内校验和的电路板具有可重复的错误(例如:仅对一个扇区进行了编程;具体而言、相同的 值未正确编程。)  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您告诉我它使用的是另一个 API (哪一个? 我可以使用它吗?)

    抱歉、我可能把其中的一些线程弄混了。 您指的是哪个 API?

    对于#1:  

    我想、我误选了另一个内核(或者 CCS 选了该内核- CCS 在运行期间在这两个内核之间切换)、但没有 我仔细检查了一下,它是对的。 尽管我选择了 CPU1、但 CCS 正在尝试对 CPU2进行编程 、已编程、因此出现错误!

    我经常使用 F28379D、从来没有见过我在 Debug 视图中从何处(在 CCS 中)选择 CPU1、但它在加载程序操作期间对 CPU2进行编程。 如您所述、有时调试器会由于交叉触发而切换调试上下文、但只要正确的 CPU 仍在"Debug"视图中突出显示、调试操作应仅适用于该 CPU、除非使用了某个同步组。

    至于#2、我不确定该问题。 我的专业知识特定于 CCS 或 UniFlash 等主机软件、但闪存编程器本身和硬件行为超出了我的专业知识范围。 Charles (在你的另一个线程中)更精通这些领域。 也许向他询问有关#2的更多详细信息、并将此主题留到诸如#1等清晰的 CCS 主题中。

    最通用的编程(甚至发送到 RAM)和运行我可以自己处理的程序的方法是什么?

    RAM 的使用更简单。 您需要修改链接器命令文件以确保将代码配置为从 RAM 加载和运行:

    https://dev.ti.com/tirex/explore/node?node=A__APJQ1q8Ox6tOF4TmB4THeg__ccs_devtools__FUz-xrs__LATEST

    然后、您可以正常在 CCS 中编译和调试项目。 调试器会将程序加载到 RAM 中。

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

    尊敬的 Ki:

    感谢您的答复。 我稍后将回复、因为我参与了编写基于 RAM 的引导加载程序。

    此致、

    Piotr Romaniuk

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

    尊敬的 Ki:

    [报价 userid="2210" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1438704/tms320f28379d-professional-programming-in-mass-production/5521860 #5521860"]
    您告诉过我、它使用另一个 API (哪一个? 我可以使用它吗?)

    抱歉、我可能把其中的一些线程弄混了。 您指的是哪个 API?

    [报价]

    我询问了 CCS 调试视图。

    我使用 F28379D 的频率非常高、而且从来没有见过(在 CCS 中)我在"Debug"视图中选择 CPU1、但该 CPU1在加载程序操作期间对 CPU2进行编程。 如您所述、有时调试器会由于交叉触发而切换调试上下文、但只要正确的 CPU 仍在"Debug"视图中突出显示、则调试操作应仅适用于该 CPU、除非使用了某个同步组。

    我有另一次体验。
    例如、我在具有调试服务器连接的窗口和 CPU-Flash 窗口中所选内核(输入 DCSM 参数的窗口、闪存擦除按钮等)之间曾看到过差异。

    我所述的问题(即意外切换到另一个内核)在不同的电路板上发生了3次。 我以非常系统的方式执行操作、 将所有步骤记录在 excell 表中。  

    根据从 RAM 加载的预引导加载程序进行的编程、它的工作情况非常好、编程没有错误。
    因此、问题在于 DSLite 存在一些问题、它们可能与多个会话有关(会话之间的历史记录或项目同步缺失)。

    从大规模生产的角度来看 、有两个目标:

    1)低编程故障率,  

    2)编程时间短。

    对我来说、已实现[1]。  
    不幸的是、将 prorgam 加载到 RAM 的过程耗时很长。 代码约为30KB、DSS 加载该代码的过程需要30秒。
    JTAG 在5MHz 时钟下工作、这意味着会产生巨大的开销。

    我将为此问题打开另一个逻辑讲座。

    此致、
    Piotr Romaniuk

    PS
    我的初始问题是:"如何在生产中进行大规模编程?" 仍然打开。