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:冷温度 C2000卡在引导 ROM 中

Guru**** 2618835 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/974091/tms320f28379d-cold-temperature-c2000-stuck-in-boot-rom

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

在其中一个热室测试期间、我们在安装了 C2000芯片的定制 PCB 上运行了生产软件(外部时钟为200MHz)。 代码按预期一直运行至-40C。 在达到-40C 时、我们重启电源、代码不再运行。 我相信 F28379D 芯片正卡在引导 ROM 中、因为电路板上还有其他 LED 亮起、指示电源已接通但未切换(表示代码尚未完成引导/初始化且未运行)。 请注意、在执行 CPU 复位并从调试器重新启动后、代码在-40C 下再次运行。 使用相同定制 PCB 的2个单独副本和2个版本的现有代码(一个是单核源代码、另一个是双核源代码、这两个代码均已验证在室温下工作)、可以观察到相同的行为。 F28379D 芯片在-40C 温度下难以从闪存自行引导(正如数据表所说的额定温度)、有什么原因吗?

我们不认为这是时钟问题、因为代码通常会一直运行到-40C。 有什么想法?

编辑:我能够连接到冻结的目标(不需要使用 pun)并从以下.out 文件加载引导 ROM 符号:

"C:\ti\c2000Ware_3_03_00_00\libraries\boot_rom\f2837xd\revB\rom_sources\ccs_files\cpu01\Releases\F2837x_cpu01_bootrom_RevB_Golden_020314.out"

然后将其指向以下源文件夹路径、以便我可以逐步浏览代码、使其在其中挂起:

"C:\ti\c2000Ware_3_03_00_00\libraries\boot_rom\f2837xd\RevB\rom_sources\F2837x_bootrom\cpu01-bootrom\source "

我发现它在 Parallel_Boot.c 中的"while (wait_host_ACK)"行挂起

也许这会提示它为什么不在-40C 下运行? 另请注意、我们的引导引脚 GPIO72和 GPIO84当前处于悬空状态(未连接)、这也许是我们启动到并行 IO 引导模式(我认为我们不需要)的原因、 也许向引导引脚添加上拉电阻器可以解决这个问题、以便我们可以选择引导模式 Get/Flash?

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

    Nigel、

    我的理解是否正确:

    1. 在未连接调试探针的情况下进行下电上电时、PCB 在-40C 下无法正常运行、但
    2. 使用调试探针重置和重新启动时、PCB 在-40C 下确实正常运行

    我建议在断电后检查这些引导状态寄存器、以查看是否存在任何错误或是否检测到错误的引导模式:

    Tommy

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

    是的、没错。

    已运行一些测试、读取 CPU1引导 ROM 状态存储器值(地址:0x0000002C)和 CPU1引导模式地址存储器值(地址:0x00000038)、结果如下:

    1) 1)将试验室冷却至-40C、使用 CCS 调试器闪存代码:

    在运行 main()之前:
    CPU1引导 ROM 状态:0x00000000
    CPU1引导模式地址:0x00000000

    运行 main()后:
    CPU1引导 ROM 状态:0x00000000
    CPU1引导模式地址:0x00000000

    结果:代码正常运行  

    2) 2)在-40°C 时循环通电:

    重新连接调试器(但不恢复)后:
    CPU1引导 ROM 状态:0x00000000
    CPU1引导模式地址:0x00000000

    使用调试器恢复:
    CPU1引导 ROM 状态:0x00000D00
    CPU1引导模式地址:0x00000000

    结果:卡在并行引导中  

    3) 3)使用调试器、在-40°C 时复位 CPU 并重新启动:

    在运行 main()之前:
    CPU1引导 ROM 状态:0x00000D00
    CPU1引导模式地址:0x00000000

    运行 main()后:
    CPU1引导 ROM 状态:0x00000D00
    CPU1引导模式地址:0x00000000

    结果:代码正常运行  

    4) 4)连接调试器时、将温度从-40C 升高到22C 室温

    加热至22°C 之前:
    CPU1引导 ROM 状态:0x00000D00
    CPU1引导模式地址:0x00000000

    加热至22°C 后:
    CPU1引导 ROM 状态:0x00000D00
    CPU1引导模式地址:0x00000000

    结果:代码正常运行  

    4) 4) 22°C 下电上电:

    重新连接调试器(但不恢复)后:
    CPU1引导 ROM 状态:0x00000000
    CPU1引导模式地址:0x00000000

    使用调试器恢复:
    CPU1引导 ROM 状态:0x00000D00
    CPU1引导模式地址:0x00000000

    结果:代码正常运行  

    不确定这些值是否正确,因为我不知道在 main()之前是否有内容覆盖这些 RAM 值,或者调试器是否覆盖这些值。 无论采用哪种方法、我们还使用 Launchpad XL (相同芯片)运行了测试、使用演示闪烁代码并将引导模式开关设置为并行模式(GPIO84 = 0和 GPIO72 = 0)、它的运行方式与我们的 PCB 在-40°C 下的下在下循环通电时的运行方式完全相同 (正在等待并行主机设备的 ACK ...当然、这两个系统中都不存在、因此它会卡住)。 当引导模式切换回获取/闪存模式(GPIO84 = 1且 GPIO72 = 1)时、Launchpad 的运行方式正常(LED 闪烁)。

    因此、我们的 PCB 似乎在-40C 时以并行引导模式引导、在室温为22C 时以获取/闪存模式引导。 我们不太理解的是、加热/冷却会导致 C2000引导模式切换的原因。 也许这只是因为 GPIO84和 GPIO72是悬空的、并且需要上拉电阻器来强制设置 get/flash 启动模式的默认值?

    此外、调试器似乎从其自己的模式或等待模式引导、以便在-40C 时覆盖并行模式、从而允许代码正常运行?

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

    Nigel Paing1 说:
    不确定这些值是否正确,因为我不知道在 main ()之前是否有内容覆盖这些 RAM 值,或者调试器是否覆盖这些值。

    正确、这些值可能会被 CPU 活动覆盖。

    [引用 USER="Nigel Paing1"]也许这只是因为 GPIO84和 GPIO72是浮动的、需要上拉电阻器来强制设置 get/flash 启动模式的默认值?

    引导选择引脚需要外部偏置来选择所需的引导模式。  复位时没有有意偏置其电压电平的内部机制。

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

    我们确认问题确实是 GPIO 引导引脚悬空、导致 CCA 无法引导。 在低温下、GPIO 引脚的状态似乎为0、在低温下、GPIO 引脚的状态往往为1。 测试结果如下:

    • 冷却至-30C 时、我们观察到引导引脚(GPIO72和 GPIO84)的状态为0 (表示并行引导模式)
    • 加热至-25C (PCB 温度读取-23.1C)并执行下电上电、虽然代码未运行且正在查看 GPIO 数据寄存器、但我们注意到一些浮动 GPIO 切换、这表明热噪声正在改变某些 GPIO 状态
    • 进一步加热至-22.5C (PCB 温度读取-19.8C)并执行下电上电后、PCB 卡在并行引导模式下、但在~5秒后启动、我们的理论是、我们具有允许 GPIO70 (并行引导主机 ACK 引脚)自由切换的完美条件、 让 PCB 进入并行引导模式...另一个理论是、两个引导引脚(GPIO72和 GPIO84)均切换为高电平、从而允许 PCB 切换为从闪存模式引导、但这似乎不太可能、因为 C2000不应在引导中切换引导模式
    • 加热至-5C (PCB 温度读数-2.5C)并执行下电上电后、PCB 似乎在引导引脚(GPIO72和 GPIO84)的状态为1 (表示获取/闪存引导模式)时正常引导

    我们更新了原理图、在引导引脚上添加了上拉电阻器、以强制采用 GET /闪存引导模式。