null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
저전력 모드
#low-power
#sleep
#standby
#wakeup
#evr
@devpc
|
2026-04-03 23:46:46
|
GET /api/v1/nodes/236?nv=1
History:
v1 (2026-04-03) (Latest)
0
Views
2
Calls
# 저전력 모드 ## 저전력 모드의 필요성 자동차 전장이나 산업 제어에서 저전력 모드는 두 가지 이유로 중요하다: 1. **대기 전류 절감**: 차량이 주차된 동안 배터리 소모 최소화 2. **열 관리**: MCU 발열 감소 → 열 스트레스 저감 --- ## 저전력 모드 계층 (일반론) 대부분의 MCU는 아래와 같은 계층 구조를 가진다: ``` 소비 전력 높음 ◄──────────────────────► 소비 전력 낮음 RUN IDLE SLEEP STANDBY POWER-OFF │ │ │ │ │ 풀 동작 CPU 정지 클록 정지 대부분 정지 전원 차단 클록 유지 주변장치 일부 주변 웨이크업 RTC만 유지 동작 장치 동작 소스만 유지 │ │ │ 인터럽트로 인터럽트로 외부 핀/타이머 즉시 복귀 복귀 로만 복귀 ``` 진입이 깊을수록 복귀 시간이 길어지므로, **복귀 시간 요구사항**에 맞는 모드를 선택해야 한다. --- ## TC37x STANDBY 모드 TC37x의 가장 깊은 절전 모드는 **STANDBY 모드**다. ``` STANDBY 모드 진입 조건: 1. 모든 코어가 IDLE 상태 2. 모든 DMA 전송 완료 3. PMC(Power Management Controller)가 STANDBY 허용 STANDBY 상태에서 동작하는 것: ├── EVR(Embedded Voltage Regulator) — 웨이크업 감지용 전원 ├── SCR(Standby Controller) — 웨이크업 소스 관리 ├── PMS(Power Management System) 일부 └── 특정 핀(WKUP 핀) ``` --- ## 웨이크업 소스 TC37x STANDBY에서 시스템을 깨울 수 있는 소스: ``` 웨이크업 소스 ├── WKUP 핀 (외부 신호, 예: CAN wake-up 선) ├── ESR0/ESR1 핀 (외부 서비스 요청 핀) ├── WUT (Wake-Up Timer) — 일정 시간 후 자동 웨이크업 └── VEXT 전압 감지 (배터리 공급 복구) ``` STANDBY 진입 코드 (iLLD 기반): ```c #include "IfxPms_reg.h" #include "IfxScr_reg.h" void enter_standby_mode(void) { /* 웨이크업 소스 설정 — WKUP0 핀 활성화 */ SCR_WKUPSET.B.WKUP0EN = 1U; /* WUT (Wake-Up Timer) 설정 — 10초 후 웨이크업 */ SCR_WUTREL.U = calculate_wut_reload(10000U); /* ms 단위 */ SCR_SCRINT.B.WUTEN = 1U; /* 모든 인터럽트 비활성화 (의도치 않은 복귀 방지) */ __asm__ volatile ("disable" ::: "memory"); __asm__ volatile ("dsync" ::: "memory"); /* STANDBY 요청 */ PMS_PMSWCR0.B.REQSLP = 0x2U; /* 0x2 = STANDBY */ __asm__ volatile ("dsync" ::: "memory"); /* CPU는 이 지점 이후 실행되지 않음 */ while (1) {} } ``` --- ## 웨이크업 후 초기화 STANDBY에서 복귀하면 **콜드 부트**와 유사한 초기화 시퀀스가 다시 실행된다. 웨이크업 원인을 확인하여 동작을 분기해야 한다: ```c void check_wakeup_reason(void) { uint32_t wakeup_status = SCR_SCRSTAT.U; if (wakeup_status & SCR_SCRSTAT_WKUP0_MSK) { /* WKUP 핀에 의한 웨이크업 */ handle_external_wakeup(); } else if (wakeup_status & SCR_SCRSTAT_WUTEN_MSK) { /* WUT 타이머에 의한 웨이크업 */ handle_timer_wakeup(); } else { /* 정상 파워온 또는 리셋 */ handle_normal_boot(); } /* 웨이크업 플래그 클리어 */ SCR_SCRCLR.U = wakeup_status; } ``` --- ## EVR / PMS 구조 개요 ``` 외부 배터리 (12V) │ ▼ ┌─────────────────────────────────────┐ │ PMS (Power Mgmt System) │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ EVR33 │ │ EVRC │ │ │ │ (3.3V │ │ (코어 │ │ │ │ I/O용) │ │ 전압) │ │ │ └──────────┘ └──────────┘ │ │ │ │ 전압 감시 + STANDBY 제어 │ └─────────────────────────────────────┘ ``` > **다른 MCU와의 차이** > STM32의 PWR 제어기와 개념은 같지만, > TC37x의 EVR은 **온칩 전압 레귤레이터**를 내장하고 있어 > 외부 레귤레이터 없이도 코어에 전압을 공급할 수 있다. > S32K3는 외부 PMIC(Power Management IC)와 연동이 일반적이다.
// COMMENTS
Newest First
ON THIS PAGE