mcpField
L
low-power-embedded

low-power-embedded

github.com/mohitmishra786開発269311 回インストール18 週間前に更新
リポジトリ

low-power-embedded について

組み込み開発エージェント向けに、MCUの低消費電力モード、ウェイクソース、クロック制御、電流測定を案内します。STM32を中心とした実例も含みます。

主な機能

  1. 01Sleep、Stop、Standbyモードの比較
  2. 02Cortex-MのWFI/WFEスリープ設定
  3. 03EXTIやRTCなどのウェイクソース設定
  4. 04ペリフェラルクロックと低電力状態の確認
  5. 05電流測定とウェイク問題の調査

活用シーン

  1. 01バッテリー駆動ファームウェアの消費電力削減
  2. 02ウェイク遅延と電流消費の調整
  3. 03復帰しないデバイスの原因調査
  4. 04リリース前のRTOSアイドルスリープ確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill low-power-embedded

インストール後、Claude Code で/low-power-embeddedを入力して読み込まれたか確認します。

詳細

低消費電力組み込みシステム

目的

エージェントが MCU の低消費電力モードを扱えるようにガイドします。スリープとディープスリープ(ストップ/スタンバイ)の違い、ペリフェラルおよびバスクロックのゲーティング、ウェイクアップソースの設定、実用的な電流測定を取り上げます。Cortex-M の WFI/WFE とベンダーの PWR の例を使用します(STM32 を中心としたパターンは幅広く応用できます)。

使用する場面

  • バッテリー駆動のファームウェアで消費電力の予算を満たせない場合
  • ウェイクアップ遅延と消費電力のトレードオフを検討する場合
  • 「デバイスが起動しない」または「スリープ中も電流が mA 単位で流れる」問題をデバッグする場合
  • RTOS のアイドルフックやベアメタルのメインループでスリープする前
  • skills/baremetal/interrupts-and-exceptions-baremetal と相互参照する場合

ワークフロー

1. 電力モードの階層(STM32 形式)
モードCPUペリフェラルRAMウェイクアップソース相対電流
実行オンオンオン—最大
スリープオフオンオン任意の IRQ中
ストップオフほとんどオフオンEXTI、RTC、UART低
スタンバイオフオフ消失*WKUP ピン、RTC最小

* スタンバイでは SRAM の大部分がクリアされます。状態の保持にはバックアップドメインまたは外部 EEPROM を使用してください。

2. スリープに入る(WFI)
/* Cortex-M — sleep until interrupt */
__disable_irq();
/* configure wake source (e.g. EXTI, RTC alarm) */
__enable_irq();
__WFI(); /* or __WFE() for event-based wake */

WFI の前に保留中の割り込みをクリアしてください。クリアしないと、すぐにウェイクアップする場合があります。

3. STM32 のストップモードのパターン
#include "stm32f4xx.h"

void enter_stop_mode(void)
{
    /* Gate clocks you do not need */
    RCC->AHB1ENR &= ~RCC_AHB1ENR_GPIOAEN; /* example — only if safe */

    PWR->CR |= PWR_CR_CWUF;   /* clear wake flags */
    PWR->CR |= PWR_CR_PDDS;   /* deep sleep = Stop */
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

    __WFI();

    /* After wake: re-enable HSE/PLL — clocks lost in Stop on many parts */
    SystemInit();
}

ストップから復帰した後、レジスターの内容が失われたクロックとペリフェラルを再初期化してください。

4. クロックゲーティングのチェックリスト
Before sleep
├── Disable unused peripheral clocks (RCC xENR)
├── Disable ADC/DAC continuous modes
├── Stop DMA channels
├── Enter peripheral low-power (UART mute, SPI off)
└── Configure lowest viable regulator scale (Voltage Scale 2/3)
5. ウェイクアップソース
ソース設定
EXTI GPIOSYSCFG + EXTI IMR、エッジトリガー
RTC アラームRTC WUT/WAKEUP
UARTスタートビット検出(一部の MCU)
IWDGウェイクアップソースではありません — デバイスをリセットします
6. 測定のヒント
  • VDDA/VDD に電流計を直列に接続します。uA の測定ではサンプリング時間を短くします
  • ウェイクアップ遅延のベンチマークには DWT サイクルカウンターを使用します
  • 同じクロックツリーを使用して測定した実行時とスリープ時の電流を比較し、条件を記録します
7. RTOS に関する注意

FreeRTOS の configUSE_TICKLESS_IDLE は WFI/ストップに対応します。skills/embedded/freertos と連携してください。

8. エージェントの使用方法
/low-power-embedded Configure STM32 Stop mode with EXTI0 wake and PLL restore

よくある問題

症状原因修正方法
「スリープ」中も mA 単位の電流が流れるデバッグインターフェース(SWD)が有効デバッガーを切断し、DBGMCU を無効にします
WFI からすぐに復帰するNVIC IRQ が保留中WFI の前にフラグをクリアします
復帰後に状態が失われるストップではなくスタンバイに入ったRAM の保持が必要な場合はストップを使用します
復帰後に UART が動作しないクロックツリーが復元されていないSystemInit() の処理を呼び出します
データシートの uA より電流が大きいGPIO が未接続未使用ピンをアナログ入力に設定するか、プルを設定します

関連スキル

  • skills/baremetal/interrupts-and-exceptions-baremetal — EXTI ウェイクアップ IRQ
  • skills/baremetal/gpio-baremetal — リーク制御のためのピンモード
  • skills/baremetal/stm32-baremetal — RCC および PWR レジスター
  • skills/baremetal/timers-pwm-baremetal — スリープ前にタイマーを停止
  • skills/embedded/freertos — ティックレスアイドルとの統合

コメント