省電力・間欠動作機能

本章では、Armadillo-IoTゲートウェイ A6E の 省電力・間欠動作機能や動作モード、状態遷移について説明します。

8.1. 動作モード・起床条件と状態遷移図

Armadillo-IoT ゲートウェイ A6E の動作モード・起床条件と状態遷移を次に示します。

images/aiotg_a6e_psmode.svg

図8.1 状態遷移図


8.1.1. 動作モード・起床条件

次に、各動作モードと利用することのできる起床条件について説明します。

8.1.1.1. アクティブモード

「CPU:動作」、「LTE-M:動作」 状態のモードです。

Armadillo-IoTゲートウェイ A6E の電源投入後Linuxカーネルが起動し、まずはアクティブモードに遷移します。

任意のアプリケーションの実行や、外部センサー・デバイスの制御、LTE-MやEthernetでの通信が可能ですが、最も電力を消費するモードです。 アクティブモードの時間をより短くすることで、消費電力を押さえることができます。

8.1.1.2. シャットダウンモード

「CPU:停止」、「LTE-M:停止」の状態であり最も消費電力を抑えることのできるモードです。

その反面、CPUを停止させ、Linuxカーネルをシャットダウンしている状態であるため、アクティブモードに遷移する場合はLinuxカーネルの起動分の時間がかかります。

シャットダウンモードからアクティブモードに遷移するには、RTCのアラーム割り込みを使用するか、一度電源を切断・再接続を行う必要があります。

8.1.1.3. スリープモード

「CPU:待機」、「LTE-M:停止」 状態のモードです。

CPU(i.MX6ULL)はパワーマネジメントのSuspend-to-RAM状態になり、LinuxカーネルはPauseの状態になります。 シャットダウンモードと比較すると消費電力は高いですが、Linuxカーネルの起動は不要であるため数秒程度でアクティブモードに遷移が可能です。 ユーザスイッチの投下、RTCアラーム割り込み、GPIO割り込み、USBデバイスの接続、UARTによるデータ受信、によってアクティブモードへの遷移ができます。

8.1.1.4. スリープ(SMS 起床可能)モード (Cat.M1 モデルのみ)

「CPU:待機」、「LTE-M:待機」 状態のモードです。

スリープモードとの違いは、SMSの受信によって、アクティブモードへの遷移も可能である点です。 LTE-M:待機(PSM)の状態であるため、スリープモードよりも電力を消費します。

8.2. シャットダウンモードへの遷移と起床

シャットダウンモードへ遷移するには、poweroffコマンド、またはaiot-alarm-poweroffコマンドを実行します。

8.2.1. 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のアラーム割り込みをトリガで起床(アクティブモードに遷移)することができます。 なお、RTC を起床要因に使って間欠動作させる場合は、 「RTC」 を参考に、必ず RTC の日時設定を行ってください。

[警告]

RTC 未設定によるエラーが発生した場合、シャットダウンモードへの遷移は行われません。

[armadillo ~]# aiot-alarm-poweroff +[現在時刻からの経過秒数]

図8.2 aiot-alarm-poweroff コマンド書式


シャットダウンモードに遷移し、300秒後にアラーム割り込みを発生させるには、次のようにコマンドを実行します。

[armadillo ~]# aiot-alarm-poweroff +300
aiot-alarm-poweroff: alarm_timer +300 second

現在時刻からの経過秒数は180秒以上を指定する必要があります。

8.3. スリープモードへの遷移と起床

aiot-sleepコマンドを実行することで、スリープモードに遷移することができます。 スリープモードからの起床(アクティブモードに遷移する)条件は、aiot-sleepコマンドを実行する前にaiot-set-wake-triggerコマンドで事前指定します。 ユーザースイッチによる起床は標準で有効になっています。また、起床条件はOR条件での設定が可能です。

8.3.1. RTCアラーム割り込み以外での起床

aiot-set-wake-triggerコマンドの書式と設定可能なパラメータを以下に示します。

[armadillo ~]# aiot-set-wake-trigger [TRIGGER] [enabled|disabled]

図8.3 aiot-set-wake-trigger コマンド書式 (RTCアラーム割り込み以外での起床のとき)


表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

8.3.2. RTCアラーム割り込みでの起床

