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.

[参考译文] TMS320F28388D:上电后 CPU1卡在 ITRAP 中

Guru**** 2544130 points
Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1266025/tms320f28388d-cpu1-gets-stuck-in-itrap-after-power-on

器件型号:TMS320F28388D
主题中讨论的其他器件: C2000WARE

去年、我们收到了有关 CPU1启动故障的反馈、这里讨论了两个主题

 

TMS320F28388D:CPU1在上电后卡滞

TMS320F28388D:RE:TMS320F28388D:CPU1在上电后卡滞

 

最近、我们的其他产品也遇到了同样的问题、在上电启动过程中、约5%的芯片让 CPU1跳转至 ITRAP。

 

我使用有故障的设备进行了测试、出现了以下现象:

 

1.如果仅运行 CPU1,则没有问题。 如果 CPU1引导 CPU2、即使 CPU2中没有应用程序、CPU1也有进入 ITRAP 的可能性

 

2.我用 TI 的常规方法进行上述的测试 内存配置和代码来自 C2000ware、CPU1也会进入 ITRAP。

 

3.我已经测试了 CPU1引导 CPU2和 CPU1进入 ITRAP 之间的时间间隔、大概是37us。 我用三个异常的器件运行了测试、时间间隔几乎相同。 我已经绘制了两张图表来说明应用程序的正常运行和有问题运行、以便进一步讨论。

 

我们有以下判断和问题:

 

1、由于 TI 的程序经常会出现问题、问题集中在少数特定的芯片上、所以我们往往认为这是硬件或者芯片的问题。 但根据我们之前的测试、如果我随机地在程序中添加几条 NOP 语句、以便略微更改闪存空间的分配和程序执行时序、问题就会消失、而随着我添加更多 NOP、问题也将再次出现。 这使我们非常困惑、为什么软件调整会影响问题的再次发生。

 

2. CPU1启动 CPU2与出现问题之间的时间间隔是37us。 我们是否有办法确定整个系统、尤其是 CPU2目前正在执行的操作? 您能给我们一些提示吗、或者我能从 TRM 中查找相关信息吗?

 

