低消費電力の設定と測定¶
SiFli-SDKの低消費電力ガイドは、複数のSF32アーキテクチャを扱っています。SF32LB52x、SF32LB55x、SF32LB56xはデュアルコア構成で、HPSYSのHCPU(最大240 MHz)が高性能処理を担い、LPSYSのLCPU(最大48 MHz)がBluetoothやセンサーのタスクを担います。SF32LB57xとSF32LB58xはHCPU/LCPUの構成にACPUを追加しています。SF32LB58xの低消費電力側LCPUは最大96 MHzで動作します。コア数、クロック上限、低消費電力時の動作はファミリーによって異なるため、対象デバイスに対応するSDKガイドを参照してください。
電源管理フレームワークを設定する¶
プロジェクトのディレクトリで次を実行します。
次のmenuconfig設定はSF32LB52xのガイドに記載された例です。低消費電力モードの名称や設定項目はファミリーやSDKのバージョンによって異なる場合があるため、他の製品で使う際は対象ファミリーのガイドを確認してください。
表: SF32LB52xガイドに記載された低消費電力menuconfigの設定例
| Menuconfigパス | シンボル | 目的 |
|---|---|---|
Sifli middleware → Enable Low power support |
BSP_USING_PM |
SiFliの電源管理モジュールを有効にします。 |
RTOS → RT-Thread Components → Device Drivers → Using Power Management device drivers → Select PM Mode → Enable Deep Mode |
PM_DEEP_ENABLE |
ディープスリープ(Deep Sleep)を有効にします。 |
Sifli middleware → Enable Low power support → Enable PM Debug |
BSP_PM_DEBUG |
電源状態の遷移を出力します。最終的な消費電流測定では無効にしてください。 |
生成されるrtconfig.hには通常、RT_USING_PM、BSP_USING_PM、選択したモードのシンボルが含まれます。動作する構成例としてexample/pm/classicalを参照してください。この機能を無効にするには、有効にした項目をmenuconfigで元に戻します。
以下の図はSiFliのSF32LB52x向けガイドに掲載されたもので、該当するmenuconfigの場所を示しています。実際のプロジェクトでは、対象ファミリーのSDKメニューを正としてください。