RTCアラーム割り込みでの起床を行う場合、パラメーター設定が異なります。 なお、RTC を起床要因に使って間欠動作させる場合は、 「RTC」 を参考に、必ず RTC の日時設定を行ってください。

[armadillo ~]# aiot-set-wake-trigger rtc [enabled|disabled] <現在時刻からの経過秒数>

図8.4 aiot-set-wake-trigger コマンド書式 (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
[注記]

アラーム割り込みは分単位(毎分00秒)で発生します。そのため、300秒(5分)を指定した場合、実際に割り込みが発生するまでの時間は5分00秒〜5分59秒の間となります。

8.3.3. 起床要因のクリア

すべての起床要因をクリアするには次に示すコマンドを実行します。ユーザースイッチによる起床設定は無効化できません。

[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/atmark/containers/*.confファイルの set_command で指定したコンテナ起動時に実行するコマンド」のプロセスが終了した時」となります。 ファイルの詳細は 「コンテナの自動起動」 を参照してください。

遷移先の動作モードと起床条件は設定ファイルで指定し、 コンテナが終了すると指定した動作モードへ遷移、指定した起床条件が発生すると 省電力モードから復帰します。また、その際自動的にコンテナも開始します。

コンテナ終了時に遷移する動作モードと起床条件については、設定ファイル(/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', 'SMS', 'RTC:60'

設定ファイルの概要を以下に示します。

表8.2 設定パラメーター

パラメーター名 意味

TARGET

状態遷移トリガの対象となるコンテナ名

MODE

遷移先の動作モード

WAKEUP

起床条件


表8.3 遷移先の動作モード

モード名 設定値

省電力・間欠動作OFF

NONE (初期値)

シャットダウンモード

SHUTDOWN

スリープモード

SLEEP


表8.4 起床条件

起床条件設定値

RTC

RTC:[コンテナ終了からの経過秒数[a]]

SW1 押下

SW1

GPIO 割り込み

GPIO

USB デバイス接続

USB

UART データ受信

UART

SMS 受信

SMS

[a] 現在時刻からの経過秒数は MODE が SHUTDOWN の場合は 300秒以上、SLEEP の場合は 60秒以上を指定する必要があります。


以下は遷移する動作モードがシャットダウンモード、起床条件が RTC(300秒後起床) のパターンです。 なお、デフォルトでは省電力・間欠動作は OFF (MODE=NONE) となっています。

[armadillo ~]# vi /etc/conf.d/power-utils.conf
TARGET='a6e-gw-container'
MODE='SHUTDOWN'
WAKEUP='RTC:300'

設定ファイル(/etc/conf.d/power-utils.conf)変更後、変更内容を永続化するには図8.5「状態遷移トリガにコンテナ終了通知を利用する場合の設定値を永続化する」に示すコマンドを実行してください。

[armadillo ~]# persist_file /etc/conf.d/power-utils.conf

図8.5 状態遷移トリガにコンテナ終了通知を利用する場合の設定値を永続化する


状態遷移トリガの対象はデフォルトでゲートウェイコンテナが指定されていますが、任意のコンテナを指定することも可能です。 ここでは、 "my_container" というコンテナを状態遷移トリガの対象にする場合の設定を記載します。

[armadillo ~]# vi /etc/conf.d/power-utils.conf 1
TARGET='my_container' 2
MODE='SHUTDOWN'
WAKEUP='RTC:300'
[armadillo ~]# persist_file /etc/conf.d/power-utils.conf 3
[armadillo ~]# vi /etc/atmark/containers/my_container.conf 4
set_image docker.io/alpine
set_command ls /
add_args --hooks-dir=/etc/containers/aiot_gw_container_hooks.d 5
[armadillo ~]# persist_file /etc/atmark/containers/my_container.conf 6

図8.6 状態遷移トリガの対象コンテナを設定する


1

設定ファイル(/etc/conf.d/powerutils.conf)を編集します。

2

コンテナ名 my_container を指定します。

3

設定内容を永続化します。

4

コンテナの設定ファイル(/etc/atmark/containers/my_container.conf)を編集します。記載内容の詳細は「コンテナの自動起動」を参照してください。

5

コンテナの終了を検知するため、フックを設定します。

6

コンテナの設定内容を永続化します。