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.

[参考译文] TMS320F28377D:在低温条件下出现意外的 PC 地址和 LCR 行为

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1586427/tms320f28377d-unexpected-pc-address-and-lcr-behavior-at-low-tempture

器件型号: TMS320F28377D

尊敬的专家:

我的客户在进行低温测试时发现 CPU2 出现异常行为。  

  1. 将电路板置于–15 度环境中。 等待~ 10 分钟
  2. 将电路板带到室温、然后为电路板供电。
  3. 有两个 LED 作为两个 CPU 的指示器、CPU1 为 LED1、CPU2 为 LED2。 LED1 闪烁、LED2 未闪烁、这意味着 CPU2 未正常运行。
  4. 在删除 GEL 文件的情况下连接到仿真器。
  5. CPU1 在正常存储器空间中运行、CPU2 的 PC 在外部存储器空间(图 1)上此时、对于 CPU2 PC = 0x11002E、RPC = 0x8F24D、SP=0xFD82(原点= 0x400、大小= 0x3f0)
  6. 我想跟踪 CPU2 分支到意外位置的位置、因此我将 PC 设置为 RPC-2 = 0x8f24b(这是一条 LCR 指令)、并单步执行代码。
  7. 我看到此 LCR 指令执行错误(图 2)、从 OP 代码来看、它应该分支到 0x928f5、这与符号对齐、但是在执行此指令时、CPU2 分支到 0x50 ()
  8. 我使用“移动到“函数来执行此 LCR 指令几次、结果是相同的。  

请您提供有关这种情况发生原因的见解。

