ラズパイ5とSSD(PCIe編)

2025年3月28日 記

はじめに

ラズパイ5のPCIeコネクタにM.2 Hatを取り付けて、 そのM.2コネクタに1TBのSSDを取り付けたら何日か程度であれば動いているのですがそれくらい経つ間に停止してしまう・・・という困った症状が出てしまいました。 私はいくつかラズパイ5を所持しているのですが、どれも問題なく常時稼働しています。 そんな訳なので原因として考えられそうなのは「電源容量不足」くらいでした。 調べてみたところラズパイ5のPCIeコネクタから供給可能な電力は5Wだそうです。 で、1TBのSSDの消費電力は最大でおよそ0.5~1A(2.5~5W)くらいが一般的らしいです。 私が取り付けたM.2 Hatには外部電源として5Vを供給可能なコネクタと、その辺の付加回路ではないかと思われる回路が付いています。 しばらく動作させているといつの間にか停止する原因はこの辺にあるのではないかと思いました。


下はM.2 Hatに外部電源を供給できるようにして正常に動作しているときの画像です。
1TBのSSDを取り付けるために最終的にはこんな感じのものになってしまいました。
SSRはもっと小さなものとか、 代わりになるような小さなFETとかがあればよかったのですが、 手持ちで使えそうなのは画像に写っているコレくらいでした。

gaikan.jpg





目次

(1)対策その1
(2)対策その2
(3)対策その3
(4)最終動作確認
(5)最後に







(1)対策その1

「対策その1」としては、単純に「5Vの外部電源を供給してみる」ということでした。 コネクタは「XH2.54」と、 購入先のAmazonの商品ページに記載があったので、 そのコネクタを購入して手持ちのスイッチング電源 5V3A(15W) を5.1Vに調整して供給してみました。

スイッチング電源の出力を5.0Vではなく5.1Vに調整した理由ですが、消費電流が増えて電圧が微妙に低くなってしまうと思わぬトラブルに見舞われることがあるためです。 一般的なICなどに供給する電源の変動としては±0.25V程度許容されていることがほとんどなので5.1Vに調整したところで不具合が出ることはなくて、 逆に変な不具合に見舞われる可能性が減ると推測できるからです。
で、やってみたところ・・・ラズパイ5は無事に起動したのですが・・・電流制限のメッセージが表示されてしまいました・・・。 単純に5Vの電源を供給してしまうと外部電源の方が優先されてしまって本来のType-Cコネクタから供給される電源が無効にされてしまうようでした。 ・・・というわけで、この方法ではダメという結果になりました。




目次へ




(2)対策その2

単純に5Vを供給してしまうとType-Cコネクタの電源が無効化されてしまうようだったので、 次は電源の+ラインにショットキーバリアダイオードを取り付けてみることにしました。 ダイオードは20V/1Aというものを使用しました。 ・・・で、結果はどうなったかと言いますと、何と!ラズパイ5は起動すらしませんでした・・・。 起動すらしなかったので、(1)で「Type-Cコネクタから供給される電源が無効にされてしまうようでした」と書きましたが、 中途半端な状態が検出された結果、たまたまそのような電流制限のメッセージが表示されたのかなぁ?という感じでしょうか??。 で、ちょっとよくわからない状態に陥ってしまったためちょっとひとつ試してみることにしました。 それは・・・、「普通にラズパイ5を立ち上げてから外部電源を供給してみる」ということでした。 外部電源の供給のON/OFFはスイッチング電源を手動でON/OFF(正確には元電源であるAC100Vのコンセントの抜き差し)で行いました。 何度か試してみたところ、ラズパイ5が正常に起動した後に外部電源を供給してやれば特に問題ないような感じで動作しているように見えました。 実際しばらく(1~2日くらい)動かしてみたところ、ラズパイ5は停止することなく正常に稼働しました。

ちなみにショットキーバリアダイオードは付けたままです。 このダイオードは付いていても問題ないはずで、逆に取ってしまうと思わぬ不具合が発生する可能性もあるためそのままにしました。 この外部電源はSSDが電流不足に陥った時にのみ利用されれば良いだけで、 普段は使われなくても良い電源なのです。




目次へ




(3)対策その3

(2)でラズパイ5が「正常に動作しそうだ」という見込みが出たため、 ラズパイ5から外部電源をON/OFFする機能を付けることにしました。 具体的には現在未使用のGPIO26ピンを出力端子にして、 ラズパイ5が起動したらGPIO26ピンをHighレベルにして5V電源を供給しようと考えました。 ラズパイ5からGPIO26の信号線とGNDを取り出して電源供給回路をONにして、 SSR(ソリッドステートリレー)をONにすることにしました。

