

spresenseのdeepsleepモードについて質問です。

deepsleepは上手くいくのですが、deepsleep中にデジタルピンから電流が出力されてしまいます（deepsleep処理前にdigitalwriteでLowの指示でLEDを消しても、deepsleepになると常に点灯状態となってしまう）。

deepsleep中は、ESP32等ではデジタルピンから出力がなくなったと記憶しているのですが、これはspresenseの仕様でしょうか?  
また、仕様ならばdeepsleep中にデジタルピンの出力を停止する方法はございますか?

ご回答お待ちしております。


CC BY-SA 4.0
2022-09-05T11:10:13.023
90942
2022-09-07T04:20:30.823
2022-09-06T00:47:19.847
3060
54268
question
spresense
deepsleep中にデジタルピンから電流が常に出力される


deepsleep中、マイコンボードからの出力は無効になっていると思います。どこのデジタルピンを使用しているか分かりませんが、もし拡張ボード側のピンを使用している場合、基板上のレベルシフタを介して3.3Vか5Vにプルアップされているので、それが原因ではないでしょうか。


CC BY-SA 4.0
2022-09-05T23:46:41.810
90950
2022-09-05T23:46:41.810
31378
90942
answer


まずはその回路図を確認しよう。  
一般的にGPIOポートはスリープで開放状態となりますが、そこに接続されている回路が、開放で電流が流れるようなものになっている場合もあります。  
また、一部のポートはスリープで特定の出力になるというものもありますんで、そこらへんはCPUのデータシートを読んで、ピンの機能を確認する必要があります


CC BY-SA 4.0
2022-09-06T22:23:32.947
90965
2022-09-06T22:23:32.947
27481
90942
answer


回答を重ねる形になってしまいますが、もう少しわかりやすく解説したいと思います。

kzzさんが指摘されているとおり拡張ボードのピンには常に電圧がかかっています。メインボードで何も制御しないとLEDのような負荷を与えると電流が流れてしまいます。

（言い換えると、拡張ボードでLEDを点滅できるのは、そのようになるようにメインボードがピンを制御しているからです）

[![拡張ボードの電源](https://i.stack.imgur.com/VZkE7.png)](https://i.stack.imgur.com/VZkE7.png)

これだと少しわかりにくいので、メインボードを外して拡張ボードだけでLEDが光るか実験をしてみました。ご覧のように拡張ボードだけでLEDが光ってしまっています。

（メインボードのUSB電源と拡張ボードのUSB電源は同じ電源ラインです）

[![拡張ボードのみでLED点灯](https://i.stack.imgur.com/YMpb1.jpg)](https://i.stack.imgur.com/YMpb1.jpg)

一方、メインボードにLEDをつなげてDeepSleepと起動を繰り返してみました。ご覧のようにDeepSleep中はGPIOに電流は流れていません。

[![Spresense MainBoard DeepSleep
LED実験](https://i.stack.imgur.com/ru0VQ.png)](https://i.stack.imgur.com/ru0VQ.png)

使ったスケッチは次のものです。

[code]

    #include <LowPower.h>
    #define LED_PIN 0
    
    void setup() {
      pinMode(LED_PIN, OUTPUT);
      digitalWrite(LED_PIN, HIGH);
      delay(2000);
      LowPower.begin();
      LowPower.deepSleep(2);
    }
    
    void loop() {
    }
    
[/code]

以上のことから、DeepSleep中の消費電力を抑えるには、メインボードに負荷をつなぐ必要があります。

ご参考になれば幸いです。


CC BY-SA 4.0
2022-09-07T04:20:30.823
90970
2022-09-07T04:20:30.823
27334
90942
answer