控制/MCU
YTM32L系列MCU是苏州云途半导体针对车身控制领域推出的入门级32位产品,最高主频达48MHz,内嵌128KB Flash和16KB SRAM,MCU内嵌CAN-FD,LIN等丰富接口,满足车规可靠性要求AEC-Q100。可以应用于车身传感器控制、电机控制、胎压监测、电动座椅、电动尾门、天窗、灯光控制及内饰灯控制等方面。
YTM32 M系列芯片基于32位车规级ARM Cortex-M33内核,CPU全温域主频高达120MHz,提供1.25MB嵌入式闪存,符合ISO26262的ASIL-B等级要求,可靠性满足AEC-Q100、Grade1标准,信息安全方面支持AES、SHA以及国密SM4等多种加密算法,并提供符合AUTOSAR标准的MCAL。
在低功耗方面,YTM32系列MCU支持Sleep,DeepSleep,Standby和Power Down(L系列不支持)几种低功耗模式,其中Standby模式是CPU可以保留运行状态信息的最低功耗模式,Power Down模式则是只有部分模块和部分SRAM可以保留运行信息,其他模块和CPU在内都会断电,系统唤醒之后需要重启,该模式是系统的最低功耗模式。YTM32系列MCU通过多种低功耗模式组合能够很好的满足汽车应用的低功耗需求。
YTM系列MCU针对汽车的低功耗需求,定义了几种不同的低功耗模式:
Mode(模式) | Clock(时钟) | 外设 | 唤醒源 | 复位 | 功耗 |
---|---|---|---|---|---|
Sleep(睡眠) | 无变化 | 正常工作 | 所有中断 | 否 | 稍有降低 |
DeepSleep(深度睡眠) | 总线时钟关闭,功能时钟可配置 | 支持功能时钟,且功能时钟开启的模块正常工作 | 异步中断,所有GPIO | 否 | 较低 |
Standby(待机) | 总线时钟关闭,功能时钟可配置 | 支持功能时钟,且功能时钟开启的模块正常工作 | 异步中断,所有GPIO | 否 | 很低 |
PowerDown(掉电) | SIRC/SXOSC可配置 | lpTMR, RTC, ACMP, WKU且有功能时钟 | lpTMR, RTC, ACMP, WKU特定GPIO | 是 | 最低 |
YTM32芯片的低功耗模式结合了ARM CPU的低功耗模式和整个MCU系统外设的低功耗模式,低功耗模式的进入流程如下:
SCB→SCR
寄存器的SCB_SCR_SLEEPDEEP_Msk
比特决定系统进入Sleep模式还是Deep Sleep模式WFI
指令进入低功耗模式系统执行WFI
指令之后,硬件会依据电源和时钟的配置自动关闭对应的时钟,然后切换系统电源,整个过程无需软件参与,芯片引脚将保持原有的功能配置和输入输出状态,进出低功耗模式过程中,应用无需对芯片引脚做特殊的配置。
另外,进出低功耗模式过程中,系统的时钟也是硬件切换的,应用软件无需做时钟切换。当系统从低功耗模式唤醒的时候,系统会自动恢复低功耗之前的时钟配置模式,然后从WFI指令位置继续往下执行程序(Power Down模式需要复位)。比如系统进入低功耗模式之前系统时钟为PLL,PLL参考时钟为外部晶振FXOSC,当系统进入低功耗模式(Deep Sleep和Standby)时PLL和外部晶振被硬件关闭,在唤醒过程中,系统硬件可以直接重新开启FXOSC和PLL,并等待PLL锁定后将PLL作为系统时钟执行程序。
需要注意的是,当系统时钟采用FXOSC或者PLL的时候,系统唤醒需要等待外部晶振起振和PLL锁定,而外部晶振起振时间一般是毫秒级别,所以说系统的唤醒时间会变长。如果应用对于唤醒时间要求比较高,难么建议采用FIRC作为系统的时钟,FIRC的启动时间只有几个微秒,即使从Standby模式唤醒,唤醒时间也之后几十微秒。
Power down模式是一种掉电模式,和传统的低功耗模式在使用上有一定的差异。Power down模式本质上是将芯片内部大部分威廉希尔官方网站 直接断电,从而降低整个系统的功耗。在power down模式下只有部分模块(lptmr,rtc,acmp,wku等)和部分SRAM可以继续保持工作,而包括CPU在内的其他模块和大部分SRAM都会直接断电,因为CPU和外设的数据无法保存,系统在唤醒的时候需要经过复位。
在power down模式下,芯片引脚状态(包含输入输出,上下拉及驱动强度配置)会保持进入低功耗模式之前的状态,当系统唤醒并重新复位之后,应用可以重新初始化芯片引脚功能。
YTM32芯片的电源模式主要通过power_manager
实现,用户可以根据自己的需要配置多种低功耗模式,然后通过相应的函数进行切换。电源模式的定义如下:
/*******************************************************************************
* Included files
******************************************************************************/
#include "power_config.h"
/*! @brief User Configuration structure pwrMan1_InitConfig4 */
power_manager_user_config_t pwrMan_InitConfigRun = {
.powerMode = POWER_MANAGER_RUN, /*!< 目标系统模式 */
.sleepOnExitValue = false, /*!< RUN模式无效 */
};
power_manager_user_config_t pwrMan_InitConfigSleep = {
.powerMode = POWER_MANAGER_SLEEP, /*!< 目标模式为Sleep睡眠模式 */
.sleepOnExitValue = false, /*!< 立即进入模式 */
};
power_manager_user_config_t pwrMan_InitConfigDeepSleep = {
.powerMode = POWER_MANAGER_DEEPSLEEP, /*!< 目标模式为DeepSleep深度睡眠模式 */
.sleepOnExitValue = false, /*!< 立即进入模式 */
};
power_manager_user_config_t pwrMan_InitConfigStandBy = {
.powerMode = POWER_MANAGER_STANDBY, /*!< 目标模式为Standby待机模式 */
.sleepOnExitValue = false, /*!< 立即进入模式 */
};
/*! @brief Array of pointers to User configuration structures */
power_manager_user_config_t * powerConfigsArr[] = {
&pwrMan_InitConfigRun,
&pwrMan_InitConfigSleep,
&pwrMan_InitConfigDeepSleep,
&pwrMan_InitConfigStandBy,
};
/*! @brief Array of pointers to User defined Callbacks configuration structures */
/* 定义模式切换之前和之后的回调函数 */
power_manager_callback_user_config_t * powerStaticCallbacksConfigsArr[] = {(void *)0};
模式切换函数:
#define RUN_MODE (0)
#define SLEEP_MODE (1)
#define DEEPSLEEP_MODE (2)
#define STANDBY_MODE (3)
void power_mode_swtich()
{
/* 初始化电源模式 */
POWER_SYS_Init(
&powerConfigsArr,
POWER_MANAGER_CONFIG_CNT,
&powerStaticCallbacksConfigsArr,
POWER_MANAGER_CALLBACK_CNT);
/* 设置电源模式 */
POWER_SYS_SetMode(STANDBY_MODE, POWER_MANAGER_POLICY_AGREEMENT);
}
全部0条评论
快来发表一下你的评论吧 !