ちなみにですが、GPIOピンとか一般的にソフトウェア的に入出力を切り替えることが可能な汎用ピンは、 MCU起動時には入力端子になっているため、 出力端子としてみた場合にはLowレベル相当(電圧・電流を供給していない状態)になっています。
そのためのちょっとした手作り基板を用意して、 GPIO26ピンを出力端子にしてHighレベルにするためのソフトウェアを作ることにしました。 手作り基板の方はSSRを駆動するだけの基板で、あとモニター用にLEDを2つ取り付けました。 赤色LEDが外部の5V電源が供給されているときに点灯するLEDで、 青色LEDがGPIO26ピン=Highレベル出力になったときに点灯するLEDです。 ソフトウェアの方は、 調べてみたところGPIOピンをON/OFFをする専用のコマンドがあったのでそれを利用してスクリプトで対応することにしました。 以下に手作り基板の回路図とスクリプトなどを記します。

手作り基板、ケーブルの回路図
logic.png


上の回路図の下の方に電解コンデンサ100uFが2つ取り付けてありますが、 実はたまたまこのコンデンサが付いていたケーブルを使った(再利用した)だけで、 コンデンサの容量に特に意味はありません。 私はちょっとした回路を作るときには電源ラインにこれくらいの容量の電解コンデンサを用いることが比較的多いです。 その程度(気休め?)の理由で付加してあります。


下はラズパイ5起動時に自動実行してGPIO26ピンをHighレベルにするためのスクリプトです。

(スクリプト中にもコメントとして同じようなことを書いていますが)最下行のgpiosetコマンドでGPIO端子を制御しています。 ちなみに"26"がGPIO26ピンを表すもので、続く"=1"がHighレベルにすることを表すものです。 これを"=0"とするとLowレベルが出力されます。 このスクリプトのパーミッションを777にして/etc/profile.d/ フォルダにコピーすれば起動時に実行されます。

m2hat.power_on.sh
#
# GPIO26 を出力端子に設定してHigh(1)を出力するスクリプトです。
# M.2 Hatに電力を供給するためのスクリプトです。
#
# パーミッションを 777 に変更して、
# /etc/profile.d/ フォルダにコピーすれば起動時に実行されます!
#
# gpiosetコマンドは指定のGPIOピン(下の場合はGPIO26)を出力端子に変更して、
#   =0のときLow、=1のときHighを出力します。
# [gpiochip4]については今のところ把握できていないので「おまじない」ということにしておきましょう。
#

gpioset gpiochip4 26=1


スクリプトのパーミッションを777に変更するには下のコマンドを実行します。

$ sudo chmod 777 m2hat.power_on.sh


/etc/profile.d/フォルダにコピーするには下のコマンドを実行します。

$ sudo cp m2hat.power_on.sh /etc/profile.d


もし上のスクリプトを実行しても「GPIO26ピンがHighれべるにならない!」というようなときには、 下記のように($から始まる)コマンドを実行して正しく実行できるか試してみてください。

●コマンドインストール(すでにインストールされているかもしれません)
$ sudo apt install gpiod

$ gpioinfo gpiochip4
gpiochip4 - 54 lines:
        line   0:     "ID_SDA"       unused   input  active-high
        line   1:     "ID_SCL"       unused   input  active-high
        line   2:      "GPIO2"       unused   input  active-high
        ・・・・・
        line  26:     "GPIO26"       unused   input  active-high
        line  27:     "GPIO27"       unused   input  active-high
        line  28: "PCIE_RP1_WAKE" unused output active-high
        line  29:   "FAN_TACH"       unused   input  active-high
        ・・・・・


●GPIO26 Highレベル出力
$ gpioset gpiochip4 26=1


●GPIO26 Lowレベル出力
$ gpioset gpiochip4 26=0


もし上のコマンドを実行してもうまく動作しないときには・・・、 何か違うことをしている可能性が高いと思いますのであきらめた方が良いかもしれません・・・ね(笑)。 まぁ、普通に動作するはずです。




目次へ




(4)最終動作確認

まだ確認事項が残っています。 それは再起動(リブート)したときに正常に起動するかどうかです。 下の再起動コマンドを実行して正常に再起動することを確認してみましょう。

$ sudo reboot


再起動して異常なメッセージ(電流制限など)が表示されないかを確認出来たらOKです。




目次へ




(5)最後に

ずっと書き忘れていたことがあります。
ラズパイ5(SSD)にインストールしてあるOSは、これを書いている時点で最新のラズパイOS(Linux)です。 他のLinuxとか、Windowsとかではありません。
念のため。




目次へ






メニュー