请注意、这种情况仅在低温下发生、目前仅在两块电路板(从终端用户返回)上发生。

 

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

    您好 Hang、

    感谢您报告此问题。 为了帮助我们更好地理解和解决问题、我注意到一些缺失的信息会有所帮助:

    图片:
    -你提到了两张图片在你的帖子,但他们似乎失踪了。 请附上这些资料。

    测试环境详细信息:
    1.硬件设置
    -您使用的是什么 EVM/硬件平台?
    -请提供测试过程中使用的完整系统配置/预期
    -开始温度测试前的板初始化程序

    2.温度测试
    -这是–15°华氏度还是摄氏度?
    -您使用什么方法/设备进行温度控制?
    -您是否已验证此问题:
    *仅在低温下发生?
    *可以在室温下重现 (~25°C )?
    *在高温下发生?
    -测试前的温度暴露持续时间(如果此时间缩短到 2 分钟或 5 分钟,问题是否仍然存在?)

    3.测试程序
    -你能提供详细的细分步骤 4 在你的程序?
    -操作的确切顺序是什么?
    -在故障发生之前是否有任何可观察到的症状?

    一旦您提供了这些详细信息、我们将更好地帮助您解决此问题。

    此致、
    Zackary Fleenor

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

    尊敬的 Fleenor:

    添加丢失的图片。

    图 1.

    图 2.

    图 3.

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

    尊敬的 Fleenor:

    添加丢失的图片。

    图 1.

    图 2.

    图 3.

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

    测试环境详细信息:
    1.硬件设置
    -您使用的是什么 EVM/硬件平台? 定制板
    -请提供测试期间使用的完整系统配置/预期-> 电路板正在运行定制应用程序
    -开始温度测试前的板初始化程序->根本没有初始化。 电路板固定在低温试验室中、未进行连接、断电。 我们只在将电路板从暗室中取出后为其供电并连接到电路板

    2.温度测试
    -这是–15°华氏度还是摄氏度? ->是的
    -您使用什么方法/设备进行温度控制? ->冰箱
    -您是否已验证此问题:
    *仅在低温下发生? ->是的、在室温下不会发生这种情况  
    *可以在室温下重现 (~25°C )? ->不,为了澄清更多,这是复制在一个电路板上只是从低温环境,但当我们给电路板供电时,它是在室温下。 您可能会认为电路板很冷、但环境是室温。 为了重现问题、我们需要尽快为电路板供电、否则电路板会升温、无法重现问题。
    *在高温下发生? ->我们只测试了–15 摄氏度
    -测试前的温度暴露持续时间(如果此时间缩短到 2 分钟或 5 分钟,问题是否仍然存在?)  -> 我们没有尝试改变曝光时间。 但如果我们根本不将其暴露在低温下、就不会出现问题。

    3.测试程序
    -您能否提供过程中第 4 步的详细细分?->启动目标配置->点击 CPU1 ->删除 GEL 文件->点击 CPU2 ->删除 GEL 文件->连接 CPU1 ->连接 CPU2  
    -操作的确切顺序是什么? -> 从冰箱取出电路板->为电路板通电->如上所示连接至两个 CPU ->拍照->标记 RPC。 计算 RPC-2 值、在“反汇编“窗口 中输入值->在“反汇编“窗口中找到相应的行、右键单击并移动到(即 LCR)->拍摄图片 2->单击装配步骤进入->拍摄图片 3。  
    -在故障发生之前是否有任何可观察到的症状? ->由于我们只在从冰箱中取出电路板后为其供电,因此在为电路板供电之前没有什么可看的,只要我们给电路板供电,我们就可以从 LED 中立即得知故障发生

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

    您好 Hang、

    感谢您提供图片和其他详细信息。 这些信息有所帮助。

    值得尝试的一件事

    连接到 CPU 后、请使用“Load"->"Load Symbols"“ Symbols"函“函数“数、然后继续。

    自定义应用在上电时完成了哪些设置/配置步骤?

    代码是否已加载到闪存并设置为在上电时从闪存引导?

    代码加载是在制冷过程之前还是之后发生?

    如果改为通过 JTAG 连接并直接从 RAM 加载/执行代码、问题是否仍然存在?

    此致、

    Zackary Fleenor

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

    我们已经加载的符号在早期测试,对不起丢失了它在 dessciprtino,但你可以看到在图片中的符号存在。

    自定义应用在上电时完成了哪些设置/配置步骤? ->您在寻找什么具体的项目吗? 由于这是实际应用、系统/外设上有很多配置。  

    代码是否已加载到闪存并设置为在上电时从闪存引导? 是的,代码在制冷前闪存到设备,它一直在那里。

    如果改为通过 JTAG 连接并直接从 RAM 加载/执行代码、问题是否仍然存在? 我们没有测试这个、但我们尝试了重置并重新启动器件、这样就不会发生问题。 它仅在开机时出现。

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

    添加更多更新。

    1.我今天使用定制电路板上的示例代码进行了测试。 但我无法重现双 LED 示例的问题。

    2、如上所述,从冰箱取出电路板后,电路板处于某种“错误状态“。 在此状态下、CPU 似乎错误地执行指令。 如上所述、LCR 指令是无异常分支位置。 我使用“移动到“函数尝试了更多指令、例如、我移动到 main 的开头、并执行第一条指令、即 MOVL、但 CPU 的行为类似于分支、如视频中所示

    e2e.ti.com/.../IMG_5F00_5624.mov

    3.我尝试的下一个方法是将双示例代码加载到错误状态的板上(请注意,这与#1 不同,在将板放入冰箱之前加载示例代码)我发现两个 CPU 的 LED 闪烁,这意味着 CPU1 和 CPU2 正确执行指令,然而,闪烁速度比正常慢得多。 接下来、我检查了时钟寄存器、似乎时钟异常(例如,PLL 未锁定)

    4.我试图找到 CPU2 意外行为发生的地方,我的方法是在 CPU2 代码中添加一个全局变量,这个变量 x 在代码的不同阶段被分配到不同的值,比如一个检查点。 当电路板从冰箱中取出时、我读取了这个变量 x 的值。 事实证明、代码在运行到特定的 ISR 之前会正确执行  

      

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

    嗨、Zack、

    同时、您能否帮助确认下图中的 BOOTSTS 寄存器是否由 CPU2 引导 ROM 设置、而用户无需设置它? 非常感谢您提供有关在何处设置此寄存器(例如哪种引导模式/哪一步)的更多信息!

      

    最后、我们未在测试的电路板上看到 IPC 问题!

    他们声称之前存在 IPC 问题、但后来我发现这不是 IPC 问题、我只是根据他们的需要获取反馈。 这个 IPC 问题可能与我们现在看到的问题无关

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

    您好 Hang、

    有关更多详细信息、请参阅 以下文档的 2.1.4 CPU2 引导流程一节:

    https://www.ti.com/lit/ug/sprujh3/sprujh3.pdf

    请注意以下两个 E2E 主题中描述的详细信息。

     TMS320F28379D:到 CPU1 的 CPU2 引导状态信号 (IPCBOOTSTS) 

     F2837xD 从闪存引导两个 CPU 

    如 Michael Rindsig 所述、

    我的公司不能为仿真器/非仿真器模式创建不同的版本、因此我们最终在 Core2 主代码的开头添加了这一行(就在 InitSysCtrl () 之后):

    IpcRegs.IPCBOOTSTS = C2_BootROM_BOOTSTS_SYSTEM_READY;

    这将防止仿真模式下出现失速、在非仿真模式下、此时该寄存器的值已设置为 C2_BootROM_BOOTSTS_C2TOC1_BOOT_CMD_ACK、并且不再使用该寄存器。“

    我将遵循这一建议、并将 IPCBOOTSTS 的手动配置移至 InitSysCtrl() 函数之后、然后再移至剩余的 Init 函数之前。

    此致、

    Zackary Fleenor