公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

装置: CY8C6136BZI-F34

IDE: PSoC Creator

设计目标:将应用程序从引导加载程序 [app0] 切换到可启动的应用程序 [app1]。

设计方法:遵循了 DFU 应用笔记,将链接器配置为与此 PSOC 配合使用

问题: 当 app0 切换到 app1 时,PLL 函数 cy_sysclk_plmanualConfigure 出现故障,因为 P LL 已经在运行。这段代码位于一个名为 " cy " fitter_cfg.c 的自动生成的文件中。 来自 app0 的所有时钟的运行频率与 app1 中的时钟运行频率相同。

我需要做些什么才能让 app1 运行?

 

shepdog87_1-1696866035676.png

 

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

@shepdog87

是的,你说得对,重置后 cy_dfu_executeApp 将启动引导加载程序,然后从引导加载程序的重置处理程序跳转到应用程序。 这种方法是首选,因为我们需要在跳转到应用程序之前清除所有中断。 这就是执行重置以清除中断的原因。

 

问候,

罗汉

 

在原帖中查看解决方案

0 点赞
3 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

@Rohan136

PDL DFU API 中有两种方法:

  • cy_dfu_executeApp — >--> 获取 APPID 然后执行 nvic_systemReset
  • cy_dfu_switchtoApp —--> 获取 APPID 并设置>堆栈指针和重置处理程序

我正在使用 cy_dfu_switchtoApp。 我对调用NVIC_SystemReset CAN 后如何实际启动到App1 NVIC_SystemReset有点困惑。 看来它只会重新启动到引导加载程序,App0? 这款 PSOC6 只有一个可访问的内核,即 CM4。 看来其他双核的 PSOC6 产品对 CM0 和 CM4 的重置方式不同。

appid 是 cy_dfu_executeApp 中的一个 RAM 变量,所以我不确定它怎么可能在软件重置后将其值保持为跳转到哪个应用程序。 另外,我有一个 CAN 在 App1 中执行的命令,该命令 CAN 重置主板,因此我 CAN 将其置于引导加载程序模式。 我使用 nvic_systemReset () 来做到这一点,因此,如果我在引导加载程序中有逻辑来检测我是否进行了软件重置,我就无法区分 App0 nvic_systemReset () 和 App1 nvic_systemReset ()。

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@shepdog87

 

你是如何跳转到应用程序的? 你是在设置堆栈指针并调用重置处理程序还是使用 execute appID? 我想你正在使用第一种方法。 如果是这样,请尝试使用第二种方法。

 

问候,

罗汉

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@shepdog87

是的,你说得对,重置后 cy_dfu_executeApp 将启动引导加载程序,然后从引导加载程序的重置处理程序跳转到应用程序。 这种方法是首选,因为我们需要在跳转到应用程序之前清除所有中断。 这就是执行重置以清除中断的原因。

 

问候,

罗汉

 

0 点赞