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/F28M36P63C2:C28内核上使用DDS API的固件更新失败

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/641504/ccs-f28m36p63c2-firmware-update-with-dds-api-fails-on-c28-core

部件号:F28M36P63C2
主题中讨论的其他部分:UNIFLASH,CCStudio

工具/软件:Code Composer Studio

大家好,

我编写了一个小型Java程序,它利用了Uniflash 3.4 .1.0.0012万 的DSS API

此小型程序使用  德州仪器(TI) XDS100v2 USB调试探头更新F28M36P63C2微控制器的M3和C28内核。 但是,在某些情况下,C28核心更新失败,并出现以下错误:

严重:C28xx_0:闪存编程期间出错(闪存算法返回错误代码)。 操作已取消。
严重:C28xx_0:文件加载器:内存写入失败:未知错误
严重:C28xx_0:gel:文件:c:\program_c28.out:加载失败。
SEVERE:文件:C:\program_c28.out:加载失败。
严重:加载“C:\program_c28.out”时出错:文件:c:\program_c28.out:加载失败。

com.ti.CCStudio.scripting.environment.ScriptingException: Error loading“C:\program_c28.out”: file: c:\program_c28.out:load failed.

下面是 执行 更新的代码片段:

ScriptingEnvironment env = ScriptingEnvironment.instance();

DebugServer debugServer;
DebugSession dsM3;
DebugSession dsC28;
	
try {
debugServer =(DebugServer) env.getServer("DebugServer.1");

如果(null!= debugServer){
debugServer.setConfig(target_cfg_path);

dsM3 = debugServer.openSession("Texas Instruments XDS100v2 USB Debug Probe_0/Cortex_M3_0");
dsC28 = debugServer.openSession("Texas Instruments XDS100v2 USB Debug Probe_0/C28xx_0");

dsM3.target.connect(true);
dsM3.flash.erase();
dsM3.memory.loadProgram(file_path_m3);
dsM3.memory.verifyProgram(file_path_m3);

dsC28.target.connect(true);
dsC28.flash.erase();
dsC28.memory.loadProgram(file_path_c28);	//<--此调用期间出现问题
dsC28.memory.verifyProgram(file_path_c28);
		
dsC28.target.runAsynch();
dsC28.target.disconnect();
dsM3.target.runAsynch();
dsM3.target.disconnect();
}
捕获(异常e){}

在我的PC上,大多数情况下工作正常。 但是,在客户PC和虚拟PC上,如果结合 了某些微控制器实例,则会出现上述问题。

您是否有任何想法可能导致此问题,或者您是否可以给我任何有关此问题的提示?

提前感谢您!

此致,
Tamas

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

    数据验证错误可能由多种因素导致,特别是写入Flash时,需要在写入前完全擦除(您正在执行此操作)。

    间歇性的程序加载问题通常与硬件有关-根据我的经验,在以下情况下,这种情况更常见:
    -调试探头和设备之间的通信时断时续(检查电缆和上拉/下拉)
    -目标板上的电源波动(使用示波器跟踪此情况)
    -主机和目标板之间的接地回路(使用隔离电源或同时连接两个GND)

    不常见的情况是PC与调试探测器之间的连接或PC上的整体CPU负载出现问题,这会影响"基于主机的"调试探测器,例如XDS100或XDS510 (其部分逻辑在主机中完成)。

    您的脚本看起来不错,但您可以通过对代码加载启用"完全验证"来添加额外的安全措施,如下所示:

    debugSession.options.setString("VerifyAfterProgramLoad","Full验证");

    尽管这可能会导致出现更多错误消息,但它将有助于完全验证您的设置,其中代码可能明显加载正常,但在中间数据块中失败。 这将需要一些额外的时间来闪烁,并且可以在过程完全稳定后禁用。

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

    Tamas,

    需要考虑的其他事项:

    1)在失败的情况下,是否使用CCS或UniFlash而不是脚本成功?

    2)如果防区已锁定,请先解锁防区。

    3)在擦除/编程过程中,确保电压线处于正确的范围内。

    4)尝试以下步骤:

    请先尝试连接两个内核。

    然后对两个内核进行调试重置,以便通过GEL文件完成安全初始化。

    然后在两个内核上执行擦除。

    然后尝试加载。

    尝试在两个步骤之间添加一些延迟,以查看是否有帮助。

    5)另请查看此帖子: https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/534630/1964695#pi316717=1</s>53.463万 196.4695万31.6717万 

    谢谢,此致,
    Vamsi

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

    感谢您的提示! 它们使用隔离电源。 这不可能是一个问题。 同时,我还收到了一些主板的问题,但是我无法在我的计算机上重现该问题,除非我使用虚拟PC (在我的计算机上)执行更新。

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

    1)使用CCS和UniFlash,更新总是成功的。 这是我们当前应用的解决方法。
    2)没有锁定的防区。
    3)电压线似乎处于正确的范围内。
    4)我尝试过您的更新顺序,但这非常缺乏。 在我的计算机上安装的虚拟PC上,我不时遇到问题,但使用您推荐的更新顺序,我无法重现该错误。

    感谢您的帮助!

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

    很高兴现在可以使用。

    此致,
    Vamsi