ウェイクアップ要因を選択する¶
対象SDKのサンプルにあるボードのpinmux.c/drv_io.cとAPIを使用します。
表: ファミリー別のDeep Sleep/StandbyおよびHibernateからのウェイクアップ動作
| ファミリー | Deep Sleep/Standbyからのウェイクアップ動作 | Hibernateからのウェイクアップ動作 |
|---|---|---|
| SF32LB52x | ディープスリープ中は、すべてのピンからWSR_GPIO1を介してウェイクアップできます。追加のウェイクアップピン選択は不要です。HCPUとLCPUは個別にスリープできます。 |
HAL_PMU_EnterHibernate()を呼び出す前に、PMUのウェイクアップピンとレベルを設定します。 |
| SF32LB55x | 55x固有のAONウェイクアップピンマップを使用します。 | Hibernateからのウェイクアップに使えるのはLCPUのウェイクアップピンPIN0~PIN5のみです。有効な55xピン番号を指定してHAL_PMU_EnablePinWakeup()を使用します。これらのピンはHibernate中にフローティング入力となるため、基板で必要な場合は外付けプル抵抗を設けてください。 |
| SF32LB56x | ファミリー固有のHPAON/LPAONウェイクアップピンマップを使用します。 | PMUは二つのウェイクアップ要因PIN0とPIN1をサポートし、HCPUまたはLCPUのウェイクアップピンに割り当てられます。下のPMU設定例を参照してください。 |
| SF32LB57x | ファミリー固有のHPAON/LPAONウェイクアップピンマップを使用します。 | PMUは二つのウェイクアップ要因PIN0とPIN1をサポートします。57xのHibernateウェイクアップピンインデックス範囲は0~13です。各ソースを対象のHCPU/LCPUウェイクアップピンに割り当てます。 |
| SF32LB58x | ファミリー固有のHPAON/LPAONウェイクアップピンマップを使用します。 | PMUは二つのウェイクアップ要因PIN0とPIN1をサポートし、HCPUまたはLCPUのウェイクアップピンに割り当てられます。下のPMU設定例を参照してください。 |
SF32LB52x、SF32LB56x、SF32LB57x、SF32LB58xでは、下の例のようにGPIOをPMUウェイクアップ要因PIN0に割り当ててHibernate復帰を設定します。この例はSF32LB55xには適用されません。55xでは表に示した別の設定方法を使用してください。SF32LB57xのPMUウェイクアップピンインデックス範囲は0~13です。選択した割り当てを対象デバイスのユーザーマニュアルと基板設計で確認してください。
HAL_PMU_SelectWakeupPin(0,
HAL_HPAON_QueryWakeupPin(hwp_gpio1, BSP_KEY1_PIN));
HAL_PMU_EnablePinWakeup(0, AON_PIN_MODE_HIGH);
rt_kprintf("CR:0x%x, WER:0x%x\n", hwp_pmuc->CR, hwp_pmuc->WER);
Hibernateからの復帰はPM_HIBERNATE_BOOTが設定されたコールドブートです。スタンバイからの復帰とは異なり、中断した命令列から実行を再開しません。同じIOでStandbyとHibernateの両方からウェイクアップする場合は、それぞれの経路を設定してください。55xのHibernate用ウェイクアップピンはフローティング入力です。基板側で必要な場合は外付けプル抵抗を設けてください。
スリープ状態を理解する¶
表: スリープモードとガイドに記載された復帰時間の目安
| SDKモード | CPU/周辺機器の状態 | SRAMとウェイクアップ要因 | ガイドに記載された復帰時間の範囲 |
|---|---|---|---|
PM_SLEEP_MODE_IDLE |
CPUはWFI/WFEで待機し、クロックと周辺機器は動作を続けます。 | SRAMに引き続きアクセスでき、任意の割り込みで復帰します。 | <1 µs |
PM_SLEEP_MODE_LIGHT |
高速クロックを停止し、サブシステムを32 kHzに切り替えます。 | LPTIM、RTC、LCPU BLE MAC、Mailbox、またはウェイクアップピン。 | 30~100 µs |
PM_SLEEP_MODE_DEEP |
ライトスリープ(Light Sleep)と同様ですが、電源をRET_LDOに切り替えます。 |
SRAMの保持状態とウェイクアップ要因はファミリーによって異なります。下の表を参照してください。 | 100 µs–1 ms |
PM_SLEEP_MODE_STANDBY |
CPUと周辺機器はリセット/電源オフ状態になり、ピン状態は維持されます。 | 保持されるSRAM容量とウェイクアップ要因はファミリーによって異なります。ソフトウェアはAON状態からスタンバイ起動を判別します。 | 1~2 ms |
| Hibernate | すべてのサブシステムの電源を切り、32 kHz水晶振動子は動作を維持します。 | RTCまたはPMUウェイクアップピン。RAMは保持されません。HAL_PMU_EnterHibernate()。 |
>2 ms |
| シャットダウン | すべてのサブシステムの電源を切り、RC10Kは動作を維持します。 | RTCまたはPMUウェイクアップピン。RAMは保持されず、IOはハイインピーダンスになります。HAL_PMU_EnterShutdown()。 |
>2 ms |
表: ファミリー別のSRAM保持状態と復帰時間の参考値
| ファミリー | PM_SLEEP_MODE_DEEP |
PM_SLEEP_MODE_STANDBY |
|---|---|---|
| SF32LB52x | HPSYSとLPSYSのSRAMはアクセス不可ですが、すべて保持されます。復帰時間は約250 µsです。 | LPSYSのSRAMはアクセス不可ですが、すべて保持されます。HPSYSのSRAMはアクセスできず、保持されるのは384 KBのみです。復帰時間は約1 msです。 |
| SF32LB55x | HPSYSとLPSYSのSRAMはアクセス不可ですが、すべて保持されます。復帰時間は約250 µsです。 | LPSYSのSRAMはアクセス不可ですが、すべて保持されます。HPSYSのSRAMはアクセスできず、保持されるのは64 KBのみです。復帰時間は約1.5 msです。 |
| SF32LB56x | HPSYSとLPSYSのSRAMはアクセス不可ですが、すべて保持されます。復帰時間は約250 µsです。 | LPSYSのSRAMはアクセス不可ですが、すべて保持されます。HPSYSのSRAMはアクセスできず、保持されるのは64 KBのみです。復帰時間は約1.5 msです。 |
| SF32LB58x | HPSYSとLPSYSのSRAMはアクセス不可ですが、すべて保持されます。復帰時間は約250 µsです。 | LPSYSのSRAMはアクセス不可ですが、すべて保持されます。HPSYSのSRAMはアクセスできず、保持されるのは64 KBのみです。復帰時間は約1.5 msです。 |
参照した現行のSDK低消費電力ガイドには、SF32LB57xのSRAM保持容量と復帰時間に相当するデータがありません。他のファミリーの保持容量や時間をSF32LB57xに当てはめず、対象SDKリリースとデバイス資料で確認してください。
表中のPM_SLEEP_MODE_LIGHT、PM_SLEEP_MODE_DEEP、PM_SLEEP_MODE_STANDBYは、それぞれライトスリープ(Light Sleep)、ディープスリープ(Deep Sleep)、スタンバイ(Standby)に対応します。
上のファミリー別数値はSDKガイドに記載された参考値であり、基板上での復帰時間を保証するものではありません。SF32LB52xのガイドでは、PSRAMがある場合、HCPUは電源遮断で失われるRAMデータをPSRAMに退避し、ウェイクアップ後に復元すると説明されています。PSRAMがない場合のバックアップ先は64 KB Retention RAMです。このバックアップ領域は、各ファミリーのモード表に示されたSRAM保持容量とは別の指標です(たとえばSF32LB52xのStandbyでは、HPSYSのSRAM保持容量として384 KBが記載されています)。このバックアップ方式や容量が他のファミリーにも当てはまるとは考えず、そのファミリーのSDKガイドで確認してください。実際の消費電流は、有効な周辺機器、IOレベル、外部メモリー、基板構成によって変わります。
動作中のクロックを制御する¶
アイドルスレッドがスリープ状態に入れない場合、WFIの自動周波数低減によって消費電流を抑えられます。ただし、EPIC、EZIP、LCDC、USB、SDがアイドル状態の場合に限り安全です。アプリケーションでSDKのLVGL/周辺機器の稼働状態管理を利用しない場合は、rt_pm_hw_device_start()とrt_pm_hw_device_stop()で周辺機器の動作開始と終了を通知してください。HAL_RCC_HCPU_SetDeepWFIDiv()で分周比を設定します。通常、オーディオ処理では低減後のクロックを48 MHzに制限し、それ以外の処理では4 MHzを使用できます。SDKガイドの指示に従い、必要に応じてHPSYS_RCC_DBGR_FORCE_HPを設定してください。
処理を実行する場合はrt_pm_run_enter()を使用します。
表: 動作モード別のHCPUクロック設定
| モード | HCPUクロック |
|---|---|
PM_RUN_MODE_HIGH_SPEED |
240 MHz |
PM_RUN_MODE_NORMAL_SPEED |
144 MHz |
PM_RUN_MODE_MEDIUM_SPEED |
48 MHz |
PM_RUN_MODE_LOW_SPEED |
24 MHz |
pm_scenario_start()/pm_scenario_stop()は、UIとAudioに関するSDKのポリシーを適用します。いずれかのシナリオが有効なら高速モードを選び、どちらも有効でなければ中速モードを選びます。低いクロックでは処理時間が長くなる場合があるため、瞬間電流だけでなく消費エネルギーも測定してください。
サブシステム間のスリープ順序を確認する¶
画面が消灯すると、HPSYSはスリープに入れます。55x/56x/58xでは通常、その後にLPSYSもスリープします。52xは資料で確認できる例外で、HCPUとLCPUが個別にスリープできます。利用可能な資料では、57xのACPUも同じ順序に従うとは確認できません。対象SDKバージョンでサブシステムの制御方針を確認してください。ウェイクアップ後、gui_resumeによって次の画面消灯判定サイクルが始まります。共有周辺機器やIPCの処理が残っている間は、該当するコアを動作状態に保ってください。
BSP_PM_DEBUGを一時的に有効にして、ログに次のマーカーが出るか確認します。
表: 低消費電力遷移ログのマーカー
| ログ | 意味 |
|---|---|
gui_suspend / gui_resume |
画面消灯/点灯の遷移。 |
[pm]S: mode,gtime |
スリープに入ったことを示します。gtimeの単位は32,768 Hzのクロックティックです。 |
[pm]W: gtime |
スリープから復帰したことを示します。 |
[pm]WSR:0x... |
ウェイクアップ理由。ビットの意味は対象ファミリーのユーザーマニュアルで確認します。 |
期待したスリープに入らない場合は、list_thread、pm_dump、list_timerを確認してください。IDLEスレッドが実行されていること、rt_pm_request(PM_SLEEP_MODE_IDLE)による要求が残っていないこと、最も近いOSタイマーの期限がポリシーしきい値(通常、HCPUは100 ms、LCPUは10 ms)より後であること、ウェイクアップ条件が発生していないこと、IPCキューが空であることを確認します。しきい値より短い周期で待機処理を繰り返すと、スリープに入れない状態が続くことがあります。
SiFliのガイドには、「画面消灯 → IDLE → 条件成立後にスリープ」と、「キー入力でLPSYSがウェイクアップし、LCPUがMailboxを介してイベントをHCPUに送り、システムが自動的にHPSYSを起動する」フローも図示されています。これらはログの順序を確認する際に役立ちます。図中の説明とフローはSF32LB52xの例であり、他のファミリーのWSRビット割り当てを推定する根拠にはなりません。

