Armadilloフォーラム

sleep実行後にgpioset応答がなくなる現象

kaso_zm

2023年2月17日 13時59分

お世話になっております。

現在、DOAを利用しています。
起動直後、[gpioset 5 2=0]の動作が問題ないですが、aiot-sleepコマンド実行しwake up後にgpiosetを実行すると、
応答がなくなる現象が起きています。

解決方法はございますでしょうか?

コメント

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

kaso_zmさん:
>現在、DOAを利用しています。
>起動直後、[gpioset 5 2=0]の動作が問題ないですが、aiot-sleepコマンド実行しwake up後にgpiosetを実行すると、
>応答がなくなる現象が起きています。
>
>
>解決方法はございますでしょうか?

ゲートウェイアプリケーションが DOA を使用しているため、そちらと競合するのが原因です。
A6E を起動した後、次のコマンドを実行して、ゲートウェイコンテナ(およびゲートウェイアプリケーション)を終了してみて下さい:

armadillo:~# podman stop a6e-gw-container

 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

ゲートウェイコンテナをご利用にならない場合は、自動起動しないようにすることで問題を解消できます。
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

以上、取り急ぎコメントです。ご不明な点がありましたら、お知らせくださいませ。
どうぞ宜しくお願いします。

> アットマークテクノの古賀です。
>
> kaso_zmさん:
> >現在、DOAを利用しています。
> >起動直後、[gpioset 5 2=0]の動作が問題ないですが、aiot-sleepコマンド実行しwake up後にgpiosetを実行すると、
> >応答がなくなる現象が起きています。
> >
> >
> >解決方法はございますでしょうか?
>
> ゲートウェイアプリケーションが DOA を使用しているため、そちらと競合するのが原因です。
> A6E を起動した後、次のコマンドを実行して、ゲートウェイコンテナ(およびゲートウェイアプリケーション)を終了してみて下さい:
>
> armadillo:~# podman stop a6e-gw-container
>
>  https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
>
> ゲートウェイコンテナをご利用にならない場合は、自動起動しないようにすることで問題を解消できます。
>  https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
>
> 以上、取り急ぎコメントです。ご不明な点がありましたら、お知らせくださいませ。
> どうぞ宜しくお願いします。

古賀さん:

ご回答ありがとうございます。

a6e-gw-containerが既にset_autostart noで設定しています。
下記コマンドを実行すると、a6e-gw-containerが運行していない状態です。
armadillo:~# podman stop a6e-gw-container
Error: no container with name or ID "a6e-gw-container" found: no such container

この状況で、下記コマンドを実行する
gpioset 5 2=0 →通電
gpioset 5 2=1 →非通電

aiot-sleep を実行して、sw1を押して、wake upさせました。

再度a6e-gw-containerの状況を確認すると、運行していない状態です。
podman stop a6e-gw-container
Error: no container with name or ID "a6e-gw-container" found: no such container

この状況で、
gpioset 5 2=0 →非通電
gpioset 5 2=1 →非通電

の現状ですね。

解決方法をいただければ幸いです。

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

kaso_zmさん:
>>>現在、DOAを利用しています。
>>>起動直後、[gpioset 5 2=0]の動作が問題ないですが、aiot-sleepコマンド実行しwake up後にgpiosetを実行すると、
>>>応答がなくなる現象が起きています。

>>ゲートウェイアプリケーションが DOA を使用しているため、そちらと競合するのが原因です。
>>A6E を起動した後、次のコマンドを実行して、ゲートウェイコンテナ(およびゲートウェイアプリケーション)を終了してみて下さい:

>ご回答ありがとうございます。
>
>a6e-gw-containerが既にset_autostart noで設定しています。
>下記コマンドを実行すると、a6e-gw-containerが運行していない状態です。
>armadillo:~# podman stop a6e-gw-container
>Error: no container with name or ID "a6e-gw-container" found: no such container

了解しました。とすると、別の要因ですね。

