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**** 2609955 points
Other Parts Discussed in Thread: UNIFLASH, TMS320F28379D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1043860/tms320f28379d-programm-not-starting-after-power-off-on---flash-problem

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

您好!

我´m JTAG 下载代码。 使用 CCSv7、调试会话正常、程序正常运行。 然后、在我关闭/打开电源后、不会发生任何情况。 看起来闪存不再工作。

两年前、它一直在工作、因为在生产过程中、它们会与我使用 Uniflash 制作的第一个版本(v1)一起闪烁。 现在、对于最新版本(v2)、他们说无法再闪存。 如果它们首先刷写旧版本(v1)、然后再刷写 v2 over v1、则可以正常工作。 那么它运行正常。 但是、当仅刷写 v2时、它不起作用。 (Uniflash 项目是相同的、没有任何变化)

因此、如果我尝试刷写已刷写的控制器、它可以正常工作、但刷写空白控制器、它无法正常工作。 正如我在开始时所说的、当闪存到空白控制器中时、我可以使用 CCS 对进行分解。 但在循环通电后、其未运行。

有什么变化吗? 出什么问题了?  

请帮助。

此致

Willi Konrad

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

    您好、Willi、

    1)

    请查看 以下常见问题解答并相应地更新您的工具(如果尚未更新):  

    [常见问题解答]  适用于 TMS320F2837x 和 TMS320F2807x 器件的产品变更通知(PCN) 20180523001.1和 PCN 20200115000.2:  

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/729543?-FAQ-Product-Change-Notice-PCN-20180523001-1-for-TMS320F2837x-and-TMS320F2807x-devices

    2)  

    当您尝试检查独立执行(在下电上电后)时、如何配置引导模式引脚?  希望它们配置为闪存启动。

    3)

    以下是可帮助调试此功能的另一个常见问题解答:  

    [常见问题解答]闪存-如何将应用程序从 RAM 配置修改为闪存配置?:  

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674 

    请告诉我们这些常见问题解答是否对解决问题没有帮助。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    感谢您提供这些文档。 我将 Uniflash 更新为 V6.4,将 CCS 更新为 V10.4。 引导模式引脚设置为闪存引导。  

    我n´t 了常见问题解答、并尝试了所有建议、但在下电上电后仍然可以正常工作。  

    这是我的属性、例如 CPU1:

    预定义符号 CPU1:

    链接器标志 CPU1:

    链接器路径 CPU1:

    我的 cmd 文件可能有问题

    2837x_flash_Ink CPU1.cmd:


    存储器

    第0页:/*程序内存*/
    /*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
    /* begin 用于"引导至闪存"引导加载程序模式*/

    开始:origin = 0x080000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMLS0:origin = 0x008000、length = 0x000800
    RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000,length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800
    RAMLS4:origin = 0x00A000,length = 0x000800
    RAMGS14:origin = 0x01A000,length = 0x001000 //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
    RAMGS15:origin = 0x01B000,length = 0x001000 //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
    复位:origin = 0x3FFFC0,length = 0x000002

    /*闪存扇区*/
    FLASHA:origin = 0x080002,length = 0x001FFE /*片上闪存*/
    FLASHB:origin = 0x082000、length = 0x002000 //片上闪存*
    FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
    FLASHD:origin = 0x086000、length = 0x002000 //片上闪存*/
    FLASHE:origin = 0x088000、length = 0x008000 //片上闪存*/
    FLASHF:origin = 0x090000,length = 0x008000 //片上闪存*
    FLASHG:origin = 0x098000、length = 0x008000 //片上闪存*/
    FLASHH:origin = 0x0A0000,length = 0x008000 //片上闪存*/
    FLASHI:origin = 0x0A8000、length = 0x008000 //片上闪存*/
    FLASHJ:origin = 0x0B0000,length = 0x008000 //片上闪存*/
    FLASHK:origin = 0x0B8000、length = 0x002000 //片上闪存*/
    FLASHL:origin = 0x0BA000、length = 0x002000 //片上闪存*/
    FLASHM:origin = 0x0BC000、length = 0x002000 //片上闪存*/
    FLASHN:origin = 0x0BE000、length = 0x002000 //片上闪存*/

    第1页:/*数据存储器*/
    /*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/

    BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
    RAMD1:origin = 0x00B800,length = 0x000800

    RAMLS5:origin = 0x00A800,length = 0x000800

    RAMGS0:origin = 0x00C000、length = 0x001000
    RAMGS1:origin = 0x00D000、length = 0x001000
    RAMGS2:origin = 0x00E000、length = 0x001000
    RAMGS3:origin = 0x00F000、length = 0x001000
    RAMGS4:origin = 0x010000,length = 0x001000
    RAMGS5:origin = 0x011000,length = 0x001000
    RAMGS6:origin = 0x012000,length = 0x001000
    RAMGS7:origin = 0x013000,length = 0x001000
    RAMGS8:origin = 0x014000,length = 0x001000
    RAMGS9:origin = 0x015000,length = 0x001000
    RAMGS10:origin = 0x016000,length = 0x001000
    RAMGS11:origin = 0x017000,length = 0x001000
    RAMGS12:origin = 0x018000,length = 0x001000 //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
    RAMGS13:origin = 0x019000,length = 0x001000 //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *

    CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400
    CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400

    部分

    /*分配计划领域:*/
    .cinit:> FLASHB PAGE = 0,ALIGN (4)
    .pinit:> FLASHB,PAGE = 0,ALIGN (4)
    .text:>> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0,ALIG(4)
    codestart:> begin page = 0,align (4)

    /*分配未初始化的数据段:*/
    .stack:>RAMM1 page = 1.
    .ebss:>> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1.
    .esysmem:>RAMGS0 PAGE = 1.

    /*初始化段进入闪存*/
    econst:>> FLASHF | FLASHG | FLASHH PAGE = 0,ALIGN (4)
    .switch:> FLASHB PAGE = 0,ALIGN (4)

    .reset:> reset,page = 0,type = DSECT //未使用,*/

    filter_RegsFile:> RAMGS0,PAGE = 1

    SHARERAMGS0:> RAMGS0,PAGE = 1
    SHARERAMGS1:>RAMGS1,PAGE = 1.
    RAMS0:>RAMGS0,PAGE = 1
    ramgs1:>RAMGS1,page = 1.

    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}负载= FLASHD,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4)
    其他
    ramfuncs:load = FLASHD,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4)
    #endif
    #endif

    /*使用 IPC API 驱动程序时需要以下部分定义*/
    组:> CPU1TOCPU2RAM,PAGE = 1

    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX

    组:> CPU2TOCPU1RAM,PAGE = 1

    GETBUFFER:TYPE = DSECT
    GETWRITEIDX:TYPE = DSECT
    PUTREADIDX:TYPE = DSECT

    /*以下部分定义适用于 SDFM 示例*/
    /* Filter1_RegsFile:>RAMGS1,PAGE = 1,fill=0x1111
    Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
    Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
    Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
    Differit_RegsFile:>RAMGS5,page = 1,fill=0x333333*/

    /*
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

    此链接器文件位于"cmd"子文件夹中:

    我不知道链接器文件的正确之处。 n´t 有什么问题、但我不知道什么。

    可以麻烦你看一下吗?

    如果您需要更多详细信息以及 CPU2、请告诉我。

    谢谢你。

    此致

    Willi Konrad

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

    Willi、

    预定义符号闪存应为_FLASH。

    2.请替换链接器 cmd to align (8)中的所有 align (4)。

    3.要对新的未编程器件进行编程、请使用等待引导。   

      一旦您进行编程并希望独立执行、请使用闪存启动。

      以下摘录自此常见问题解答的代码段: e2e.ti.com/.../faq-how-can-we-improve-the-flash-tool-performance

    4.您说有人无法再编程 -编程时出现了什么错误? 请提供更多详细信息。

    5.请检查 XRSn 在无法独立运行时是否有切换-可能是由于看门狗/ECC 错误而复位。

    请注意:我将不在办公室-我的同事将跟踪此帖子。  我们的回复可能会有一些延迟。   

    谢谢、此致、
    Vamsi

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

    您好!

    因此我测试了1-3号、但遗憾的是它没有帮助。

    第4点:编程/闪存工作正常。 它们没有错误。 但在下电上电后、程序未启动。

    第5点:仍然必须测试这个。 我将在获得结果后进行更新。

    此致

    Willi Konrad

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

    您好、Willi、  

    感谢您让我们知道如何实施某些建议、如果建议5不起作用、请告知我们。  

    谢谢、  

    Anu

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

    尊敬的 Anu:

    我今天测试了 XRS、它始终处于高电平(平均2.6V、最小2.3V、最大3V -它的噪声介于2.3V 和3V 之间)。  

    我在调试模式下使用调试探针 XDS110进行了技术测试、并使用 CCS 下载了代码。 代码正在器件上运行。 当我用一个按钮来触发 XRS 时、程序不再运行。

    在我看来、在将代码下载到 RAM 时、它可以正常工作、但闪存中没有任何内容、因此在重启后、程序不会运行。

    此致

    威利

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

    您好、Willi、  

    感谢您提供更新。 我将在几天内再次与您联系、并进行后续步骤。  

    Anu

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

    Willi、

    看起来这不是编程问题、因为编程时未发生错误。  这是一个与执行相关的调试。

    a)您是否调用 memcpy()将 ramfuncs 内容从闪存复制到 RAM?  您是否进行了检查以确保它得到执行?

    b)请查看这是否有帮助: 在 F28x_codestartbranch.asm 中禁用看门狗(WD_DISABLE .set 0; 在    该 asm 文件中应替换为 WD_DISABLE .set 1)。  这有助于在到达 main()之前避免看门狗复位。  如果应用程序中有很多全局变量、在到达 main 之前、cinit 例程可能需要更多的时间来初始化所有全局变量。  在此期间、看门狗可能会过期、因此建议将其禁用。  您可以根据应用程序的需要在 main()中再次启用它。

    c)我在 项目快照中看不到 F28x_codestartbranch.asm 文件。  请确保您的应用中包含 F28x_codestartbranch.asm 文件、并且 codestart 被映射到链接器 cmd 文件中的闪存入口点位置(通常在 TI 提供的链接器 CMD 文件中定义为 begin)。

    d)快照中的入口点不清零: 请确保在项目的链接器选项中添加了 code_start (--entry_point=code_start)作为入口点。    

        Project build settings -> Build -> C2000 Linker -> Advanced options -> Symbol Management ->-entry_point: code_start

    谢谢、此致、
    Vamsi

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

    Vamsi 您好、感谢您的建议。

    a) memcpy()将在两个 CPU 中执行

     CPU1:  

    CPU2:  

     

     

     

    b)在文件"F2837xD_CodeStartBranch.asm"中,对于两个 CPU,我禁用了看门狗:

      稍后在主系统中调用 initr()以再次启用看门狗。 我希望这是正确的。 n´t 这是正确的序列、则在对器件进行粉末循环后它不起作用。

     

     

     

    c)您是指 "F2837xD_CodeStartBranch.asm" 吗?  它位于 CPU1的 hal 目录中:

    对于此处的 CPU2:

    [引用 userid="16728" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1043860/tms320f28379d-programm-not-starting-after-power-off-on---flash-problem/3886865 #3886865"]并且 codestart 映射到链接器 cmd 文件中的闪存入口点位置(通常在 TI 提供的链接器 CMD 文件中定义为 begin)。[/quot]

    n´t 您的确切含义。 闪存入口点位置是否为0x080000? 那么就是这样。

     在 CPU1的 cmd 文件"2837x_flash_lnk_cpu1.cmd"中、begin 为:

       

     闪存扇区从此处开始:

     

    对于"2837xD_FLASH_lnk_CPU2.cmd"中的 CPU2、开始为:

     

    和闪存扇区:

     

     

    如何检查是否使用了正确的 cmd 文件? 也许程序加载了错误/另一个 cmd 文件?

     

     

    d) 我为 CPU1和 CPU2添加了 CODE_START、然后出现以下警告:

     

       但同样、当启动 onlnie 调试其工作时、但在对器件执行 powercycle 后、程序不再运行。

    如果您有我可以尝试的更多想法/建议、或者您需要更多信息、请告诉我。

    谢谢你

    此致

    威利

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

    Willi、  

    应该只有1个或2个链接器命令文件链接到您的项目-也许 nonbios 链接器命令文件是第二个文件。 如果有多个具有重叠存储器、则会引发错误。  

    您能否看到 codestart 被放置在项目的.map 文件中的哪个位置? 开始位置在链接器命令文件中看起来正确、.map 文件可在 CPU1_FLASH 和 CPU2_FLASH 文件夹中找到。  

    谢谢、

    Anu

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

    尊敬的 Anu:

    我在项目中看不到任何.map 文件:  

    这是否是问题,地图不会生成?

    谢谢、此致

    威利

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

    尊敬的 Anu:

    现在我找到了它。 映射文件的条目为空、现在我编写了一个文件以创建:

    映射文件的 CodeStart 显示:

    下面进一步介绍:

    此致

    威利

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

    Willi、  

    感谢您共享 CPU1的映射文件、CODESTART 是否位于 CPU2的同一位置?

    您是否可以在代码执行中添加某种类型的 GPIO 切换、以查看程序正在达到多远? 由于我们正在尝试缩小执行问题的范围、因此看到某种切换以了解执行的距离会有所帮助。  

    谢谢、  

    Anu

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

    尊敬的 Anu:

    对 CPU2而言、它是相同的:

    下面进一步介绍:

     

     

     

    我有一个运行 LED、它在 CPU2运行时每秒切换一次。 从调试探针开始时、LED 会正常切换。 在对器件进行粉末 处理后、LED 不再切换。  

    对于 CPU1、我进行了测试并添加了 LED 切换:

    当我使用调试探针连接时、LED 会亮起和熄灭。 经过粉末循环 CPU1后、LED 不亮。 因此、代码甚至不会启动。

    让我知道我是否可以测试其他东西。

    此致

    威利

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

    Willi、  

    让我与一些团队成员核实一下、几天后我会再与您联系。  

    谢谢、  

    Anu

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

    Willi、  

    在器件以独立模式运行时、您能否尝试连接调试探针? 您可以在不附加 GEL 文件的情况下设置目标配置文件、以便在 CCS 中启动调试会话不会复位电路板、并使用该文件连接到器件。  

    尝试以下步骤:  

    1.对器件进行下电上电并确保引导模式为闪存引导

    2.启动不带 GEL 文件的目标配置文件

    3.加载您刷新的映像的符号-它应该与您用于编写映像的.out 文件相同。  

    您应该能够看到器件在程序执行中卡在何处、这应该有助于您进一步调试。  

    谢谢、  

    Anu

    注-我将在11月16日之前不在办公室、我将回复您当时发布的任何回复。  

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

    尊敬的 Anu:

    感谢您的建议。 我试过它,但我不能实现它。 我不想介绍如何执行步骤2和3。

    您能否向我解释一下如何在不使用 GEL 文件的情况下启动目标配置文件、以及如何加载符号以仅连接到器件。

    非常感谢

    此致

    威利  

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

    Willi、

    请期待2021年11月17日 Anu 的回复。

    谢谢、此致、

    Vamsi

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

    Willi、

    要在不使用 GEL 文件的情况下配置目标配置、您可以从 C2000Ware - TMS320F28379D.ccxml 中的目标配置文件开始、该文件位于 C200Ware_xx > device_support > f2837xd > common > cmd。 请尝试以下操作:

    1.将其导入 CCS 并点击 file。 单击 Target Configuration。  

    2.在下拉结构中单击"C28xx_CPU1"、当文本弹出时、右键单击"Bypass (旁路)"。 您可以对 CPU2执行相同的操作。  

    3.启动此目标配置文件。 连接到 CPU1和 CPU2。  

    4.您可以通过单击目标配置文件中的 CPU 并转至 Run > Load > Load Symbols 来加载符号。 需要选择写入闪存的相同映像。  

    谢谢、  

    Anu

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

    尊敬的 Anu:

    我的 CCS10在执行此步骤并连接到目标时的表现。 以下是我的步骤、可能是我做了一些错误的事情:

    我将一个新的目标文件复制到了我的项目中、并且首先要在这里将调试探针从 XDS100v2更改为 XDS110

       -->  

     

    这位于旁路的 CPU1和 CPU2之后:

    要启动它、我右键单击目标文件并选择"Debug As (调试为)"。 我希望这是正确的:

     

    然后将显示此消息:

     

    我按"是"继续。 然后、它看起来是这样的:

     

    然后、我为 CPU1选择了输出文件:

     

    没有发生任何事情。 然后我按下 "Connect Target":

    之后、CCS10崩溃。   

    e2e.ti.com/.../hs_5F00_err_5F00_5584.log

    如果您需要更多信息、请告诉我。

    此致

    威利

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

    Willi、  

    是否可以尝试取消单击"Bypass (绕过)"、然后仅删除每个内核的目标配置文件中 GEL 文件的路径? 这应将 CPU 保留在目标配置文件中。 启动目标配置文件后、您应该能够连接到 CPU。 您可以通过右键单击目标配置文件并选择"Launch Selected Configuration"来启动该文件。  您的 CCS 版本>=10.3是正确的? 如果是、您不需要执行任何其他操作。 如果少于10.3,您可以尝试此帖子中提到的步骤(请参阅 Nicholas 的最后答复): https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/995686/tms320f28388d-unable-to-attach-to-running-controlcard-using-xds110-and-code-composer-studio-10-1 

    谢谢、  

    Anu

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

    Anu、您好、谢谢、现在我可以连接到目标。 (CCS 版本为10.4)

    但当我按下 PAUSE 时、我认为没有代码(0x3FEFC6 (未定义符号粗体))

    我在目标配置中清除了 GEL 路径、但当我保存它时、"../targetConfigs"将显示为默认值:

     

    也是针对 CPU2执行此操作的。

    然后、我启动 CPU1的目标文件:

    加载了符号:

     

    并按下"CONNECT to target:

    有时、在很短的一段时间内、当我第一次启动它时、文本显示"已暂停-目标上发生重置"。 但仅适用于2节电池。 在这里、我很幸运地在屏幕截图中看到它、然后它在按下暂停时仅显示"暂停"。

     

    更新:我按下"Restart"按钮、然后出现代码:

     

    我不知道这是不是计划的、但这是 CPU1在重启后直接提供的

     

    来自 CPU2:

    然后 CPU2卡在那里、即使我按下"Run"。

    此致

    威利

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

    Willi、  

    感谢您提供详细的响应。 如果程序已刷写到器件中、则 CPU 不应复位。 在下电上电之前、您是否将映像写入闪存? 您能否尝试以下步骤:  

    1. 使用 Uniflash 将映像写入闪存、尝试运行映像。 如果无法从 Uniflash 运行映像、请通过 CCS 下载映像并断开目标配置文件的连接-此配置文件应包含 GEL 文件。 重点是下载并运行映像。  

    2.在 CCS 中启动不加载 GEL 文件的目标配置文件-您可以通过右键单击 Debug 窗口中目标配置文件中的 CPU1和 CPU2行来确认 GEL 文件是否不存在、 转到 GEL 文件视图、查看是否加载了 GEL 文件。 如果它们在那里、您可以将其删除。  

    3.连接到目标- CPU1、然后连接 CPU2 -在加载符号之前执行此操作应避免重新启动  

    4.加载符号  

    另请尝试以下操作:

    1. 使用 Uniflash 将映像写入闪存、尝试运行映像。 如果无法从 Uniflash 运行映像、请通过 CCS 下载映像并断开目标配置文件的连接-此配置文件应包含 GEL 文件。 重点是下载并运行映像。  

    2.对器件进行下电上电

    3.   CCS 中启动目标配置文件而不加载 GEL 文件-一种确认 GEL 文件是否不存在的方法是右键单击 Debug 窗口中目标配置文件中的 CPU1和 CPU2行、 转到 GEL 文件视图、查看是否加载了 GEL 文件。  如果它们在那里、您可以将其删除。  

    4.连接到目标- CPU1、然后连接 CPU2

    5.加载符号  

    从屏幕截图中、CPU1看起来没有执行 main、CPU2甚至无法执行 main。 CPU1的器件初始化过程是什么?如何引导 CPU2?

    谢谢、  

    Anu

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

    尊敬的 Anu:

    场景1:

     1) 1)无法从 Uniflash 开始。 通过启动调试会话下载 CCS 映像。 代码正在运行、GEL 文件可用:

     

    然后、我断开与目标的连接:

    2) 2)我从 targetconfiguration 中删除 GEL 文件(自动插入..\targetConfigs):

    之后、我启动 targetConfig:

    其中没有 GEL 文件:

     

    3) 3) 我连接到目标:

    4) 4)加载符号:

    在不按 RUN 的情况下、CPU1现已位于此处:

    CPU2位于此处:

    按下 RUN 后 、CPU2正在工作、但 CPU1在 while 循环中卡住:

     

     

     第2次:

    1)与场景1类似。 GEL 文件返回 targetConfig 并启动调试会话以加载映像文件。 代码正在运行

    2) 2)对设备进行骑行

    3)与场景1类似。 删除 GEL 文件并手动启动 targetConfig。 视图中没有 GEL 文件

    4)与场景1类似。 连接到 CPU1和 CPU2

    5) 5)加载符号。 在场景1中、我可以看到代码暂停的位置。 但在这里、我看不到任何程序或断点:

    按下重新启动按钮后:  

    第一次尝试时、代码正常工作、运行 LED 正确切换:

    当我第二次尝试时、CPU2现在卡在这里:

     

     

    我不知道 CPU1的初始化过程是如何的、因此它始终以 CPU1优先的方式启动。 CPU2将使用命令 IPCBootCPU2从主代码中的 CPU1启动:

    稍后、CPU1将在 while 循环中等待、直到 CPU2引导:

     

     

    此致

    威利

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

    Willi、  

    感谢您提供此信息。 在对器件进行粉末循环时、它看起来像是在它看起来正常工作后的第一次运行、但由于 CPU2在下一次重新启动时卡住、一件值得检查的事情是、CPU2执行期间是否完全覆盖_c_int00例程、因为该分支没有执行。 此外、我还查看了在 powercycle 之后和重新启动之前 CPU1和 CPU2的地址、看起来 CPU2处于空闲状态(请参阅 F2837xD TRM 的第4.10.2节)、我不确定 CPU1在哪里、 您是否在 CPU1程序的映射文件中的任何位置看到该位置?

    谢谢、

    Anu

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

    尊敬的 Anu:

    CPU1的映射文件中的否不是这样的地址。

    但我在 TRM 中找到了它( 第4.10.3.1节 CPU1引导 ROM 存储器映射)

    必须处于引导状态、因为 CPU1的地址为3FEFC6。 这是有道理的、因为当我对器件进行粉末循环并再次启动时、LED 不亮。  

    此外、当我在一个 powercycle 后通过 targetConfiguration 连接到器件时、CPU1在按下"Restart"后才会启动。 那么它的工作(有时)正常。 因此、这意味着闪存工作正常、但 CPU1未启动(卡在引导中)。

    那么、我认为我们必须了解、CPU1为何卡在引导中?

    此致

    威利

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

    Willi、  

    您的器件版本 B 吗? 我在 C2000Ware 中查看了 ROM 映像的映射文件(C2000Ware_XX\libraries\boot_rom\f2837C6\RevB\rom_sources\CCS_files\cpu01\Release)、并看到地址0x3FEFxd 位于 Parallel_Boot.obj 中。 您可以在 CCS 中加载引导映像的符号-导航到上述路径、并在询问要加载哪个映像时单击.out 文件。 如果提示您输入源文件、则可以转至 C2000Ware_XX\libraries\boot_rom\f2837xd\RevB\rom_sources\F2837x_bootrom\cpu01-bootrom\source 并加载源文件。  

    谢谢、  

    Anu

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

    尊敬的 Anu:

    1.在哪里可以检查版本? 它是一款采用 f2837d 芯片的定制电路板。 芯片的确切字符串为"TMS320 F2837DZWTT YFC-06AXSQW GI"

    2.引导映像:您是指调试视图中的"加载符号"吗?

    原因我从引导映像.out 文件加载符号、但未发生任何情况、并且无法选择源文件的路径。

    此致

    威利

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

    Willi、  

    您的芯片看起来是版本 C -该版本是使用 https://www.ti.com/lit/er/sprz412l/sprz412l.pdf?ts=1637701249927&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMS320F28377D 的第3节读取的。 使用此处的修订版 B 映像应该可以、我将与引导 ROM 专家进行双击检查。  

    是的、您需要加载符号、您是否在暂停执行之前暂停了执行?

    谢谢、  
    Anu

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

    尊敬的 Anu:

    我没有n´t,抱歉。 那么、我再试一次。 目标配置具有 默认 GEL 文件。 我希望在执行符号加载之前这是正确的:

    然后按"Debug"下载并启动代码:

    完成此操作后 、器件处于暂停模式、我立即加载以下符号:

    路径与您描述的相同:

    在该 CPU1显示"No source available (无源可用)"后:

    当我为 CPU2执行此操作时、将显示以下内容:

    我有什么问题吗?

    此致

    威利

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

    Willi、  

    代码执行在引导 ROM 代码中停止后、需要加载引导 ROM 符号。 这种情况发生在上面的情形2中。  

    [引用 userid="343212" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1043860/tms320f28379d-programm-not-starting-after-power-off-on---flash-problem/3904636 #3904636"]

    5) 5)加载符号。 在场景1中、我可以看到代码暂停的位置。 但在这里、我看不到任何程序或断点:

    [/报价]

    当您处于此状态且执行暂停后、您可以加载引导 ROM 映像的符号、并查看引导 ROM 代码 CPU1中的停止位置。

    谢谢、  

    Anu  

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

    尊敬的 Anu:

    好的、现在它在工作。 我加载了.out 文件并找到了源文件。

    此处是 CPU1的代码所在位置:

     

    在此函数中:

    然后对 CPU2执行相同的操作:

     

    在此函数中:

     

    我希望这有助于确定问题。

    此致

    威利

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

    Willi、  

    我检查了引导流程、看起来 CPU1和 CPU2都首先检查了器件是否设置为闪存引导模式、在确定器件不处于闪存引导模式后、继续卡在它们卡在的位置。 在电路板上电之前、是否确定引导模式选择引脚设置为闪存引导、CPU2设置为闪存引导?

    谢谢、  

    Anu

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

    尊敬的 Anu:

    我已检查 GPIO 的引导模式:

      

    在调试期间、我检查了 GPIO 72和84。 两个 GPIO 都设置为0:

    对于闪存模式、这两个值都应为1、这是正确的吗?

     

    我曾与我们设计电路板的电气工程师交谈。 遗憾的是、在 GPIO 72和 GPIO 84上、我们为 LED 设置输出。

    此外、从客户角度来看、当他们安装旧版本的闪存软件、然后安装新软件时、这种情况很奇怪。

    当他们首先安装新软件时、它不起作用。

    您是否知道这是什么情况、引导模式有其他行为?

    或者如何修改软件以强制从闪存引导、然后将这些 GPIO 用作输出?

      

    谢谢你。

    此致

    威利

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

    Willi、  

    是否有任何其他引脚配置为引导模式选择引脚? 这是通过对用户 OTP 字段进行编程来完成的、并且可以将它们设置为确定引导模式。  

    通常、对于这些引导加载程序、向引导加载程序发送不正确的密钥将强制从闪存引导。

    谢谢、  

    Anu

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

    尊敬的 Anu:

    不、我没有在该方向上更改任何内容来配置引导引脚。 我也不知道怎么做。  

    那么、我现在需要做什么来强制从闪存启动? 在不更改软件和硬件的情况下、这是不可能实现的?

    非常感谢。

    此致

    威利

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

    Willi、

    您需要向器件发送一个不正确的密钥-除0x08AA 以外的任何值-以强制并行引导加载程序退出并引导至闪存。 请参阅 F2837xD TRM 的4.10.4.5、其中详细介绍了并行引导模式、以了解当器件处于此引导模式时如何向器件发送数据。  

    谢谢

    Anu

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

    尊敬的 Anu:

    我知道。 但这意味着我必须更改器件上的软件、这是正确的吗? 当我制作新软件时、我必须为该软件制作新的版本、我认为可能有机会在不更改软件或硬件的情况下修复此问题。  

    我们的器件已经过设计、因此我无法向并行 IO Booloader 的 GPIO 58-65发送密钥。

    因此、我认为我唯一的解决方案是与我们的电气工程师讨论如何重新设计电路板并释放72和84的 GPIO。  

    GPIO 72和84需要高电平信号从闪存引导、这是正确的吗?

    非常感谢

    此致

    威利

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

    Willi、  

    GPIO 72和84需要值1、如下所示:  

    当 GPIO 72和84为1时、引导模式设置为 Get Mode。 由于您不对 OTP 进行编程、因此 Get Mode 将默认为 Flash Boot。  

    我认为还值得刷新旧固件并检查 GPIO 引脚的状态、然后查看新固件是否会导致 GPIO 引脚的状态发生变化。  如果没有 OTP 编程、GPIO 72和84需要为1才能从闪存引导。  

    谢谢

    Anu

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

    尊敬的 Anu:  

    我将检查它并与旧版本进行比较。 我想我必须更改软件或硬件才能将 GPIO72和 GPIO84设置为1。

    非常感谢您的支持! 它非常有用、也帮助我了解如何更好地调试器件。

    此致

    威利

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

    很高兴它帮助了我们! 我将继续并结束本主题、如果您有疑问、请随时开始另一个主题。  

    Anu