Armadilloフォーラム

スリープモードに関して

sori_001

2023年9月8日 17時05分

お世話になっております。﨤町です。

A6Eのスリープモードに関して、いくつか質問させて頂きます。

(1).
CON6の、DI1またはDI2のどちらかの入力でスリープモードから起床を考えております。
起床トリガーにgpio割り込みを設定することで可能と考えておりますが、認識合っていますでしょうか。
違う場合、他に方法はありますでしょうか。

(2).
上記(1)が可能である前提ですが、入力が0→1で起床の他に、
1→0という変化で起床も可能でしょうか。

(3).
そもそもですが、起床トリガーのgpio割り込み設定ついて分かっていない可能性もあるため、
参考ページなどありましたらご教示ください。

(4).
電源給電の直後にスリープモードに遷移した状態で起動することは可能でしょうか。
もし可能であれば方法をご教示ください。(起床条件は予め設定しておく)
一旦は起動してから、その後すぐにスリープモードに入る等の工夫が必要でしょうか。

以上、何卒よろしくお願いいたします。

コメント

アットマークテクノの古賀です。

﨤町さん(2023年9月8日 17時05分):
>A6Eのスリープモードに関して、いくつか質問させて頂きます。

以下、順に回答/コメントします。

>(1).
>CON6の、DI1またはDI2のどちらかの入力でスリープモードから起床を考えております。
>起床トリガーにgpio割り込みを設定することで可能と考えておりますが、認識合っていますでしょうか。

はい。合っています。DI1 と DI2 は、GPIO エキスパンダー(TCA9534)に接続しており、GPIO エキスパンダーの入力変化割り込み通知信号線を、SoC (i.MX6ULL) の GPIO 入力ピンに接続しています。これにより、DI1 や DI2 の入力変化時に GPIO エキスパンダーから割り込み通知の GPIO 入力を受け、それによる GPIO 割り込みを、起床要因として利用する仕組みです。

>(2).
>上記(1)が可能である前提ですが、入力が0→1で起床の他に、
>1→0という変化で起床も可能でしょうか。

はい。可能です。使用している GPIO エキスパンダー(TCA9534)は、GPIO 入力の立ち上がりエッジと立下りエッジのいずれかを検出すると割り込み通知を出力しますので、 0->1 と 1->0 の、どちらの変化でも起床するはずです。
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
 https://www.ti.com/document-viewer/ja-jp/TCA9534/datasheet/detailed-des…

Device Tree 上では、I2C 接続の GPIO エキスパンダーに対し、GPIO を割り込みデバイスの親としたうえで wakeup-source を宣言しています。これによって割り当てられる sysfs の wakeup ノードを使い、起床要因の有効/無効設定を行える仕組みです。

>(3).
>そもそもですが、起床トリガーのgpio割り込み設定ついて分かっていない可能性もあるため、
>参考ページなどありましたらご教示ください。

特にありません。強いて言えば、Linux カーネルの Documenation の Device Tree に関するもののうち、wakeup-source と割り込み設定に関するものが、参考になるかも知れません:
 https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
 https://www.kernel.org/doc/Documentation/devicetree/bindings/power/wake…
 https://www.kernel.org/doc/Documentation/devicetree/bindings/interrupt-…

>(4).
>電源給電の直後にスリープモードに遷移した状態で起動することは可能でしょうか。
>もし可能であれば方法をご教示ください。(起床条件は予め設定しておく)

最初からスリープモード状態で起動することは、できません。ごめんなさい。
ですので、以下の工夫が必要です。

>一旦は起動してから、その後すぐにスリープモードに入る等の工夫が必要でしょうか。

A6E の場合、local のサービスが有効になっていますので、suspend.start などの名前で、起床要因の設定とスリープモードへの遷移を行うスクリプトを作って /etc/local.d/ に配置してやれば、起動の最終段階でスリープモードへ遷移できるるでしょう。Base OS での、起動時のスクリプト自動実行については、このフォーラムに寄せられた質問の、この回答が参考になると思います:
 https://armadillo.atmark-techno.com/forum/armadillo/11261#comment-10783

