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.

[参考译文] MSPM0L1105:当 MCLK 来自 SYSPLL 时、首次下载 MSPM0G310x 失败

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1180496/mspm0l1105-mspm0g310x-download-fail-first-time-when-mclk-source-from-syspll

器件型号:MSPM0L1105
Thread 中讨论的其他器件:SysConfig

您好!  

    如果未启用 SYSPLL、每次下载都将成功。 下载使用 SYSPLL 作为 MCLK 时钟源的固件后、每次下载都第一次失败、需要在几秒钟内再次下载才能成功。 无论 SYSPLL 的时钟源是 SYSOSC 还是 HFCLK、都存在此问题。 开发环境为 Keil + jlink + SWD。 连接信号为 VCC、GNDS、SWDIO 和 SWCLK。 Keil 在‘时提示“Flash Timeout,Reset the Target and try again”(闪存超时,重置目标并重试)。 下载失败的原因是什么?如何解决?

以下配置存在此问题:

SYSCTL.useHFCLK_Manual = true;
SYSCTL.HFCLKSource ="HFXT";
SYSCTL.HFCLK_FREQ = 16000000;
SYSCTL.HFXTStartup = 10;
SYSCTL.HFCLKMonitor =真;
SYSCTL.EXCLKSource ="SYSPLLOUT1";
SYSCTL.HSCLKSource ="SYSPLLCLK2X";
SYSCTL.SYSPLLSource ="HFCLK";
SYSCTL.SYSPLL_CLK2XEn = true;
SYSCTL.SYSPLL_Qdiv = 5;
SYSCTL.MCLKSource ="HSCLK";
SYSCTL.SYSPLL_Pdiv = 2;
SYSCTL.UDIV ="2";

此致、