>この状況で、下記コマンドを実行する
>gpioset 5 2=0 →通電
>gpioset 5 2=1 →非通電
>
>aiot-sleep を実行して、sw1を押して、wake upさせました。
>
>再度a6e-gw-containerの状況を確認すると、運行していない状態です。
>podman stop a6e-gw-container
>Error: no container with name or ID "a6e-gw-container" found: no such container
>
>この状況で、
>gpioset 5 2=0 →非通電
>gpioset 5 2=1 →非通電
>
>の現状ですね。
>
>解決方法をいただければ幸いです。

DOA の接点出力部の接続について確認させて下さい。
接点出力部は、絶縁用のフォトカプラを内蔵しているため、フォトカプラを駆動するための接続が必要です。こちらの弊社ブログで説明しているのと同様な接続を行っていらっしゃるでしょうか?
 https://armadillo.atmark-techno.com/blog/10899/13908

> アットマークテクノの古賀です。
>
> kaso_zmさん:
> >>>現在、DOAを利用しています。
> >>>起動直後、[gpioset 5 2=0]の動作が問題ないですが、aiot-sleepコマンド実行しwake up後にgpiosetを実行すると、
> >>>応答がなくなる現象が起きています。
> …
> >>ゲートウェイアプリケーションが DOA を使用しているため、そちらと競合するのが原因です。
> >>A6E を起動した後、次のコマンドを実行して、ゲートウェイコンテナ(およびゲートウェイアプリケーション)を終了してみて下さい:
> …
> >ご回答ありがとうございます。
> >
> >a6e-gw-containerが既にset_autostart noで設定しています。
> >下記コマンドを実行すると、a6e-gw-containerが運行していない状態です。
> >armadillo:~# podman stop a6e-gw-container
> >Error: no container with name or ID "a6e-gw-container" found: no such container
>
> 了解しました。とすると、別の要因ですね。
>
> >この状況で、下記コマンドを実行する
> >gpioset 5 2=0 →通電
> >gpioset 5 2=1 →非通電
> >
> >aiot-sleep を実行して、sw1を押して、wake upさせました。
> >
> >再度a6e-gw-containerの状況を確認すると、運行していない状態です。
> >podman stop a6e-gw-container
> >Error: no container with name or ID "a6e-gw-container" found: no such container
> >
> >この状況で、
> >gpioset 5 2=0 →非通電
> >gpioset 5 2=1 →非通電
> >
> >の現状ですね。
> >
> >解決方法をいただければ幸いです。
>
> DOA の接点出力部の接続について確認させて下さい。
> 接点出力部は、絶縁用のフォトカプラを内蔵しているため、フォトカプラを駆動するための接続が必要です。こちらの弊社ブログで説明しているのと同様な接続を行っていらっしゃるでしょうか?
>  https://armadillo.atmark-techno.com/blog/10899/13908

古賀様、
ご回答ありがとうございます。

こちらでの接続方法は、御社ブログの「外部電源でフォトリレーを駆動」の通りに接続しています。
A6Eの電源を入れて起動した後、
「gpioset 5 2=0」コマンドを実行したら、DO1がショートになって接続しているデバイスの電源は予想通りにオンになりました。
そして「gpioset 5 2=1」コマンドを実行したら、デバイスの電源はオフになりました。
オンオフの制御は正常にできているので、回路の接続については問題ないと考えております。

しかし、「aiot-sleep」コマンドを実行してA6Eをスリープさせて、
ボードの「SW1」をプッシュして、A6Eをスリープ状態から戻させましたが、
再度「gpioset 5 2=0」コマンドを実行しても、デバイスの電源はオンにならないです。
WAKE UP後DOのGPIOの制御ができなくなったと見られます。

A6Eをスリープ状態から戻させた後、
DOのGPIOを操作する前に、何かの設定とかが必要なのでしょうか?
または gpioset コマンドのデバッグメッセージを見る方法はありますか?