%%{init: {"flowchart": {"htmlLabels": true, "wrappingWidth": 260}}}%%
flowchart TD
A["<div style='width:260px;text-align:center'>画面ロックのタイムアウト後、<br/>画面が消灯する</div>"] --> B["<div style='width:260px;text-align:center'>すべての処理スレッドが待機状態になり、<br/>IDLE スレッドが実行される</div>"]
B --> C["<div style='width:260px;text-align:center'>条件が成立すると、<br/>スリープモードに入る</div>"]
%%{init: {"flowchart": {"htmlLabels": true, "wrappingWidth": 260}}}%%
flowchart TD
A["<div style='width:260px;text-align:center'>キー入力で LPSYS がウェイクアップする</div>"] --> B["<div style='width:260px;text-align:center'>LCPU が Mailbox を介してキーイベントを HCPU に送り、<br/>システムが自動的に HPSYS を起動する</div>"]
B --> C["<div style='width:260px;text-align:center'>HCPU がキーイベントの種類を確認する</div>"]
C --> D["<div style='width:260px;text-align:center'>HCPU がシングルクリックと判定し、<br/>画面を点灯する</div>"]
基板レベルのリークを減らす¶
まず最小構成のシステムを測定します。ディスプレイ、センサー、充電器など、取り外し可能な負荷を切り離し、その後一つずつ接続していきます。よくあるリーク源は次のとおりです。
- 外部デバイスの電源が入り続けている。
- 電源が切れたデバイスに対して、出力がHighのまま駆動されている。
- 入力がフローティングになっている、またはプルアップ/プルダウンが一致していない。
- PSRAM、NOR/NAND Flash、eMMC、SDIOが低消費電力状態に移行していない。
- 55xのUSB
PA01設定が内部プルダウンと競合している。
基板固有の電源遷移はBSP_IO_Power_Down()とBSP_Power_Up()に実装します。画面消灯/点灯と同時にディスプレイやタッチの電源を切り替える場合は、BSP_TP_PowerDown/UpとBSP_LCD_PowerDown/Upを使用してください。NOR FlashからXIP実行する場合は、Flashのスリープ/ウェイクアップ処理を保持RAM(HAL_RAM_RET_CODE_SECT)に配置します。
再現可能な測定結果を記録する¶
測定ごとに、ファミリーとSDKのリビジョン、基板リビジョン、電源電圧、電流計の測定位置と帯域幅、ファームウェア設定、搭載メモリー構成、動作中の周辺機器、ウェイクアップ要因、スリープモード、遷移ログを記録します。電流値だけでなく、測定時の状態と条件も必ず併記してください。別の基板や動作モードで測定した値を、そのまま比較しないでください。
ファミリー別の公式資料: SF32LB52x、SF32LB55x、SF32LB56x、SF32LB58x。SDKの PMU APIリファレンス には、SF32LB57xのHibernateウェイクアップピンインデックス範囲が記載されています。
最終更新: