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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1511053/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 ()函数读回这些值,该函数返回正确的值。

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

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

HAL_clearDataRAM ((void *) extVarsLoadStart、(uint16_t) extVarsLoadSize);

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

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

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

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

    尊敬的 Hari:

    软件复位不会清除 MCU 内部 RAM。 您需要手动初始化 RAM。 cmd 文件应该根据闪存中的新固件更新 LoadSize。 SW 复位后的 LoadSize 与 PORRST (下电上电)之间有何差异?

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

    尊敬的 Wang:

    我尚未更新固件。 我执行了软件复位、引导加载程序会等待一段时间、然后再跳转到应用程序。 仍在引导加载程序中时、我PWMXLINK通过 CAN 发送寄存器值、此时是正确的。

    但是、在跳转到应用程序后、我们将清除 RAMGS0部分、当我PWMXLINK再次广播寄存器值时、是不正确的。 移除 RAMGS0清除功能后、可以从PWMXLINK寄存器中获得正确(默认)值。

    我想要澄清的是这一点:为什么下电上电不会导致此问题、但软件复位会导致此问题?

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

    尊敬的 Hari:

    软件复位后、CPU 开始执行引导加载程序。 您将 PWMLINK 寄存器值发送到引导加载程序。 引导加载程序是否将值编程到 PWMLINK 寄存器?  PWMLINK 寄存器值是映射的还是位于 RAMGS0中?

    下电上电后是否也清洁 RAMGS0?