當 I.MXRT1170進入 SNVS模式,所有的電源域除了 SNVS域以外都會關閉,功耗最低達到uA級,這意味著 ROM將會在喚醒后運行。ROM會使用SPI模式讀命令,Octal Flash會在 OCR(Octal讀)模式。在進入 SNVS模式前復位 Octal Flash芯片,或者將設置 RT1170進入SNVS模式的代碼放在RAM中運行,使用 POR引腳作為復位信號復位 Octal Flash,使用BOOT ROM 去復位 Octal Flash。
WAKEUP引腳默認內部是輸入上拉的,大約在 35k左右。
喚醒引腳是一個 GPIO,由 SNVS 電源域供電配置為喚醒源。喚醒引腳會將 PMIC_ON_REQ為高電平,請求主SOC上電以退出SNVS模式。
請求主SoC電源狀態改變的硬件ON/OFF按鈕輸入信號。在OFF模式下與GND的短暫連接會導致內部電源管理狀態機將狀態更改為ON。在ON模式下,與GND短暫連接會產生中斷(與GND大約5秒或更長時間)會導致強制OFF。
喚醒引腳會將PMIC_ON_REQ 設置為高,而不是翻轉。
此外除了 GPIO喚醒外,也可以通過內部 RTC喚醒,相關參考代碼如下。
#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"
#include "fsl_snvs_hp.h"
void GPC_EnableWakeupSource(uint32_t irq)
{
GPC_CM_EnableIrqWakeup(GPC_CPU_MODE_CTRL_0, irq, true);
}
void gpc_configure_lprtc_wakeup(uint32_t time_length){
SNVS->LPCR &= ~SNVS_LPCR_SRTC_ENV_MASK;
while ((SNVS->LPCR & SNVS_LPCR_SRTC_ENV_MASK))
{ }
/* 禁止 SRTC 告警中斷*/
SNVS->LPCR &= ~SNVS_LPCR_LPTA_EN_MASK;
while ((SNVS->LPCR & SNVS_LPCR_LPTA_EN_MASK))
{}
SNVS->LPSRTCMR = 0x00;
SNVS->LPSRTCLR = 0x00;
SNVS->LPTAR = time_length;
EnableIRQ(SNVS_HP_NON_TZ_IRQn);
SNVS->LPCR |= SNVS_LPCR_SRTC_ENV_MASK | SNVS_LPCR_LPTA_EN_MASK;
while (!(SNVS->LPCR & SNVS_LPCR_LPTA_EN_MASK))
{ } /* 使能 GPC 中斷*/
GPC_EnableWakeupSource(SNVS_HP_NON_TZ_IRQn);
}
void SNVS_HP_NON_TZ_IRQHandler(void)
{
// if (SNVS_HP_RTC_GetStatusFlags(SNVS) & kSNVS_RTC_AlarmInterruptFlag)
// {
// SNVS_HP_RTC_ClearStatusFlags(SNVS, kSNVS_RTC_AlarmInterruptFlag);
// }
//
// SNVS_HP_RTC_GetEnabledInterrupts(SNVS);
//SNVS->LPSR &= ~(1<<30);
SNVS->LPSR |= 0x1;
SDK_ISR_EXIT_BARRIER;
}
int main(void)
{
char ch;
BOARD_ConfigMPU();
BOARD_InitPins();
BOARD_BootClockRUN();
BOARD_InitDebugConsole();
PRINTF("hello world. ");
GETCHAR();
gpc_configure_lprtc_wakeup(5);
SNVS->LPCR |= SNVS_LPCR_TOP_MASK;
while(1);
}
SNVS喚醒源可以是:GPIO喚醒引腳;RTC喚醒;POR。通常,使用SRC->SRSR[ipp_reset_b]來檢測POR復位。但測試后,即使使用WAKEUP引腳退出SNVS模式,SRC->SRSR[ipp_reset_b]仍為1,與退出SNVS方式的按鍵復位相同。那么,在退出SNVS模式后,有其他方法可以檢測細節喚醒源嗎?主要需要知道從SNVS低功耗模式喚醒,而不僅僅是從電源POR喚醒。
從SOC的角度來看,POR或SNVS喚醒復位相同。因此,無論POR或使用WAKEUP引腳退出SNVS模式,SRC->SRSR[ipp_reset_b]始終為1。一種可以知道從SNVS或POR喚醒的解決方案是使用SNVS_LP GPR寄存器作為標志。例如:
1.將1寫入LPGPR0;2.SOC進入SNVS低功耗模式;3.當SOC啟動時,讀取LPGPR0。4.如果LPGPR0=0,則為POR。如果LPGPR0=1,則從SNVS低功耗模式喚醒。
操作方法如下:通過SNVS LP控制寄存器中的GPR_Z_DIS位禁用GPR歸零。使用SNVS->LPCR |= 1<<24;操作代碼。如果不執行這個代碼,直接寫入 LPGPR寄存器是無效的。
從 SNVS喚醒到 PMIC_ON_REQ輸出大約是 0.1ms的時間,如下圖所示。對于用戶來說,需要考慮PMIC_ON_REQ 到外部電源之間的時間間隔,上電順序的時間間隔這取決于外部電路,尤其是復位IC。
2) PMIC_ON_REQ 輸出使能外部的電源,這個時間間隔取決于外部電路,對于EVK來說大約需要40ms。
通電后,關于上電順序的時間間隔大約是SOC復位到第一個MCU指令,大約為8ms。
從喚醒按鍵釋放到處理器 MCU 執行指令大約需要260或270毫秒!這是因為開發板外部復位電路給了非常充裕的時間來釋放復位。
1)外部GPIO輸入觸發和PMIC_ON_REQ輸出
例如,這將使PMIC使能信號上升。從SNVS喚醒引腳輸入到PMIC_ON_REQ輸出大約需要0.1ms。
2) 電源上電(取決于系統)
2.1 ) PMIC_ON_REQ 輸出以啟用外部加電.
例如,PMIC啟用DCDC_3v3。這可能需要一些時間,從6毫秒(測量值)到40毫秒。
2.2 ) 復位釋放
在EVK中,復位監控IC將等待大量時間來解除MCU復位。例如,260ms。該延遲是確保所有電源域已經達到穩定的最安全裕度。
3) 復位后的MCU引導時間
這將需要 6~7ms(考慮到在GPIO切換之前一直在測量,測量時間為9ms)。希望在20毫秒動力CAN或者 100毫秒車身CAN 要求更短的時間內從SNVS中喚醒并執行代碼。應該注意電源上電序列!例如,確保調整外部復位電路復位的時間。此外,與其他電源模式相比,SNVS不會占用最大的延遲。MCU 將簡單地從復位中恢復!會發現系統可能需要更長的恢復時間,但這是因為外部電源再次通電(包括復位)。
對于wakeup喚醒電平要求:
支持低電平,高電平,上升沿,下降沿喚醒。
當器件從SNVS模式喚醒時,用戶可以知道系統從SNVS方式恢復的另外一種方法。試圖檢查SRC和SRSR,但找不到任何適合此要求的標志。使用SNVS-GPR32,當發生篡改事件時不會清除。還有一個鎖定位控制,可以用來阻止位修改,直到重新上電。
RT1170在內部處理上電序列,LPSR LDO將在開啟DCDC之前啟用。LPSR_1P0必須在DCDC啟用之前通電,喚醒流程將在內部處理此問題。(LPSR_1P0是LDO,而不是DCDC,VCC_SOC和VDDA_1V8)。
如果有喚醒異常的情況,比如VDD_SOC_IN電壓一直為0的情況,這時需要檢查 DCDC_PSWITCH的電壓是否有從低到高變化的過程。與EVK相同的原始硬件:30k上拉電阻+0.22uF對地電容:如果3.3V系統電壓沒有降至0并立即通電,則無法產生1.1V內核電壓。將30k電阻更改為130k,然后在這種情況下,1.1V內核電壓正確啟動。如果在某些情況下,3.3V系統電壓不能從0V通電,例如從2V通電,那么RC延遲時間的要求是什么?
????從DCDC_IN 穩定在 3V時到 DCDC-PSWITCH達到 0.5*DCDC_IN(1.5v)的延遲必須至少為1ms。如果 DCDC_IN電壓短時下降,該電壓不會降至0(例如僅降至2V),并立即升到3.3V,內部1.1V內核電壓降至0,并且由于PSWITCH沒有從0開始上升,而導致內核電壓不會再次產生。這種情況在應用中是可能的,如何確保PSWITCH RC延遲時間?這個問題是由RC電路沒有完全放電引起的,電源關閉,RC電路放電到低電平也需要時間,所以要使其工作,可以檢測PSWITCH,確保它是0V,然后再通一次電源,它應該工作。在電壓驟降的情況下,3.3V DCDC_IN到DCDC-PSWITCH之間的1ms延遲達到0.5*DCDC_IN(1.5v)就不能保證,因為3.3V DCDC _IN可能在任何電壓下下降(例如>1.5v)并立即啟動(這可能發生在工業現場)。
解答:上電復位,在任何條件下,都需要確保 DCDC_PSWITCH 引腳在上電前低于0.5 V。建議使用RC延遲電路來提供DCDC_IN 穩定和DCDC_PSWITCH之間的延遲,總 RC延遲應為5-40毫秒。
?DCDC_IN必須在0.3 x RC時間范圍內達到最低3.0 V。
?從DCDC_IN穩定在3.0 V (最小電壓)到DCDC_PSWITCH達到0.5 x DCDC_IN(1.5 V)的延遲必須至少為1 ms。DCDC_PSWITCH延遲超過1ms以打開內部DCDC。
?其他電源域的加電轉換速率規格為360V/s–36KV/s。
審核編輯:湯梓紅
-
FlaSh
+關注
關注
10文章
1642瀏覽量
148672 -
soc
+關注
關注
38文章
4204瀏覽量
219093 -
SPI
+關注
關注
17文章
1721瀏覽量
92124 -
引腳
+關注
關注
16文章
1220瀏覽量
50901 -
GPIO
+關注
關注
16文章
1216瀏覽量
52377
原文標題:MIMXRT1172 SNVS模式Wakeup喚醒
文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論