Jason

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

    你(们)好。

    编程前、程序是否处于低功耗模式?

    我将尝试重现此问题、稍后再与您讨论

    谢谢

    越豪

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

    您好、YuHao、

        该芯片在睡眠0模式下运行。 所有 syscfg 文件内容如下所示:

    /**
    *生成此文件时使用了这些参数。 它们将自动应用于后续加载
    *通过 GUI 或 CLI。 使用'--help'运行 CLI 以获取有关如何覆盖这些参数的其他信息。
    *@clipArgs -器件"MSPM0G350X"-封装"LQFP-64 (PM)"-部件"默认"-产品" mspm0_sdk@0.50.00.01 "
    *@版本{"工具":"1.14.0+2667"}
    *

    /**
    *导入此配置中使用的模块。
    *
    const sysctl = scripting.AddModule ("/ti/driverlib/SYSCTL);
    const SysTick = scripting.AddModule ("/ti/driverlib/SYSTICK);

    /**
    *将自定义配置值写入导入的模块。
    *
    SYSCTL.useHFCLK_Manual = true;
    SYSCTL.HFCLKSource ="HFXT";
    SYSCTL.HFCLK_FREQ = 16000000;
    SYSCTL.HFXTStartup = 10;
    SYSCTL.HFCLKMonitor =真;
    SYSCTL.EXCLKSource ="SYSPLLOUT1";
    SYSCTL.HSCLKSource ="SYSPLLCLK2X";
    SYSCTL.SYSPLLSource ="HFCLK";
    SYSCTL.SYSPLL_CLK2XEn = true;
    SYSCTL.SYSPLL_Qdiv = 5;
    SYSCTL.MCLKSource ="HSCLK";
    SYSCTL.SYSPLL_Pdiv = 2;
    SYSCTL.UDIV ="2";

    const Board = Scripting.AddModule ("/ti/driverlib/Board、{}、false);

    SysTick.periodEnable = true;
    SYSTICK.interruptEnable = true;
    SysTick .systickEnable = true;
    SysTick 周期= 800000;

    /**
    *用于解锁引脚/外设的 Pinmux 解决方案。 这可确保将来对自动解算器进行细微更改
    *该工具的版本不会影响您最初看到的引脚多路复用器。 可以完全删除这些行、以便
    *从头开始重新解决。
    *
    sysctl.peripheral.$s暗示 解决方案="sysctl";
    sysctl.peripheral.hfxInPin.$sectedSolution ="ball .45";
    sysctl.peripheral.hfxOutPin.$sectedSolution ="ball .46";
    Board.peripheral.$sevitestSolution ="DEBUGSS";
    Board.peripheral.swclkPin。$sevalesolution ="ball.13";
    Board.peripheral.swdioPin。$sendestSolution ="ball.12";

    此致、

    Jason

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

    您好 Jason、

    我想您要为 SYSPLL 配置80MHz。 因此、可能会有一个小错误:

     'SYSCTL.SYSPLL_Qdiv = 5;'

    通过 将0x01编程为0x7F 来选择所需的 QDIV 分频器、该分频器的值为/2至/128。 (您可以在用户指南的第68页中找到)

    因此 QDIV 应为4。

    谢谢

    越豪

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

    您好、YuHao、

    这是 SysConfig 工具的一项功能。 syscfg 文件显示5、生成的代码为4。 我尝试将 MCLK 配置为64M 或更低、这也有问题。 在上一次答复中为 syscfg 文件生成以下代码。

    此致、

    Jason


    #include "ti_MSP_dl_config.h"

    /*
    *==== SYSCFG_DL_INIT ===
    *在使用任何板 API 之前执行所需的任何初始化
    *
    SysConfig_weak SYSCFG_DL_init (void)

    SYSCFG_DL_initPower();
    SYSCFG_DL_GPIO_init ();
    /*特定于模块的初始化*/
    SYSCFG_DL_SYSCTL_INIT ();
    SYSCFG_DL_SysTK_init ();
    SYSCFG_DL_SYSCTL_CLK_INIT ();

    SysConfig_weak SYSCFG_DL_initPower (void)

    DL_GPIO_RESET (GPIOA);
    DL_GPIO_RESET (GPIOB);


    DL_GPIO_enablePower (GPIOA);
    DL_GPIO_enablePower (GPIOB);

    DELAY_CYCLES (POWER_STARTUP_DELAY);

    SysConfig_weak SYSCFG_DL_GPIO_init (void)

    /*为 HFXT 功能配置 GPIO/IOMUX */
    DL_GPIO_initPeripheralAnalogFunction (GPIO_HFXIN_IOMUX);
    DL_GPIO_initPeripheralAnalogFunction (GPIO_HFXOUT_IOMUX);


    静态常量 DL_SYSCTL_SYSPLLConfig gSYSPLLConfig ={
    .inputFreq = DL_SYSCTL_SYSPLL_INPUT_FREQ_8_16_MHz、
    .rDivClk2x = 0、
    .rDivClk1 = 0、
    .rDivClk0=0、
    .enableCLK2x = DL_SYSCTL_SYSPLL_CLK2X_ENABLE、
    .enableCLK1 = DL_SYSCTL_SYSPLL_CLK1_DISABLE、
    .enableCLK0 = DL_SYSCTL_SYSPLL_CLK0_DISABLE、
    .sysPLLMCLK = DL_SYSCTL_SYSPLL_MCLK_CLK2X、
    .sysPLLRef = DL_SYSCTL_SYSPLL_REF_HFCLK、
    .qDiv = 4、
    .pDiv = DL_SYSCTL_SYSPLL_PDIV_2、

    };
    SysConfig_weak SYSCFG_DL_SYSCTL_init (void)

    DL_SYSCTL_setSYSOSCFreq (DL_SYSCTL_SYSOSC_FREQ_BASE);
    DL_SYSCTL_setHFCLKSourceHFXTParams (DL_SYSCTL_HFXT_RANGE_8_16_MHz、10、true);
    DL_SYSCTL_CONFIGSYSPLL ((DL_SYSCTL_SYSPLLConfig *)&gSYSPLLConfig);

    DL_SYSCTL_setMCLKSource (SYSOSC、HSCLK、DL_SYSCTL_HSCLK_SOURC_SYSPLL);
    DL_SYSCTL_setMCLKDivider (DL_SYSCTL_MCLK_DIVIDER_DISABLE);
    DL_SYSCTL_setULPCLKDivider (DL_SYSCTL_ULPCLK_DIV_2);
    DL_SYSCTL_setBORThreshold (DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
    DL_SYSCTL_setFlashWaitState (DL_SYSCTL_FLASH_WAIT_State_2);


    SysConfig_weak SYSCFG_DL_SYSCTL_CLK_init (void){
    while ((DL_SYSCTL_getClockStatus ()&(DL_SYSCTL_CLK_STATUS_SYSPLL_Good)
    | DL_SYSCTL_CLK_STATUS_HFCLK_Good
    | DL_SYSCTL_CLK_STATUS_HSCLK_Good
    | DL_SYSCTL_CLK_STATUS_LFOSC_Good))
    !=(DL_SYSCTL_CLK_STATUS_SYSPLL_Good
    | DL_SYSCTL_CLK_STATUS_HFCLK_Good
    | DL_SYSCTL_CLK_STATUS_HSCLK_Good
    | DL_SYSCTL_CLK_STATUS_LFOSC_Good))




    SysConfig_weak SYSCFG_DL_SysTK_init (void)

    /*
    *将 SysTick 周期初始化为10.00ms、
    *启用中断并启动 SysTick 计时器
    *
    DL_SysTick 配置(800000);