我创建了一个引导加载程序,并将其放置在地址 0x400000 到 0x420000 处。每次我通过串口更新程序时,只有核心 0 继续运行。如何才能让其他核心也运行起来?
嗨@zhangyu5454 ,
您可以在启动代码中启用核心。请参阅默认 S32DS 项目的启动代码(startup_cm7.s)。
例如,如果 CM7_2_ENABLE == 1,则启动代码将在系统启动期间启用 CM7_2。
也可以稍后通过 CM7_0 应用程序启用内核,方法是直接配置相关寄存器,或者使用 MCU MCAL 驱动程序或 Power_Ip 驱动程序。请参考以下示例:
BR,丹尼尔
感谢您的回复。我尝试使用 Power_Ip,但是当程序中出现“Power_Ip_Init(&Power_Ip_HwIPsConfigPB);”这行代码时,调试过程会自动结束。此外,即使我不按下 RESET 按钮,RESET 指示灯仍然亮着,导致设备完全无法运行。当我使用 IP_MC_ME 时,程序运行正常,但没有产生任何结果。其他元器件也无法启动。这段代码似乎对 388 型号不太适用。
嗨@zhangyu5454 ,
如果 MCU 发生系统RESET,则需要读取RESET源。
您可以致电
Power_Ip_GetResetReason();
在 main() 函数开头之前
Power_Ip_Init();
根本原因可能是 V15 开关电源——它必须与硬件设计相匹配。
danielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.png
BR,丹尼尔
嗨@zhangyu5454 ,
那么RESET的原因是什么?
如果让我猜的话,应该是POR/LVR。
V15在PCB板上是如何供电的?
您是否已相应地配置 Power_Ip?
此致,
丹尼尔
谢谢!
你好@zhangyu5454 ,
我知道您在PCB板上使用了SMPS电源,因此必须在配置工具中启用它:
danielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.png
danielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.png
关于SXOSC,请确保已禁用:
danielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.png
谢谢你的回复。我不太了解这些功能。是否有相关的示例或教程文件?我尝试按照 S32K358 的示例进行操作,但没有成功。关于 V15 电源,我发现它是由外部 3.3V 电压通过微控制器控制的晶体管产生 1.5V 电压,同时在微控制器控制下还会产生 1.1V 电压。我还注意到我的硬件设计中没有 32.768 晶振(晶体振荡器),程序卡在了 Clock_Ip_ExtOsc.c 的循环中。
做 {
SxoscStatus = ((Clock_Ip_apxXosc[Instance]->STAT & SXOSC_SXOSC_STAT_OSC_STAT_MASK) >> SXOSC_SXOSC_STAT_OSC_STAT_SHIFT);
TimeoutOccurred = Clock_Ip_TimeoutExpired(&StartTime, &ElapsedTime, TimeoutTicks);
} while ((0U == SxoscStatus) && (FALSE == TimeoutOccurred));
你好@zhangyu5454 ,
这两次写入操作中 ConfigValue 的值分别是多少?
IP_PMC->CONFIG = ConfigValue;
IP_PMC->SMPSCONFIG = ConfigValue;
由于电源模式配置错误,MCU正在复位。
将以下循环放在 main() 函数的开头,以便在重置后进行调试。
volatile uint32_t loop = 1;
while (loop)
{
}
可以通过调试器修改循环变量,以允许程序继续执行。
当代码在循环中停止执行时,调用:
Power_Ip_GetResetReason()
它应该返回 MCU_POWER_ON_RESET。
另外,请查阅低电压状态和控制(LVSC)寄存器,以获取有关 RESET 事件的更多信息。
此致,
丹尼尔
zhangyu5454_0-1786934052028.pngzhangyu5454_0-1786934052028.pngzhangyu5454_0-1786934052028.png张宇5454_0-1786934052028.png
您好,我按照您的方法启用了V15并禁用了SXOSC。但是,当调试到达 `Power_Ip_PMC_PowerInit` 中的 `IP_PMC->SMPSCONFIG = ConfigValue;` 行(该行位于 `Power_Ip_Init` 内部)时,调试会话会自动终止,并且板载 RESET 指示灯 LED 会保持微弱而稳定的亮光。
嗨@zhangyu5454 ,
我用你分享的配置值在我的EVB上无法重现这个问题。
您使用的是 XS32K388EVB-Q289 吗?如果可以的话,请问您能否告知跳线 J118 的位置?
danielmartynek_0-1787229063371.pngdanielmartynek_0-1787229063371.pngdanielmartynek_0-1787229063371.png
如果您使用的是定制电路板,请分享原理图。如果您不想在此处分享,请创建支持工单并将原理图附加到工单中。
谢谢!
BR,丹尼尔
@嗨@zhangyu5454 ,
我很难解释清楚。
您能否使用示波器测量 Power_Ip 初始化期间的 V15 和 V11 电压?
我用另一种方法解决了这个问题;以下是我的程序。
IP_MC_ME->PRTN0_CORE4_ADDR = 0x00800000U;
IP_MC_ME->PRTN0_CORE3_ADDR = 0x00A00000U;
IP_MC_ME->PRTN0_CORE4_PCONF = 0x00000001U;
IP_MC_ME->PRTN0_CORE3_PCONF = 0x00000001U;
IP_MC_ME->PRTN0_CORE4_PUPD = 0x00000001U;
IP_MC_ME->PRTN0_CORE3_PUPD = 0x00000001U;
IP_MC_ME->CTL_KEY = 0x5AF0U;
IP_MC_ME->CTL_KEY = 0xA50FU;
while ((IP_MC_ME->PRTN0_CORE4_PUPD == 1U) || (IP_MC_ME->PRTN0_CORE3_PUPD == 1U)) {}
while ((IP_MC_ME->PRTN0_CORE4_STAT & MC_ME_PRTN0_CORE4_STAT_CCS_MASK) == 0U) {}
while ((IP_MC_ME->PRTN0_CORE3_STAT & MC_ME_PRTN0_CORE3_STAT_CCS_MASK) == 0U) {}