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.

[参考译文] TMS320F280025C:软件复位问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1509235/tms320f280025c-software-reset-issue

器件型号:TMS320F280025C

工具/软件:

您好、

我们使用的是 C2000 MCU、特别是 F280025C、适用于电机控制。 CAN 引导加载程序位于闪存的前3个扇区中。 之后、我们放置了应用代码。

在下电上电期间、引导加载程序首先运行、等待一段时间、然后禁用 CAN 和计时器、最终跳转到应用程序。 此流程可以正常运行—我们在下电上电期间使用 CAN 更新了固件、并且应用程序可以正常运行。

接下来、我们希望避免下电上电、而是通过向应用发送 CAN 消息来执行软件复位。 引导加载程序就会运行、我们再次更新固件。 但是、这一次应用程序无法正常运行、具体而言、PWM 输出无法正常运行。

再次执行下电上电(无需重新刷写固件)后、应用程序工作正常。

观察结果:

  • ADC 和 I/O 等其他外设工作正常。

  • 在3个 PWM 输出中(U、V、W)、V 和 W 相位正确输出。

  • U 相似乎使用与 V PHASE 相同的比较器值。 我们通过更改计数器比较值确认了这一点。

我们正在通过 CAN 更新计数器比较值、并使用该getCounterCompare()函数读回这些值、从而返回正确的值。

详细信息:

  • EPWM 频率:15kHz

  • U PHASE - EPWM4 (GPIO 22、7)

  • V PHASE - EPWM1 (GPIO 0、1)

  • W 相位- EPWM6 (GPIO 18、19)

发送的计数器比较值:

  • U:1666

  • V:833.

  • W:3000

计数器比较值读回:

  • U:1666

  • V:833.

  • W:3000

我们还尝试了不同的值、但仍然、W 相没有问题、而 U 相输出似乎反映了 V 相。

这里可能会出现什么问题?

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

    尊敬的 Hari:

    您能否在使用和不使用下电上电的情况下对器件上的应用代码执行存储器转储? 这可以通过 Code Composer Studio 中的内存浏览器功能来完成。

    谢谢。此致、

    Charles

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

    尊敬的 Charles:

    我们取得了进展。 我们注意到PWMXLINK在跳转到应用程序时没有正确设置寄存器。 在我们的应用启动过程中、有三行会清除某些 RAM 存储器区域、这就是问题所在:

    HAL_clearDataRAM ((void *) ctrlVarsLoadStart、(uint16_t) ctrlVarsLoadSize);
    HAL_clearDataRAM ((void *) motorVarsLoadStart、(uint16_t) motorVarsLoadSize);
    HAL_clearDataRAM ((void *) extVarsLoadStart、(uint16_t) extVarsLoadSize);

    我想澄清的是: 为什么下电上电不会导致此问题、但软件复位会导致此问题?
    这似乎与特别相关extVarsLoadSize

    链接器文件中包含以下内容:

    LOAD = RAMGS0
    LOAD_START (extVarsLoadStart)、
    load_size (extVarsLoadSize)、
    LOAD_END (extVarsLoadEnd)

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

    您好、

    为什么关机后再开机不会导致此问题、但软件重置会导致此问题?

    软件复位是什么意思?

    这似乎与
    有关 extVarsLoadSize

    这个变量的问题到底是什么?

    有三行用于清除某些 RAM 内存区域、这是问题所在:

    这些 RAM 内存区域有什么问题?

    谢谢

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

    在我们的应用程序上下文中、软件复位是指通过发送到应用程序的 CAN 消息以编程方式触发的 SysCtl_resetDevice ()复位。 实现这一点是为了允许在不对器件进行物理下电上电的情况下进行固件更新。

    该变量的具体问题是什么?

    正如我之前在 中所说的  PWMXLINK 当我们执行" HAL_clearDataRAM ((void *) extVarsLoadStart、(uint16_t) extVarsLoadSize)"时、寄存器被清除

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

    好了、了解上述函数会创建器件复位 XRSn。

    正如我前面所说的   PWMXLINK 当我们执行" HAL_clearDataRAM ((void *) extVarsLoadStart、(uint16_t) extVarsLoadSize)"
    时、寄存器被清除

    该函数有什么作用? 是否应该 写入 PWMXLINK 寄存器?

    您也能否在执行上述函数之前确认 PWMXLINK 寄存器是否设置为正确的值。

    从闪存运行的应用程序的常见问题:: // e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878674/faq-flash---how-to-modify-an-application-from-ram-configuration-to-flash-configuration

    https://www.ti.com/lit/an/spra958l/spra958l.pdf?kr=1746810623287 -有关 ts cmd 文件配置的应用手册

    谢谢

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

    嗨、哈里

    您是否解决了此问题?

    我得到了同样的问题。

    使用引导加载程序和软复位后、控制器将不会与 HAL_clearDataRAM 函数一起正常运行。

    当我注释这个 HAL_clearDataRAM 函数时、它将通过软复位正常运行。

    此致

    箭头