3.我的判断是在 CPU2启动期间、CPU1对闪存的访问将在某个时刻受到影响、导致 CPU1跳转到 ITRAP。 因此、我尝试通过在 CPU1引导 CPU2后让 CPU1跳转到 RAM 以执行大约10ms 的循环来避免这种"问题时刻"。 添加这种机制后、CPU1不再卡在 ITRAP 上。

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

    您好!

    感谢您提供有关该问题和观察结果的详细信息。  是否能够在连接了调试器(CCS)的情况下产生此故障条件?  

    在图中、您有 CPU2引导步骤。 那是什么? CPU2是否在跳转到 main 之前运行 cinit 部分? 是否有可能与我们共享该代码?

    此外、是否有方法在发生 ITRAP 后检查闪存内的 CPU1代码完整性?  

    此致、

    维维克·辛格

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

    您好、Vivek、

    很高兴 收到您的回复和问题:

    是否能够在连接了调试器(CCS)的情况下产生此故障条件?

    我使用了以下步骤、但未重现问题:

     1) 1)使用 CCS 仅连接 CPU1;

     2)加载 CPU1程序;

     3) 3)运行 CPU1。 如果问题不存在、请复位 CPU1、然后重新启动程序并再次运行

    上述步骤是否正确? 是否可以在不 加载 CPU1程序的情况下重新启动 CPU1?

     

    在图中、您有 CPU2引导步骤。 那是什么? CPU2是否在跳转到 main 之前运行 cinit 部分? 是否有可能与我们共享该代码?

    是的、"CPU2 Boot"表示 CPU2在运行 main 之前执行的程序。

    此程序是否会受到我的配置或应用程序的影响? 因为我也可以重现例程问题、如果需要、我可以向您发送我使用的例程。

     

    此外、是否有方法在发生 ITRAP 后检查闪存内的 CPU1代码完整性?  

    发生 ITRAP 后、我使用调试器连接器件、以检查发生获取异常的闪存区域以及内容是否完好无损。 是否有其他方法可以检查"代码完整性"?

    谢谢。此致、

    肖恩

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

    您好!

      这是我在 TRM 中找到的 CPU2引导流程

       

       

       

      之前、我在 CPU1和 CPU1中发现了我调用"Device_bootCPU2 (bootmode_boot_to_flash_SECTOR0)"时间之间的典型时间间隔为37微秒。 您能帮助我分析启动37微秒后、CPU2可能处于哪个引导流程步骤吗?

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

    您好!

    是否有办法在不 加载 CPU1程序的情况下重新启动 CPU1?

    我不理解这个问题。 由于代码位于闪存中、您不必每次都加载程序。 您只需加载符号然后运行即可。

    [报价用户 id="467863" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1266025/tms320f28388d-cpu1-gets-stuck-in-itrap-after-power-on/4794662 #4794662"]

    此程序是否会受到我的配置或应用程序的影响? 因为我也可以重现例程问题、如果需要、我可以向您发送我使用的例程。

     

    [/报价]

    如果您有重现此问题的例程、那就太好了。 您是否能够在 TI 提供的 controlCARD 或 LaunchPad 上运行该例程? 如果是、那么我希望您发送给我这些例程。

    发生 ITRAP 后,我使用调试器连接设备以检查发生获取异常的闪存区域,以及内容是否完好无损。 是否有其他方法检查"代码完整性"?

    好的。

    "Device_bootCPU2 (bootmode_boot_to_flash_SECTOR0")"在 CPU1和 CPU1中卡住。 您能否帮助我分析启动37微秒后 CPU2可能处于哪个启动流程步骤?

    很难预测 CPU2代码的位置、但通常 CPU2正在等待从 CPU1引导 CMD、一旦获得引导命令、就会跳转到应用程序。 我猜可能是 CPU2此时将运行 cinit 代码。 CPU2是否可能损坏 CPU1代码/数据空间?  

    此致、

    维维克·辛格

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

    1. 我重复通过 CCS 重新启动 CPU1、同时使 CPU2保持断开连接状态、但发现 CPU2似乎没有通过重新启动 CPU1重新启动。 我在这里的操作有什么问题吗?

    2. 我会尝试查找 controlCARD,稍后再与您联系。

    3. 我想在 CPU1异常的时候找出 CPU2正在执行的语句. 您是否有推荐的方法? 例如、当 CPU1进入 ITRAP 时、CPU2被命令停止运行、或此时读取 CPU2的程序计数器。

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

    您好!

    1.  我在 CPU2断开连接的同时通过 CCS 重复重新启动 CPU1、但发现 CPU2似乎没有通过重新启动 CPU1重新启动。 我在这里的操作有什么问题吗?

    重新启动 CPU1时,是否复位 CPU1,然后重新启动或只是重新启动? 如果只是重新启动、则可能会导致问题。 您需要重置然后重新启动。

    3.  我想在 CPU1异常时找到 CPU2正在执行的语句。 您是否有推荐的方法? 例如、当 CPU1进入 ITRAP 时、CPU2被命令停止运行、或此时读取 CPU2的程序计数器。

    我想不出一种 直接的方法来做到这一点。 如果  出现这种情况时、您已通过 CCS 连接到 CPU1和 CPU2、则我们可能有某种方法可以执行此操作、我需要咨询 CCS 团队。

    此致、

    维维克·辛格

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

    正如您建议的、我进行了以下测试:

    1.将程序加载到有故障的 DSP 中、然后通过上电复位来复位 DSP 共20次、其中 CPU1进入 ITRAP 共11次

    使用 CCS 和加载符号连接 CPU1和 CPU2

    3.然后按以下顺序继续:

      a.复位 CPU1和2

      b.重新启动 CPU1

      c. Resume CPU2、然后 Resume CPU1

      d.观察现象、暂停 CPU1&2

      e.重复步骤3.a 至3.d

    4.我执行了步骤3中的操作30次,没有例外。

    5.然后我调整3.c 的顺序、首先恢复 CPU1、然后恢复 CPU2、然后我再次重复步骤3 30次、仍然没有例外。

     

    上述操作是否有任何问题?

    通过 CCS 执行的复位操作与上电复位之间是否有区别?

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

    谢谢。 你的步骤对我来说是可以的。

    通过 CCS 执行的复位操作与上电复位之间是否有任何差异?

    是的、存在区别。 如果 CCS RESET、则设计内部的全逻辑不会复位、因为上电复位将复位设计中的每个逻辑。 还可以看到、在最初的帖子中、您提到在代码中插入很少的 NOP 可以使其通过或失败、这意味着计时也会对其产生影响、由于您在 CCS 案例中手动启动 CPU1和 CPU2、 它可能未达到该时序条件。 因此、您只需要在这种情况下断开 CPU2。  

    您还查看了 VDD 和 VDDIO、以确保发生故障时这些引脚上没有骤降。  

    也是在发生错误后、您是否可以连接到 CCS 并检查 NMISHDFLG 寄存器值?

    此致、

    维维克·辛格

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

    您好、Vivek、

    感谢您的答复。

    1. 我尝试过以下方式:  

    1. 仅连接 CPU1并使 CPU2保持断开状态
    2. 复位 CPU
    3. 重新启动 CPU1
    4. 恢复 CPU1
    5. 删除 CPU2的 GEL 文件并连接 CPU2以检查其状态

    然后我发现 CPU2完全未重新启动。 我的上述步骤是否有任何问题?

    2. 我需要硬件部门的同事帮忙检查 VDD 和 VDDIO。 我稍后会回复。

    3. 当设备处于启动失败状态时,我检查了两个 CPU 的 NMISHDFLG 寄存器

    CPU1

    CPU2

    此致、

    肖恩

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

    您能为 CPU1尝试以下操作吗

    • 复位 CPU1
    • 在 CCS 内存浏览器中、在地址0xD01处写入0xA500
    • 点击"Run"

    看看这是否有任何区别。

    此致、

    维维克·辛格