本章では、Armadillo-IoTゲートウェイ A6 の 省電力・間欠動作機能や動作モード、状態遷移について説明します。
Armadillo-IoTゲートウェイ A6 の動作モードと状態遷移を次に示します。
「CPU:動作」、「LTE-Mモジュール:動作」 状態のモードです。
Armadillo-IoTゲートウェイ A6の電源投入後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によるデータ受信、によってアクティブモードへの遷移ができます。
「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
7.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コマンドの書式と設定可能なパラメータを以下に示します。
表7.1 aiot-modem-control TRIGGER一覧
TRIGGER | 説明 |
---|
usb-lower | メインユニット CON5(USB ホストインターフェース)の上段にUSBデバイスを挿抜したとき |
usb-upper | メインユニット CON5(USB ホストインターフェース)の下段にUSBデバイスを挿抜したとき |
uart3 | メインユニット CON3、CON4(シリアルインターフェース /dev/ttymxc2)にデータ受信があったとき |
コンソール(/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アラーム割り込みでの起床を行う場合、パラメーター設定が異なります。
現在時刻からの経過秒数 は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
7.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
7.5. スリープモードへの遷移・起床時にスクリプトを実行する
/lib/systemd/system-sleep/
に以下のようなスクリプトを配置することで、スリープモードへの遷移時や、スリープモードからの起床時に独自の処理を行うことが可能です。
スクリプト名を example.sh
とする場合、以下のように配置してください。
[armadillo ~]# cp example.sh /lib/systemd/system-sleep/
| |
---|
この機能を利用するには、ems31-utilsのバージョンが1.0.3以降である必要があります。 [armadillo ~]# dpkg -l |grep ems31-utils
ii ems31-utils 1.0.3 armhf Utilities for Thales EMS31 on Armadillo board |