お世話になっております。﨤町です。

アットマークテクノの古賀さん、
丁重にご返信いただき、ありがとうございます。

(1)、(2)
どちらも特にカーネルなどの書き換えを行わず、可能と認識いたしました。

(3)
ご教示いただいたURLも参考にさせて頂きます。

(4)
> 最初からスリープモード状態で起動することは、できません。ごめんなさい。
承知いたしました。
local のサービスの仕組みを利用し、起動の最終段階でスリープモードへ遷移で対応しようと思います。

具体的な方法までご教示いただき感謝いたします。
ありがとうございました。

お世話になっております。﨤町です。

別スレッドで質問を検討しましたが、本スレッドの追加の質問となりますので、
こちらで引き続きの質問とさせていただきます。

>アットマークテクノの古賀さん
まず前回のお礼ですが、(1)、(2)について実機でも確認しましたが、
ご教示いただいた内容通りに動作いたしました。
ありがとうございました。

追加の質問をさせて頂きたいのですが、
スリープモードのGPIOトリガーによる起床を、DI1 または DI2 のどちらかに絞り込む方法はありますでしょうか。
またその絞り込みをA6E起動中に切り替えてスリープモードに遷移する方法はありますでしょうか。
Device Treeの書き換えが必要そうな気がしておりますが、ご教示をお願いいたします。

以上、よろしくお願いいたします。

アットマークテクノの古賀です。

﨤町さん:
>追加の質問をさせて頂きたいのですが、
>スリープモードのGPIOトリガーによる起床を、DI1 または DI2 のどちらかに絞り込む方法はありますでしょうか。

ごめんなさい。ありません。これは、以下に述べるようにハードウェアの制限です。

古賀(2023年9月12日 6時02分):
>…使用している GPIO エキスパンダー(TCA9534)は、GPIO 入力の立ち上がりエッジと立下りエッジのいずれかを検出すると割り込み通知を出力しますので、 0->1 と 1->0 の、どちらの変化でも起床するはずです。
> https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
> https://www.ti.com/document-viewer/ja-jp/TCA9534/datasheet/detailed-des…

上の二番めの URL の、TCA9534 (GPIO エキスパンダー)のデータシートには、次のように記載されています:

-----------------
The TCA9534 open-drain interrupt (INT) output is activated when any input state differs from its corresponding
Input Port register state and is used to indicate to the system master that an input state has changed.
-----------------
(8.1 Overview)

つまり、GPIO エキスパンダーの入力ポートの入力のどれかが変化すると、区別なく GPIO エキスパンダーから SoC への割り込み通知が起きます。入力ポートごとに割り込み有無を設定することはできませんので、DI1 と DIO2 のどちらかに絞り込む手段が無いのです。

GPIO の入力ごとに起床要因にするかどうかを切り替えるとしたら、拡張インターフェース(CON8) のピンを GPIO に割り当てて、そちらと併用する必要があるでしょう。

お世話になっております。﨤町です。

アットマークテクノの古賀さん
早速のご回答ありがとうございます。

>つまり、GPIO エキスパンダーの入力ポートの入力のどれかが変化すると、区別なく GPIO エキスパンダーから SoC への割り込み通知が起きます。
>入力ポートごとに割り込み有無を設定することはできませんので、DI1 と DIO2 のどちらかに絞り込む手段が無いのです。
>GPIO の入力ごとに起床要因にするかどうかを切り替えるとしたら、拡張インターフェース(CON8) のピンを GPIO に割り当てて、そちらと併用する必要があるでしょう。

詳細なご回答により不可能なこと理解いたしました。
ご教示いただいた拡張インターフェース(CON8) のピンを利用することや、他の方法(仕様の変更など)も含め再検討するようにいたします。

ありがとうございました。
以上、よろしくお願いいたします。