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.

[参考译文] TMS320F28075:某些 ClkCfgRegs 不能按预期设定-使用 BIOS app.cfg 来配置系统时钟与使用 InitSysPll 库函数之间的区别

Guru**** 2812305 points

Other Parts Discussed in Thread: TMS320F28075, TMS320F280049, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1318091/tms320f28075-some-clkcfgregs-cannot-be-set-as-expected-the-difference-between-using-bios-app-cfg-to-configure-the-system-clock-and-using-initsyspll-library-function

器件型号:TMS320F28075
主题中讨论的其他器件: TMS320F280049C2000WARE

大家好、我遇到了一个令人困惑的问题。


问题描述:当使用 BIOS app.cfg 来选择外部振荡器作为系统时钟源时、在控制板加电后、TMS320F28075芯片有时无法在特定的电源序列下设置两个 ClkCfgRegs 寄存器。 然而、当使用 InitSysPll 库函数、或使用 BIOS app.cfg 将 INTOSC2设置为系统时钟时、这个问题在许多运行中都没有发生一次。 我更改了几个控制板、结果都是一样的。

问题背景:一个光伏并网逆变器控制板包含两个 DSP、一个主 DSP 是 TMS320F28075、一个辅助 DSP 是 TMS320F280049、两个芯片共享电源电路。 两个 GPIO 引脚和多个 SPI 引脚相互连接、用于检测彼此的"心跳"和主从通信。 两个芯片都使用无源外部振荡器作为时钟源。 TMS320F28075通过 BIOS app.cfg 设置系统时钟、TMS320F280049通过函数设置系统时钟、因为这两个项目是由不同的工程师完成的。

我的问题:
1.使用 BIOS app.cfg 来配置系统时钟和使用 InitSysPll 库函数之间是否有区别? 我在哪里能找到证据(BIOS app.cfg 引导模块中系统时钟设置的源代码)?
为什么在使用 Bois app.cfg 选择外部振荡器作为特定电源序列下的系统时钟源时、TMS320F28075芯片无法设置一些 ClkCfgRegs 寄存器? 电源序列处于要求范围内。 这只是由其它因素引起的表面表示(比如 TMS320F280049芯片的系统时钟正常但又不正常、引起电流或电压的差异)、或者是造成这个问题的原因?

问题详细信息:
我尝试使用帮助文件、并在 C:\ti\BIOS_6_51_00_15\packages/ti\catalog\c2800\initF2837x 中查找 Boot.c 文件

然后、我使用 InitSysPll 库函数、以相同的设置逻辑修改了 Boot.c 中的 Boot_configurePllDivs 函数。 但我发现它没有编译到项目中。


已导出的 ClkCfgRegs 是否发生 TMS320F28075芯片这个问题的比较如下(左侧正常、右侧异常)

上面的 ClkCfgRegs 显示当这个问题发生时、PLL 被旁路和解锁、SYSPLL 乘法器寄存器未能设定、然而分频器选择寄存器成功、这导致系统频率比预计状态慢24倍。

以 XGCONF 格式显示的 TMS320F28075系统时钟设置如下所示。

相应的 cfg 脚本如下所示

针对此问题的简单测试代码如下所示

禁用 BIOS app.cfg 时钟设置时、上述程序中的每种方法都可以。 启用 BIOS app.cfg 时钟设置后、如果出现问题、上述程序中的所有方法都将卡在 InitSysPll 中的 while 循环上、等待 SYSPLL 锁定。 如果问题未发生、上述程序中的每种方法都没问题。 这意味着问题发生后、不能再次设置系统时钟。


对于检测到的电源序列(是否出现问题)、比较如下所示(在所有上电相关引脚中、选择 TMS320F28075的 VDDIO 引脚(CH2)、一个 VDDA 引脚(CH3)作为测量对象、CH1是 TMS320F28075的 SPISOMI 引脚)

ClkCfgRegs 正常时检测到的电源序列

ClkCfgRegs 异常时检测到的电源序列

当恒压电源的电流限值设置为高于1A 时、更有可能发生此问题、这意味着电压电平上升得更快。 上述异常电源序列中的最大电源斜升速率为4000V/s、处于要求的范围内。


在控制板加电后、即使出现此问题、电源稳定、外部振荡器也正常。 图片如下所示。

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

    我建议禁用 SYS/BIOS 引导模块的时钟配置、而不是使用 C2000Ware 中的最新时钟初始化函数。 我怀疑 SYS/BIOS 版本的时钟初始化代码缺少一些在 PLL 勘误表中讨论的权变措施。

    惠特尼

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

    谢谢、这是我怀疑的。 现在、我们只需要确保这是导致该问题的原因。 由于我们的产品中已使用了包含 SYS/BIOS 引导模块时钟配置的软件版本、而且我们发现的错误是在 JTAG 引脚电源模式下、因此该版本很少出现在产品的正常电源模式下。 源代码比较等一些证据对我们做决定会更好。 我们找到的 Boot.c 源代码未编译到项目中。 同时、我对出现此问题时电源序列的差异很好奇。

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

    您是如何确定源代码不是项目的一部分的? 您的.map 文件吗? 如果在.map 文件中搜索"Boot_"、会找到什么函数? 您的编译器选项中是否有 gen_func_subsections=on?

    InitSysPll ()函数会先将 PLLSYSCLKDIV 设置为较高的分频器一段时间,然后再设置为用户指定的分频器,以限制电流的增加。 我不确定这是否能解释您看到的差异。

    惠特尼

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

    我在.map 文件中找到了"00081638 00000045 Boot.a28FP:Boot.o28FP (.text:.bootCodeSection:_ti_catalog_c2800_initF2837x_Boot_configurePllDivs)"。 当我在 Boot.c 中使用 InitSysPll ()函数以相同的设置逻辑修改此函数后,十六进制文件或二进制文件完全没有更改。 在清理和编译工程后、甚至都不会更新 hex 文件。 我使用文件比较软件来确认这一点。 现在、我想它与\lib 目录中相同路径下的 Boot.a28FP 文件有关。 如果我删除该文件、项目编译将不会通过。 Boot.a28FP、Boot.a28L 和 Boot.ae28FP 文件似乎无法以正确的方式进行处理。 您能告诉我如何将 Boot_configurePllDivs 函数的修改记录到我的项目中吗? 谢谢你。         

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

    用户指南中提供了一些 有关重新构建库的信息。 您正在使用足够新的 SYS/BIOS 版本、虽然该版本应作为工程编译的一部分进行重建。 我不知道为什么它看起来没有涵盖引导库文件。 您可能需要进行备份、并尝试使用用户指南中的手动 BIOS 构建说明进行包含引导模块的完整构建。

    惠特尼