よろしくお願いいたします。

ファイル ファイルの説明
Screenshot 2023-02-17 175404.png

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

kaso_zmさん(2023年2月17日 18時25分):
>>DOA の接点出力部の接続について確認させて下さい。
>>接点出力部は、絶縁用のフォトカプラを内蔵しているため、フォトカプラを駆動するための接続が必要です。こちらの弊社ブログで説明しているのと同様な接続を行っていらっしゃるでしょうか?
>> https://armadillo.atmark-techno.com/blog/10899/13908
>
>古賀様、
>ご回答ありがとうございます。
>
>こちらでの接続方法は、御社ブログの「外部電源でフォトリレーを駆動」の通りに接続しています。

了解しました。返事が遅くなってしまい、申し訳ありません。

>A6Eの電源を入れて起動した後、
>「gpioset 5 2=0」コマンドを実行したら、DO1がショートになって接続しているデバイスの電源は予想通りにオンになりました。
>そして「gpioset 5 2=1」コマンドを実行したら、デバイスの電源はオフになりました。
>オンオフの制御は正常にできているので、回路の接続については問題ないと考えております。
>
>しかし、「aiot-sleep」コマンドを実行してA6Eをスリープさせて、
>ボードの「SW1」をプッシュして、A6Eをスリープ状態から戻させましたが、
>再度「gpioset 5 2=0」コマンドを実行しても、デバイスの電源はオンにならないです。

こちらでも症状を再現できましたので、原因を調査します。
進展がありましたらお知らせしますので、いましばらくお待ちくださいませ。

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

大変遅くなってしまいましたが、本件の原因が分かりました。A6E に搭載している GPIO エクスパンダのドライバのサスペンド・レジューム動作の不具合です。
この不具合は、2月のアップデートで取り込んだカーネルの更新で修正されていますので、このアップデートを適用して頂くことで問題が解消されます:
 https://armadillo.atmark-techno.com/news/20230227/software-update-aiota…
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

古賀(2023年2月22日 17時04分):
>>A6Eの電源を入れて起動した後、
>>「gpioset 5 2=0」コマンドを実行したら、DO1がショートになって接続しているデバイスの電源は予想通りにオンになりました。
>>そして「gpioset 5 2=1」コマンドを実行したら、デバイスの電源はオフになりました。
>>オンオフの制御は正常にできているので、回路の接続については問題ないと考えております。
>>
>>しかし、「aiot-sleep」コマンドを実行してA6Eをスリープさせて、
>>ボードの「SW1」をプッシュして、A6Eをスリープ状態から戻させましたが、
>>再度「gpioset 5 2=0」コマンドを実行しても、デバイスの電源はオンにならないです。
>
>こちらでも症状を再現できましたので、原因を調査します。
>進展がありましたらお知らせしますので、いましばらくお待ちくださいませ。

ちなみに、不具合箇所は、ここです:
 https://github.com/atmark-techno/linux-5.10-at/blob/5.10.161-r0/drivers…

A6E 搭載の GPIO エクスパンダは I2C I/F を持っており、このドライバでは、regmap により GPIO の入出力制御要求と I2C 通信による GPIO エクスパンダ制御動作をマッピングしています。このマッピングは、ドライバのサスペンド動作関数で regpmap を「キャッシュのみ (cache_onl)」モードにすることで一旦切り離されます。その後、レジューム時に、regmap の「キャッシュのみ」モードを解除してマッピングを復元します。しかし、レジューム時に、この復元動作が行われない実行パスがあり(※上記の箇所です)、その実行パスを通っていました。そのため、レジューム後は、GPIO エクスパンダのドライバは、GPIO エクスパンダに対する制御動作を実際に行うことなく、キャッシュデータを更新して成功を示す戻り値を返す状況が起きていました。

この箇所は、2月のアップデートで修正されています。修正前の不具合で、ご迷惑をおかけしてしまい恐縮ですが、どうぞ宜しくお願いします。