معماری Power FSM و Power Sequencer در PMU اپل؛ بررسی Stateها و توالی توان Brooklands
در چهارمین مقاله از مجموعه معماری PMU اپل، منطق Power FSM و Power Sequencer در Brooklands را بررسی میکنیم؛ از RESET، PMU_OFF و PMU_ACTIVE گرفته تا AWAKE، Sleep Stateها، POWER_UP، POWER_DOWN، Secure Firmware، Enable Bitها، Slotها، Slot Timerها و ترتیب واقعی روشن و خاموششدن Railها.
دامنه این مقاله
این مقاله بر Chapter 7 سند Brooklands با عنوان Power FSM متمرکز است. Brooklands دارای Power-FSM قابل پیکربندی است و در معماری مرجع بهعنوان Leader PMU عمل میکند. Follower Mode برای خود Brooklands پشتیبانی نمیشود؛ با این حال Leader میتواند منابع PMUهای Follower دیگر را از طریق SGPIO و vGPIO در توالی توان هماهنگ کند.
چرا داشتن یک Buck یا LDO سالم برای تولید Rail کافی نیست؟
تولید ولتاژ فقط زمانی اتفاق میافتد که منطق State و Sequencing اجازه فعالشدن منبع را بدهد.
در مقالات قبلی دیدیم Buck و LDO چگونه ولتاژهای مختلف را تولید میکنند. اما وجود یک مبدل سالم به این معنی نیست که خروجی آن باید در تمام لحظات دستگاه حاضر باشد.
Brooklands باید بداند سیستم در چه وضعیت توانی قرار دارد، چه Transitionی در حال انجام است، چه Railهایی برای State مقصد لازم هستند و هرکدام در چه زمانی باید روشن یا خاموش شوند.
State فعلی PMU و Transitionهای مجاز میان حالتهای توان را مدیریت میکند.
تغییر واقعی Railها و منابع را با ترتیب و Timing مشخص اجرا میکند.
سه Hardware State اصلی Brooklands
ساختار اصلی Power FSM حول سه State سختافزاری پایدار شکل گرفته است.
State بازنشانی سختافزاری و نقطه ورود PMU پس از POR یا برخی Crash Sequenceها.
Host خاموش است و PMU در کممصرفترین State طراحیشده قرار دارد، اما منطق لازم برای Wakeup همچنان فعال است.
Secure Firmware فعال است و Virtual Stateهای AWAKE و SLEEP در این Hardware State میزبانی میشوند.
Hardware Transitional Stateها
بین Stateهای اصلی چند State انتقالی وجود دارد که هرکدام وظیفه مشخصی در Startup، Shutdown یا Recovery دارند.
مسیر Startup؛ از RESET تا AWAKE
Startup Brooklands یک روشنشدن مستقیم نیست و چند مرحله سختافزاری و نرمافزاری پشت سر هم اجرا میشوند.
RESET؛ بازگرداندن PMU به وضعیت شناختهشده
Power FSM هنگامی وارد RESET میشود که Power-On Reset فعال باشد یا پس از برخی Crash Sequenceها نیاز به بازنشانی سیستم وجود داشته باشد.
ورود به RESET باعث میشود Reset Domainهای مربوطه PMU را به وضعیت شناختهشدهای برگردانند تا فرآیند Initialization دوباره آغاز شود.
OTP_READ؛ تنظیمات PMU پیش از کار عادی
در OTP_READ، دادههای OTP در Registerهای Configuration و Trim بارگذاری میشوند.
این تنظیمات میتوانند رفتار Power Stateها، Rail Configuration، Timerها، Protection، Sequencing و بسیاری از قابلیتهای PMU را تعیین کنند.
POWER_DOWN؛ فقط برای Shutdown نیست
نام POWER_DOWN ممکن است این تصور را ایجاد کند که این State تنها هنگام خاموششدن دستگاه استفاده میشود؛ در حالی که در Startup نیز پس از OTP_READ بهعنوان یک State انتقالی به کار میرود.
فراهمکردن زمان لازم برای Settling بخشهای Analog و Digital پس از بارگذاری OTP، پیش از ادامه فرآیند ورود به PMU_OFF.
PMU_OFF؛ خاموش اما نه بدون منطق
در PMU_OFF، Host خاموش است و سیستم برای کمترین مصرف طراحی شده است؛ اما PMU باید همچنان بتواند Wakeup Eventهای معتبر را دریافت و فرآیند Power-Up را آغاز کند.
POWER_UP
POWER_UP یک State مبتنی بر Timer است. در Leader Mode زمان لازم برای آمادهشدن PMUهای همراه جهت دریافت SGPIO فراهم میشود.
SECURE_FW_BOOT
Secure Cortex-M23 فعال میشود، Bootloader کد Secure Firmware را از OTP به SRAM منتقل میکند و پس از Initialization اجازه ورود به PMU_ACTIVE صادر میشود.
PMU_ACTIVE با AWAKE یک State نیست
PMU_ACTIVE یک Hardware State است که Secure Firmware در آن فعال است. اما AWAKE یک Virtual Power State است که درون PMU_ACTIVE مدیریت میشود.
پس از ورود به PMU_ACTIVE، Secure Firmware توالی PWR_SEQ_OFF_TO_AWAKE را اجرا میکند. با پایان این توالی PMU عملاً وارد AWAKE میشود.
Virtual Stateهای Brooklands
زمانی که PMU در Hardware State فعال قرار دارد، Secure Firmware وضعیتهای منطقی توان را مدیریت میکند.
| State | نام | نقش کلی |
|---|---|---|
| AWAKE | Active | حالت فعال Virtual |
| SLEEP1 | SLP_DDR | اولین سطح Sleep |
| SLEEP1P5 | SLP_CACHE | State میانی Cache Sleep |
| SLEEP2 | SLP_S2R | حالت کممصرف عمیقتر |
| SLEEP3 | SLP_SMC | مسیر Sleep مستقل از AWAKE |
| SLEEP4 | LPEM | Low Power Energy Mode |
مسیرهای اصلی میان AWAKE و Sleep Stateها
همه Sleep Stateها مستقیماً به یکدیگر متصل نیستند. Transition مجاز توسط Virtual FSM و Secure Firmware تعریف میشود.
Sleep همیشه به معنی خاموششدن Rail نیست
در برخی Sleep Stateها، منبع توان میتواند همچنان روشن باشد اما وارد Low-Power Mode شود.
Power Sequencer؛ اجرای واقعی Transition
در Brooklands، Power Sequenceهای عادی توسط Secure Firmware مدیریت میشوند. Rapid Crash استثنای اصلی است که Sequence معمولی Firmware را دنبال نمیکند.
هر Sequence از مجموعهای Slot تشکیل میشود و منبع یا Signal موردنظر میتواند به یکی از این Slotها اختصاص پیدا کند.
تعداد Slotها در Power Sequenceهای مختلف
تمام Transitionها تعداد Slot یکسان ندارند.
بیشتر Transitionهای دیگر Brooklands.
Enable Bitها؛ هر Rail برای هر State Configuration مستقل دارد
Power Sequencer برای بیشتر منابع مجموعهای ON/OFF Configuration دارد که مشخص میکند Rail در هر State چه وضعیتی داشته باشد.
یک Rail میتواند در AWAKE فعال، در SLEEP1 همچنان فعال، در SLEEP2 وارد Low-Power Mode و در SLEEP4 کاملاً غیرفعال باشد.
Hardware Control و Firmware Control چگونه جابهجا میشوند؟
در PMU_ACTIVE، Virtual Stateها تحت کنترل Secure Firmware هستند. Firmware هنگام اجرای Power Sequence میتواند کنترل مستقیم PD_EN را در دست بگیرد و پس از پایان Sequence، کنترل را به ON/OFF Configuration State مقصد بازگرداند.
Sequencer فقط Enable را کنترل نمیکند
State Configuration میتواند پارامترهای دیگری را نیز همراه با روشن و خاموششدن منابع تغییر دهد.
Slot؛ واحد زمانی Power Sequence
تغییر Railها در یک Transition به Slotهای متوالی تقسیم میشود. هر Resource میتواند به Slot مشخصی اختصاص پیدا کند و چند Resource نیز میتوانند یک Slot مشترک داشته باشند.
Slot Timer؛ ترتیب زمانی دقیق Railها
Slotها دارای Timer چهار بیتی هستند. بنابراین Sequencer نهتنها ترتیب منابع، بلکه فاصله زمانی میان تغییرات را نیز کنترل میکند.
| Setting | Delay Typical |
|---|---|
| 0 | 0 µs |
| 1 | 32 µs |
| 2 | 64 µs |
| 3 | 128 µs |
| 4 | 320 µs |
| 5 | 640 µs |
| 6 | 1.28 ms |
| 7 | 2.56 ms |
| 8 | 250 µs |
| 9 | 500 µs |
| A | 1 ms |
| B | 2 ms |
| C | 5 ms |
| D | 10 ms |
| E | 20 ms |
| F | 50 ms |
Power-Up Sequence
Slotهای Power-Up از شماره پایین به بالا اجرا میشوند.
Power-Down Sequence
Slotهای Power-Down در جهت معکوس شمارهگذاری و اجرا میشوند.
Preemptive Bias Enable؛ آمادهسازی Rail قبل از روشنشدن
برای سریعترشدن برخی Power-Up Sequenceها، Sequencer میتواند Bias داخلی Buckها و بعضی LDOها را پیش از Enable واقعی Rail فعال کند.
در این حالت Bias در Slot 0 آماده میشود و Rail در Slot بعدی یا Slotهای بعدی روشن میشود. بنابراین بخشی از Startup Delay با Pipeline کردن مراحل پنهان میشود.
Anti Voltage Glitch؛ جلوگیری از Pulseهای کوتاه Enable/Disable
برخی Railها مکانیزم محافظتی در برابر تغییرات کوتاه و ناخواسته ON/OFF دارند.
وقتی این حفاظت فعال باشد، پس از یک تغییر غیر privileged روی Rail، BUSY ایجاد میشود و برخی Writeهای بعدی تا پایان Timeout پذیرفته نمیشوند. Power Sequence یا دسترسی Privileged میتواند این وضعیت را Override کند.
Host چگونه State جدید را درخواست میکند؟
Host SoC از طریق SPMI میتواند درخواست Sleep یا Off State جدید را به PMU ارسال کند.
برای درخواست Transition میان AWAKE و Sleep Stateهای مجاز استفاده میشود.
برای درخواست Transitionهای مرتبط با Off و برخی Stateهای خاص استفاده میشود.
نمونه Transition؛ AWAKE به SLEEP1
Wakeup؛ برگشت به AWAKE الزاماً Reverse ساده Sequence نیست
برای مثال SLEEP1 به AWAKE Sequence مخصوص خود را دارد:
Power-Up و Power-Down الزاماً تصویر معکوس یکدیگر نیستند. Slot Assignment، Timing و Resource Configuration میتوانند برای هر جهت Transition مستقل باشند.
Leader PMU و هماهنگی منابع Remote
Brooklands در Leader Mode میتواند علاوه بر منابع داخلی، Supplyهای PMUهای همراه را از طریق vGPIO و SGPIO کنترل کند.
POWER_UP نیز زمان لازم را برای آمادهشدن PMUهای Remote جهت دریافت SGPIO در نظر میگیرد.
Crash Sequence؛ مسیر عادی Power Transition نیست
Brooklands برای Crash نیز مسیرهای مستقل دارد. CRASH_DLY یک State مبتنی بر Timer است که پس از Rapid Crash فرصت خاموششدن Supplyها را فراهم میکند و سپس PMU میتواند به RESET بازگردد.
عیبیابی Power Sequence از دید تعمیرکار
وقتی یک Rail وجود ندارد، بررسی Coil فقط بخشی از تشخیص است.
چند سناریوی مهم در تحلیل Power Sequence
ON/OFF Configuration، Slot Assignment، Input Source، Startup Status و اینکه Sequence واقعاً به AWAKE رسیده بررسی شود.
باید مشخص شود FSM در RESET، OTP_READ، POWER_DOWN، PMU_OFF، POWER_UP، SECURE_FW_BOOT یا Power Sequence بعدی متوقف شده است.
این رفتار الزاماً Fault نیست؛ State Configuration ممکن است Rail را روشن یا در Low-Power Mode نگه دارد.
Transition جدید، Crash، Protection، Reset Event یا Sequence بعدی میتواند Rail را مجدداً Disable کند.
جمعبندی
Brooklands یک PMIC نیست که تمام Railهای آن صرفاً با Enable ساده روشن و خاموش شوند. Power FSM State سیستم را مدیریت میکند و Power Sequencer Transition واقعی منابع را اجرا میکند.
RESET، PMU_OFF و PMU_ACTIVE ساختار Hardware State را تشکیل میدهند؛ در حالی که AWAKE و SLEEP1 تا SLEEP4 Virtual Stateهایی هستند که توسط Secure Firmware مدیریت میشوند.
Slot Assignment، Slot Timer، ON/OFF State Bitها، Preemptive Bias، Low-Power Mode، Pulldown Configuration، SGPIO و Protection همگی میتوانند تعیین کنند یک Rail در چه لحظهای و با چه رفتاری فعال شود.
از دید تعمیرات، نبود یک Rail همیشه به معنی خرابی Buck، LDO یا PMIC نیست؛ ممکن است سیستم هنوز هرگز به State و Slot موردنیاز آن Rail نرسیده باشد.
مقاله ۵: SPMI، SGPIO و DVC در Brooklands PMU
در مقاله بعدی رابط اصلی Host با PMU، ساختار SPMI، ارتباط Leader با منابع Remote از طریق SGPIO و vGPIO، DVC، Group-DVC و نحوه انتقال فرمانهای کنترلی میان SoC و سیستم مدیریت توان Brooklands را بررسی میکنیم.