產(chǎn)品簡(jiǎn)介
YTM32L系列MCU是蘇州云途半導(dǎo)體針對(duì)車身控制領(lǐng)域推出的入門級(jí)32位產(chǎn)品,最高主頻達(dá)48MHz,內(nèi)嵌128KB Flash和16KB SRAM,MCU內(nèi)嵌CAN-FD,LIN等豐富接口,滿足車規(guī)可靠性要求AEC-Q100。可以應(yīng)用于車身傳感器控制、電機(jī)控制、胎壓監(jiān)測(cè)、電動(dòng)座椅、電動(dòng)尾門、天窗、燈光控制及內(nèi)飾燈控制等方面。
YTM32 M系列芯片基于32位車規(guī)級(jí)ARM Cortex-M33內(nèi)核,CPU全溫域主頻高達(dá)120MHz,提供1.25MB嵌入式閃存,符合ISO26262的ASIL-B等級(jí)要求,可靠性滿足AEC-Q100、Grade1標(biāo)準(zhǔn),信息安全方面支持AES、SHA以及國(guó)密SM4等多種加密算法,并提供符合AUTOSAR標(biāo)準(zhǔn)的MCAL。
在低功耗方面,YTM32系列MCU支持Sleep,DeepSleep,Standby和Power Down(L系列不支持)幾種低功耗模式,其中Standby模式是CPU可以保留運(yùn)行狀態(tài)信息的最低功耗模式,Power Down模式則是只有部分模塊和部分SRAM可以保留運(yùn)行信息,其他模塊和CPU在內(nèi)都會(huì)斷電,系統(tǒng)喚醒之后需要重啟,該模式是系統(tǒng)的最低功耗模式。YTM32系列MCU通過(guò)多種低功耗模式組合能夠很好的滿足汽車應(yīng)用的低功耗需求。
低功耗模式簡(jiǎn)介
YTM系列MCU針對(duì)汽車的低功耗需求,定義了幾種不同的低功耗模式:
- Sleep模式,也稱為睡眠模式。這種模式下MCU內(nèi)部的時(shí)鐘都保持工作狀態(tài),CPU核心停止工作,等待外設(shè)中斷喚醒,因?yàn)橹挥蠧PU停止工作,所以一般功耗降低的比較少,但是系統(tǒng)可以最快速的喚醒,對(duì)于采用系統(tǒng)時(shí)鐘的外設(shè)也是沒(méi)有影響的。在Sleep模式下,芯片內(nèi)部電源模塊依然保持正常運(yùn)行狀態(tài),有比較高的帶負(fù)載能力。
- DeepSleep模式,也稱深入睡眠模式。這種模式下系統(tǒng)總線時(shí)鐘停止工作,CPU核心停止工作,等待外設(shè)中斷喚醒,此時(shí)對(duì)于采用系統(tǒng)時(shí)鐘作為主時(shí)鐘的外設(shè),比如eTMR,pTMR,DMA等模塊因?yàn)闆](méi)有了時(shí)鐘,所以都是不能工作的。系統(tǒng)的其他時(shí)鐘,比如FIRC,F(xiàn)XOSC等時(shí)鐘是可以根據(jù)時(shí)鐘配置選擇開(kāi)啟和關(guān)閉的,對(duì)于支持功能時(shí)鐘的外設(shè),如果相應(yīng)的時(shí)鐘保持開(kāi)啟,那這些模塊也是可以正常工作的。DeepSleep模式由于總線時(shí)鐘關(guān)閉,一些依賴總線時(shí)鐘的模塊也無(wú)法工作,所以功耗會(huì)有比較大的降低。在DeepSleep模式下,芯片內(nèi)部電源模塊依然保持正常運(yùn)行狀態(tài),有比較高的帶負(fù)載能力。從DeepSleep模式喚醒的時(shí)候,因?yàn)橐恍┕δ軙r(shí)鐘需要重新啟動(dòng),所以喚醒時(shí)間相比于Sleep模式會(huì)有一定的延長(zhǎng),這個(gè)時(shí)間還取決于有多少時(shí)鐘需要重新啟動(dòng)。
- Standby模式,也稱為待機(jī)模式。這種模式和DeepSleep模式的主要區(qū)別是芯片內(nèi)部的電源模塊工作在低功耗模式,此時(shí)芯片的帶負(fù)載能力有一定減弱。這種模式下對(duì)于支持功能時(shí)鐘的模塊,如果相應(yīng)的功能時(shí)鐘開(kāi)啟,這些模塊也可以正常工作,并可以正常喚醒芯片。這種模式下因?yàn)樾酒瑑?nèi)部電源模塊需要從正常工作模式轉(zhuǎn)換成低功耗模式,喚醒的時(shí)候需要從低功耗模式回到正常模式,所以進(jìn)入待機(jī)模式和從待機(jī)模式喚醒都需要一定的時(shí)間,這個(gè)時(shí)間一般是微秒級(jí)別。在Standby模式下,芯片內(nèi)部RAM數(shù)據(jù)依然保持,F(xiàn)lash進(jìn)入低功耗模式,所有模塊寄存器配置保持不變,所以喚醒的時(shí)候,CPU還是可以繼續(xù)運(yùn)行。
- PowerDown模式,也稱為掉電模式。這種模式芯片大部分數(shù)字電路的供電被斷開(kāi),只有少部分?jǐn)?shù)字邏輯單獨(dú)供電,芯片內(nèi)部電源模塊僅維持不斷電的少量數(shù)字邏輯供電,此時(shí)芯片的功耗是最低的。在PowerDown模式下僅有支持喚醒功能的IO可以喚醒系統(tǒng),另外還支持喚醒的內(nèi)部模塊包括lpTMR,RTC,ACMP等,模塊的功能時(shí)鐘也只有SIRC和SXOSC可以選擇。PowerDown模式因?yàn)榇蟛糠謹(jǐn)?shù)字電路都已經(jīng)斷電,所以喚醒的時(shí)候系統(tǒng)需要復(fù)位才能正常運(yùn)行。
Mode(模式) | Clock(時(shí)鐘) | 外設(shè) | 喚醒源 | 復(fù)位 | 功耗 |
---|---|---|---|---|---|
Sleep(睡眠) | 無(wú)變化 | 正常工作 | 所有中斷 | 否 | 稍有降低 |
DeepSleep(深度睡眠) | 總線時(shí)鐘關(guān)閉,功能時(shí)鐘可配置 | 支持功能時(shí)鐘,且功能時(shí)鐘開(kāi)啟的模塊正常工作 | 異步中斷,所有GPIO | 否 | 較低 |
Standby(待機(jī)) | 總線時(shí)鐘關(guān)閉,功能時(shí)鐘可配置 | 支持功能時(shí)鐘,且功能時(shí)鐘開(kāi)啟的模塊正常工作 | 異步中斷,所有GPIO | 否 | 很低 |
PowerDown(掉電) | SIRC/SXOSC可配置 | lpTMR, RTC, ACMP, WKU且有功能時(shí)鐘 | lpTMR, RTC, ACMP, WKU特定GPIO | 是 | 最低 |
低功耗模式流程
YTM32芯片的低功耗模式結(jié)合了ARM CPU的低功耗模式和整個(gè)MCU系統(tǒng)外設(shè)的低功耗模式,低功耗模式的進(jìn)入流程如下:
- 配置相應(yīng)的喚醒外設(shè),并開(kāi)啟對(duì)應(yīng)的NVIC中斷,保證系統(tǒng)可以正確的喚醒
- 應(yīng)用程序通過(guò)配置LDO的運(yùn)行模式?jīng)Q定系統(tǒng)在低功耗模式下的供電行為(DeepSleep/Standby/PowerDown),通過(guò)相關(guān)的時(shí)鐘配置設(shè)置相應(yīng)的時(shí)鐘在低功耗模式下是否開(kāi)啟
- 配置內(nèi)核寄存器的
SCB→SCR
寄存器的SCB_SCR_SLEEPDEEP_Msk
比特決定系統(tǒng)進(jìn)入Sleep模式還是Deep Sleep模式 - 執(zhí)行
WFI
指令進(jìn)入低功耗模式
系統(tǒng)執(zhí)行WFI
指令之后,硬件會(huì)依據(jù)電源和時(shí)鐘的配置自動(dòng)關(guān)閉對(duì)應(yīng)的時(shí)鐘,然后切換系統(tǒng)電源,整個(gè)過(guò)程無(wú)需軟件參與,芯片引腳將保持原有的功能配置和輸入輸出狀態(tài),進(jìn)出低功耗模式過(guò)程中,應(yīng)用無(wú)需對(duì)芯片引腳做特殊的配置。
另外,進(jìn)出低功耗模式過(guò)程中,系統(tǒng)的時(shí)鐘也是硬件切換的,應(yīng)用軟件無(wú)需做時(shí)鐘切換。當(dāng)系統(tǒng)從低功耗模式喚醒的時(shí)候,系統(tǒng)會(huì)自動(dòng)恢復(fù)低功耗之前的時(shí)鐘配置模式,然后從WFI指令位置繼續(xù)往下執(zhí)行程序(Power Down模式需要復(fù)位)。比如系統(tǒng)進(jìn)入低功耗模式之前系統(tǒng)時(shí)鐘為PLL,PLL參考時(shí)鐘為外部晶振FXOSC,當(dāng)系統(tǒng)進(jìn)入低功耗模式(Deep Sleep和Standby)時(shí)PLL和外部晶振被硬件關(guān)閉,在喚醒過(guò)程中,系統(tǒng)硬件可以直接重新開(kāi)啟FXOSC和PLL,并等待PLL鎖定后將PLL作為系統(tǒng)時(shí)鐘執(zhí)行程序。
需要注意的是,當(dāng)系統(tǒng)時(shí)鐘采用FXOSC或者PLL的時(shí)候,系統(tǒng)喚醒需要等待外部晶振起振和PLL鎖定,而外部晶振起振時(shí)間一般是毫秒級(jí)別,所以說(shuō)系統(tǒng)的喚醒時(shí)間會(huì)變長(zhǎng)。如果應(yīng)用對(duì)于喚醒時(shí)間要求比較高,難么建議采用FIRC作為系統(tǒng)的時(shí)鐘,F(xiàn)IRC的啟動(dòng)時(shí)間只有幾個(gè)微秒,即使從Standby模式喚醒,喚醒時(shí)間也之后幾十微秒。
Power Down模式說(shuō)明
Power down模式是一種掉電模式,和傳統(tǒng)的低功耗模式在使用上有一定的差異。Power down模式本質(zhì)上是將芯片內(nèi)部大部分電路直接斷電,從而降低整個(gè)系統(tǒng)的功耗。在power down模式下只有部分模塊(lptmr,rtc,acmp,wku等)和部分SRAM可以繼續(xù)保持工作,而包括CPU在內(nèi)的其他模塊和大部分SRAM都會(huì)直接斷電,因?yàn)镃PU和外設(shè)的數(shù)據(jù)無(wú)法保存,系統(tǒng)在喚醒的時(shí)候需要經(jīng)過(guò)復(fù)位。
在power down模式下,芯片引腳狀態(tài)(包含輸入輸出,上下拉及驅(qū)動(dòng)強(qiáng)度配置)會(huì)保持進(jìn)入低功耗模式之前的狀態(tài),當(dāng)系統(tǒng)喚醒并重新復(fù)位之后,應(yīng)用可以重新初始化芯片引腳功能。
芯片低功耗模式代碼
YTM32芯片的電源模式主要通過(guò)power_manager
實(shí)現(xiàn),用戶可以根據(jù)自己的需要配置多種低功耗模式,然后通過(guò)相應(yīng)的函數(shù)進(jìn)行切換。電源模式的定義如下:
/*******************************************************************************
* Included files
******************************************************************************/
#include "power_config.h"
/*! @brief User Configuration structure pwrMan1_InitConfig4 */
power_manager_user_config_t pwrMan_InitConfigRun = {
.powerMode = POWER_MANAGER_RUN, /*!< 目標(biāo)系統(tǒng)模式 */
.sleepOnExitValue = false, /*!< RUN模式無(wú)效 */
};
power_manager_user_config_t pwrMan_InitConfigSleep = {
.powerMode = POWER_MANAGER_SLEEP, /*!< 目標(biāo)模式為Sleep睡眠模式 */
.sleepOnExitValue = false, /*!< 立即進(jìn)入模式 */
};
power_manager_user_config_t pwrMan_InitConfigDeepSleep = {
.powerMode = POWER_MANAGER_DEEPSLEEP, /*!< 目標(biāo)模式為DeepSleep深度睡眠模式 */
.sleepOnExitValue = false, /*!< 立即進(jìn)入模式 */
};
power_manager_user_config_t pwrMan_InitConfigStandBy = {
.powerMode = POWER_MANAGER_STANDBY, /*!< 目標(biāo)模式為Standby待機(jī)模式 */
.sleepOnExitValue = false, /*!< 立即進(jìn)入模式 */
};
/*! @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 */
/* 定義模式切換之前和之后的回調(diào)函數(shù) */
power_manager_callback_user_config_t * powerStaticCallbacksConfigsArr[] = {(void *)0};
模式切換函數(shù):
#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);
/* 設(shè)置電源模式 */
POWER_SYS_SetMode(STANDBY_MODE, POWER_MANAGER_POLICY_AGREEMENT);
}
芯片低功耗模式常見(jiàn)問(wèn)題匯總
- 芯片建議的低功耗模式是哪種,芯片處于低功耗模式下可以通過(guò)哪些模塊喚醒?
YTM32B1L系列芯片最低只支持到Standby模式(不支持PowerDown模式),這種模式下所有的GPIO都是可以正常喚醒的芯片的,另外一些支持功能時(shí)鐘的模塊,比如lpTMR, I2C, SPI, UART, RTC, ACMP等模塊也是可以正常喚醒芯片的。
YTM32B1M/H系列芯片最低功耗模式時(shí)Power Down,這種模式下只有支持WKU功能的PIN可以正常喚醒的芯片,另外一些在低功耗電源域的模塊,比如lpTMR, RTC, ACMP等模塊也是可以正常喚醒芯片的。 - 為什么當(dāng)我進(jìn)入Standby/PowerDown模式的時(shí)候,測(cè)量的電流要比數(shù)據(jù)手冊(cè)上標(biāo)的值高很多?
這是一個(gè)我們進(jìn)行低功耗模式調(diào)試時(shí)經(jīng)常碰到的一個(gè)問(wèn)題,針對(duì)這個(gè)問(wèn)題一般有以下幾種原因:- 系統(tǒng)進(jìn)入沒(méi)有正確進(jìn)入低功耗模式,此時(shí)系統(tǒng)電流和Sleep模式相當(dāng),如果發(fā)現(xiàn)是這種情況,那么就要看是不是有模塊產(chǎn)生了喚醒中斷,比如GPIO開(kāi)啟了中斷喚醒功能,但是系統(tǒng)并沒(méi)有使能GPIO的中斷(NVIC模塊禁用了中斷),這個(gè)時(shí)候系統(tǒng)是無(wú)法進(jìn)入Standby模式,因?yàn)楫?dāng)系統(tǒng)開(kāi)始進(jìn)入低功耗模式的時(shí)候,發(fā)現(xiàn)有一個(gè)Pending的外部中斷沒(méi)有響應(yīng),而這個(gè)中斷是可以喚醒系統(tǒng)的,所以系統(tǒng)便會(huì)退出進(jìn)入低功耗模式,轉(zhuǎn)而等待這個(gè)中斷被系統(tǒng)響應(yīng),而這個(gè)時(shí)候NVIC禁用了這個(gè)中斷,所以CPU依然保持Sleep模式,系統(tǒng)上表現(xiàn)進(jìn)入了低功耗模式,而實(shí)際上是進(jìn)入了Sleep模式,對(duì)于這種情況,我們就要排查系統(tǒng)使能的模塊是否在系統(tǒng)進(jìn)入standby模式的時(shí)候產(chǎn)生了中斷。
- 系統(tǒng)進(jìn)入了低功耗模式,但是電流在200uA左右,這種情況從電流上看是進(jìn)入了Standby模式,模式電流偏高的原因可能是在Standby模式下開(kāi)啟了部分的功能時(shí)鐘,比如SIRC或者FXOSC,并且有一些模塊正在工作,比如lpTMR以SIRC作為功能時(shí)鐘工作,這種情況是比較正常的,如果不需要SIRC時(shí)鐘,那么可以修改時(shí)鐘配置,從而進(jìn)一步降低系統(tǒng)功耗。數(shù)據(jù)手冊(cè)上面的電流數(shù)據(jù)一般都是在關(guān)閉這些功能時(shí)鐘的情況下測(cè)試得到的。
- 電流偏高的另外一個(gè)原因可能是GPIO上有一定的負(fù)載,比如GPIO的輸入模式開(kāi)啟了上拉電阻,但是外部負(fù)載是將GPIO拉低的,或者GPIO輸出了一個(gè)高電平,而外部負(fù)載并不是高阻態(tài),這兩種情況都會(huì)導(dǎo)致GPIO上面有比較大的電流。
- 是否外接了調(diào)試器,在低功耗模式下,接入調(diào)試器也會(huì)引入一定的額外功耗,所以測(cè)量低功耗模式電流時(shí)候務(wù)必?cái)嚅_(kāi)調(diào)試器連接
- 從低功耗模式喚醒的時(shí)候,外設(shè)需要重新配置嗎?進(jìn)入低功耗模式之前外設(shè)是不是需要做特殊的操作?
對(duì)于大部分外設(shè),進(jìn)出低功耗都不需要做特殊的操作,因?yàn)閅TM32B1L外設(shè)都是不掉電的,所有的配置都是可以保留的,所以從低功耗模式喚醒之后可以繼續(xù)使用,并不需要重新初始化。
對(duì)于部分外設(shè),當(dāng)系統(tǒng)請(qǐng)求進(jìn)入低功耗模式的時(shí)候,如果外設(shè)正在工作,那么外設(shè)會(huì)block系統(tǒng)的低功耗請(qǐng)求,直到當(dāng)前操作完成,如果系統(tǒng)長(zhǎng)時(shí)間沒(méi)有得到外設(shè)的響應(yīng),系統(tǒng)會(huì)直接產(chǎn)生Reset。比如DMA正在傳輸數(shù)據(jù)的時(shí)候,系統(tǒng)請(qǐng)求進(jìn)入低功耗模式,這個(gè)時(shí)候?yàn)榱朔乐箶?shù)據(jù)丟失,DMA需要完成當(dāng)前數(shù)據(jù)傳輸之后才會(huì)響應(yīng)低功耗模式請(qǐng)求。 - 低功耗模式下怎么喚醒芯片?
參考前面的表格,Sleep模式下,所有外設(shè)都是正常工作的,實(shí)際上只有CORE處于Sleep狀態(tài),此時(shí)所有外設(shè)的中斷都可以喚醒芯片。在DeepSleep和Standby模式下,首先我們要在芯片手冊(cè)的NVIC表格中看模塊Wakeup列是否標(biāo)為可喚醒,另外當(dāng)模塊工作時(shí)需要時(shí)鐘(比如lpTMR,RTC),那么還要保證模塊的功能時(shí)鐘在低功耗模式下保持開(kāi)啟才能正常喚醒。當(dāng)使用GPIO作為喚醒源的時(shí)候,要注意以下幾點(diǎn):- GPIO未開(kāi)啟數(shù)字濾波功能,GPIO開(kāi)啟了上升沿/下降沿/雙沿中斷時(shí),中斷可以直接喚醒芯片
- GPIO開(kāi)啟數(shù)字濾波功能,數(shù)字濾波時(shí)鐘選擇系統(tǒng)時(shí)鐘,此時(shí)系統(tǒng)進(jìn)入低功耗模式時(shí)GPIO數(shù)字濾波自動(dòng)禁用,GPIO中斷可以直接喚醒芯片
- GPIO開(kāi)啟數(shù)字濾波功能,數(shù)字濾波時(shí)鐘選擇128K時(shí)鐘,此時(shí)必須確保128K時(shí)鐘在低功耗模式開(kāi)啟才能正常喚醒,GPIO數(shù)字濾波功能也可以正常工作
評(píng)論
查看更多