本章では、Armadillo-IoTゲートウェイ A6E の 省電力・間欠動作機能や動作モード、状態遷移について説明します。
Armadillo-IoT ゲートウェイ A6E の動作モード・起床条件と状態遷移を次に示します。
次に、各動作モードと利用することのできる起床条件について説明します。
「CPU:動作」、「LTE-M:動作」 状態のモードです。
Armadillo-IoTゲートウェイ A6E の電源投入後Linuxカーネルが起動し、まずはアクティブモードに遷移します。
任意のアプリケーションの実行や、外部センサー・デバイスの制御、LTE-MやEthernetでの通信が可能ですが、最も電力を消費するモードです。
アクティブモードの時間をより短くすることで、消費電力を押さえることができます。
「CPU:停止」、「LTE-M:停止」の状態であり最も消費電力を抑えることのできるモードです。
その反面、CPUを停止させ、Linuxカーネルをシャットダウンしている状態であるため、アクティブモードに遷移する場合はLinuxカーネルの起動分の時間がかかります。
シャットダウンモードからアクティブモードに遷移するには、RTCのアラーム割り込みを使用するか、一度電源を切断・再接続を行う必要があります。
「CPU:待機」、「LTE-M:停止」 状態のモードです。
CPU(i.MX6ULL)はパワーマネジメントのSuspend-to-RAM状態になり、LinuxカーネルはPauseの状態になります。
シャットダウンモードと比較すると消費電力は高いですが、Linuxカーネルの起動は不要であるため数秒程度でアクティブモードに遷移が可能です。
ユーザスイッチの投下、RTCアラーム割り込み、GPIO割り込み、USBデバイスの接続、UARTによるデータ受信、によってアクティブモードへの遷移ができます。
8.1.1.4. スリープ(SMS 起床可能)モード
「CPU:待機」、「LTE-M:待機」 状態のモードです。
スリープモードとの違いは、SMSの受信によって、アクティブモードへの遷移も可能である点です。
LTE-M:待機(PSM)の状態であるため、スリープモードよりも電力を消費します。
シャットダウンモードへ遷移するには、poweroffコマンド、またはaiot-alarm-poweroffコマンドを実行します。
poweroffコマンドを実行してシャットダウンモードに遷移した場合、電源の切断・接続のみでアクティブモードに遷移が可能です。
poweroffコマンドの実行例を次に示します。
[armadillo ~]# poweroff
[ OK ] Stopped target Timers.
[ OK ] Stopped Daily man-db regeneration.
[ OK ] Stopped Daily rotation of log files.
※省略
[39578.876586] usb usb1: USB disconnect, device number 1
[39578.882754] ci_hdrc ci_hdrc.0: USB bus 1 deregistered
[39578.888133] reboot: Power down
8.2.2. aiot-alarm-poweroffコマンド
aiot-alarm-poweroffコマンドを実行することで、シャットダウンモードに遷移後、
RTCのアラーム割り込みをトリガで起床(アクティブモードに遷移)することができます。
コマンド書式を以下に示します。
シャットダウンモードに遷移し、300秒後にアラーム割り込みを発生させるには、次のようにコマンドを実行します。
[armadillo ~]# aiot-alarm-poweroff +300
aiot-alarm-poweroff: alarm_timer +300 second
現在時刻からの経過秒数は180秒以上を指定する必要があります。
aiot-sleepコマンドを実行することで、スリープモードに遷移することができます。
スリープモードからの起床(アクティブモードに遷移する)条件は、aiot-sleepコマンドを実行する前にaiot-set-wake-triggerコマンドで事前指定します。
ユーザースイッチによる起床は標準で有効になっています。また、起床条件はOR条件での設定が可能です。
aiot-set-wake-triggerコマンドの書式と設定可能なパラメータを以下に示します。
表8.1 aiot-modem-control TRIGGER一覧
TRIGGER | 説明 |
---|
usb | CON5(USB ホストインターフェース)にUSBデバイスを挿抜したとき |
uart3 | CON3(シリアルインターフェース /dev/ttymxc2)にデータ受信があったとき |
rs485 | UART5(シリアルインターフェース /dev/ttymxc4)にデータ受信があったとき |
gpio | GPIO 割り込みが発生したとき |
sw1 | SW1 が押下されたとき |
コンソール(/dev/ttymxc2)から入力があった場合にスリープモードから起床するには、次に示すコマンドを実行します。
[armadillo ~]# aiot-set-wake-trigger uart3 enabled
aiot-set-wake-trigger: uart3 enabled
[armadillo ~]# aiot-sleep
aiot-sleep: Power Management suspend-to-ram
[ 1767.050404] PM: suspend entry (deep)
[ 1767.054019] PM: Syncing filesystems ...
[ 1767.236546] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full -
flow control rx/tx
[ 1767.428714] done.
[ 1767.431262] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 1767.439582] OOM killer disabled.
[ 1767.442834] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 1767.451485] Suspending console(s) (use no_console_suspend to debug)
※ コンソールに入力
[ 1767.567686] OOM killer enabled.
[ 1767.570875] Restarting tasks ... done.
[ 1767.606048] PM: suspend exit
aiot-sleep: change mode CPU Idle
RTCアラーム割り込みでの起床を行う場合、パラメーター設定が異なります。
なお、RTC を起床要因に使って間欠動作させる場合は、 「RTC」 を参考に、必ず RTC の日時設定を行ってください。
現在時刻からの経過秒数 は60秒以上を指定する必要があります。
300秒後にRTCアラーム割り込みを発生させ、スリープモードから起床させるコマンド実行例を以下に示します。
[armadillo ~]# aiot-set-wake-trigger rtc enabled +300
aiot-set-wake-trigger: rtc enabled
aiot-set-wake-trigger: alarm_timer +300 second
[armadillo ~]# aiot-sleep
aiot-sleep: Power Management suspend-to-ram
[ 1767.050404] PM: suspend entry (deep)
[ 1767.054019] PM: Syncing filesystems ...
[ 1767.236546] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full -
flow control rx/tx
[ 1767.428714] done.
[ 1767.431262] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 1767.439582] OOM killer disabled.
[ 1767.442834] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 1767.451485] Suspending console(s) (use no_console_suspend to debug)
※ 約300秒待つ
[ 1767.567686] OOM killer enabled.
[ 1767.570875] Restarting tasks ... done.
[ 1767.606048] PM: suspend exit
aiot-sleep: change mode CPU Idle
すべての起床要因をクリアするには次に示すコマンドを実行します。ユーザースイッチによる起床設定は無効化できません。
[armadillo ~]# aiot-set-wake-trigger all disabled
aiot-set-wake-trigger: clear_all disabled
8.4. スリープ(SMS 起床可能)モードへの遷移と起床
aiot-sleep-smsコマンドを実行することで、スリープ(SMS 起床可能)モードに遷移することができます。
スリープモードからの起床(アクティブモードに遷移する)条件は、aiot-sleep-smsコマンドを実行する前にaiot-set-wake-triggerコマンドで事前指定します。
ユーザースイッチによる起床は標準で有効になっています。aiot-sleep-smsコマンドを実行した場合SMS受信による起床は強制的に有効になります。
また、起床条件はOR条件での設定が可能です。
aiot-sleep-smsコマンドの実行例を次に示します。
[armadillo ~]# aiot-sleep-sms
aiot-sleep-sms: Power Management suspend-to-ram
AT+CMGF=1
OK
AT^SIND="message",0
^SIND: message,0,0
OK
AT+CMGD=1,4
OK
AT+CMGL="ALL"
OK
[ 3508.609638] PM: suspend entry (deep)
^SIND: message,1,0
OK
[ 3508.613982] PM: Syncing filesystems ... done.
[ 3508.637946] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 3508.646276] OOM killer disabled.
[ 3508.649527] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 3508.658161] Suspending console(s) (use no_console_suspend to debug)
※ SMS受信
[ 1767.567686] OOM killer enabled.
[ 1767.570875] Restarting tasks ... done.
[ 1767.606048] PM: suspend exit
aiot-sleep: change mode CPU Idle
8.5. 状態遷移トリガにコンテナ終了通知を利用する
動作中のコンテナの終了をトリガに、省電力状態のモードへの遷移を行うことができます。
遷移先の動作モードと起床条件は設定ファイルで指定し、
コンテナが終了すると指定した動作モードへ遷移、指定した起床条件が発生すると
省電力モードから復帰します。また、その際自動的にコンテナも開始します。
コンテナ終了時に遷移する動作モードと起床条件については、設定ファイル(/etc/conf.d/power-utils.conf)で指定します。
設定ファイルは下記の通り、 TARGET , MODE , WAKEUP を指定します。
[armadillo ~]# cat /etc/conf.d/power-utils.conf
TARGET='a6e_gw_container'
MODE='NONE'
WAKEUP='SW1', 'USB', 'UART', 'GPIO', 'RTC:60'
以下は遷移する動作モードがシャットダウンモード、起床条件が RTC(300秒後起床) のパターンです。
なお、デフォルトでは省電力・間欠動作は OFF (MODE=NONE) となっています。
[armadillo ~]# cat /etc/conf.d/power-utils.conf
TARGET='a6e-gw-container'
MODE='SHUTDOWN'
WAKEUP='RTC:300'
設定ファイルの概要を以下に示します。
表8.2 設定パラメーター
パラメーター名 | 意味 |
---|
TARGET | 状態遷移トリガの対象となるコンテナ名 |
MODE | 遷移先の動作モード |
WAKEUP | 起床条件 |
表8.3 遷移先の動作モード
モード名 | 設定値 |
---|
省電力・間欠動作OFF | NONE (初期値) |
シャットダウンモード | SHUTDOWN |
スリープモード | SLEEP |
表8.4 起床条件
起床条件 | 設定値 |
---|
RTC | RTC:[コンテナ終了からの経過秒数[]] |
SW1 押下 | SW1 |
GPIO 割り込み | GPIO |
USB デバイス接続 | USB |
UART データ受信 | UART |
SMS 受信 | SMS |