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.

[参考译文] MSPM0G3107:上电复位后、MCAN 外设未完成初始化

Guru**** 2779905 points

Other Parts Discussed in Thread: MSPM0G3107, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1605241/mspm0g3107-mcan-peripheral-does-not-complete-initialization-after-power-on-reset

器件型号: MSPM0G3107
主题: SysConfig 中讨论的其他器件

您好:

我尝试在 MSPM0G3107 上使用 MCAN 外设、遇到了上电复位(通过施加电源或通过 nRST)后存储器初始化过程无法完成的问题。

在此状态下、对所有 MCAN 寄存器(即通过 DL_MCAN_getRevisionId 和其他方式进行读取)始终通过 CPU 或通过调试器返回零。

使用调试器复位器件(我认为这是 SYSRST?) 检查似乎通过得更可靠。

int main(void)
{
DL_GPIO_enablePower(GPIOA);
delay_cycles(POWER_STARTUP_DELAY);

DL_GPIO_initPeripheralInputFunction(GPIO_HFCLKIN_IOMUX, GPIO_HFCLKIN_IOMUX_FUNC);
DL_SYSCTL_setHFCLKSourceHFCLKIN();

DL_MCAN_reset(MCAN0_INST);
DL_MCAN_enablePower(MCAN0_INST)
delay_cycles(POWER_STARTUP_DELAY);

static const DL_MCAN_ClockConfig gMCAN0ClockConf = {
.clockSel = DL_MCAN_FCLK_HFCLK,
.divider = DL_MCAN_FCLK_DIV_1,
};

DL_MCAN_enableModuleClock(MCAN0_INST);
DL_MCAN_setClockConfig(MCAN0_INST, (DL_MCAN_ClockConfig *) &gMCAN0ClockConf);


while(false == DL_MCAN_isMemInitDone(MCAN0_INST));

    while (1) {
        delay_cycles(10000);
    }

}

我可以从一个完全为空的工程(不使用 SysConfig)开始重现此内容。

 

通过将“delay_cycles"调用“调用从 power_startup_delay (16) 更改为 1000000、这个问题似乎会消失、初始化是可靠的。

因此、由于初始化顺序、使用 SysConfig 的项目不太可能遇到此问题 — 外设电源使能和第一次寄存器读取和写入之间存在更多的时钟周期。

 

是否有有关 MCAN 外设启动的已发布文档在启用时钟请求和访问寄存器之前需要额外的时钟周期?

我在技术参考手册中没有看到提到此行为的部分 — 第“2.2.6 外设启用“一节包含一条说明在访问外设之前等待 4 个 ULPCLK 周期的注释。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将“delay_cycle"调用“调用从 power_startup_delay (16) 更改为 1000000、这个问题似乎会消失、初始化是可靠的。

    您好、开机后可能需要更多时间来初始化。

    请参阅此代码

    /**
     * MCAN restart need to call SYSCFG_DL_MCAN0_init()
     * For MCAN1 restart function, please add manually
     * 
     * Excute time:
     * 6594 systick CPU@80MHz, CANCLK@40MHz = 82.5us 
     */
    void MCAN0_Restart(void)
    {
        DL_MCAN_reset(CANFD0);
        delay_cycles(16);
        DL_MCAN_disablePower(CANFD0);
        delay_cycles(32);
        DL_MCAN_enablePower(CANFD0);
        // MCAN RAM need at least 50us to finish init
        // 1600 CPU cycles@CPU32MHz
        // 4000 CPU cycles@CPU80MHz
        delay_cycles(4000);
        SYSCFG_DL_MCAN0_init();
        // Please re-config the filter after can retarted
    }

    e2e.ti.com/.../mcan_5F00_application_5F00_LP_5F00_MSPM0G3519_5F00_nortos_5F00_ticlang_5F00_20250819.zip

    是否有围绕 MCAN 外设启动的已发布文档在启用时钟请求和访问寄存器之前需要额外的时钟周期?

    将于 2026 年引入此种使用方式。 还没有发布,它在我的计划。

    我在技术参考手册中没有看到提到此行为的部分 — 第“2.2.6 外设启用“部分包含一条说明在访问外设之前等待 4 个 ULPCLK 周期的注释。

    但与此外设无关、mCAN 是 PD1 (MCLK) 总线外设。

    ULPCLK 为 PD0。

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

    感谢您澄清并确认这一点将在将来记录在案。