あっかぎのページ

Raspberry PiのUSBの電流能力

20150316_9

Raspberry PiのUSBまわりの電流能力を調べたのでメモ。

きっかけはUSB HDDをつけようとしてうまく動かなかった原因を調べていて、USBの電流周りが原因だったというお話し。
(Raspberry Pi 2については未調査です)

Raspberry PiのモデルA,B

Raspberry PiのモデルA,Bは回路図がありますので、そこから読み解けます。RevisionによってUSB出力周りが異なっているのに注意します。

電源入力部はRevisionによらず共通で、次のようになっています。

20150316_1
(全画像はクリックすると拡大します)

F1にポリヒューズ(ポリスイッチ)と呼ばれる電流の保護素子が入っています。1.1A以上の過電流状態になると素子の温度上昇によって抵抗値が上昇して回路に電流が流れなくなり回路を保護します。回路が過電流状態から元に戻るとポリヒューズは再び温度が低下して抵抗値が下がって通常の回路動作に戻ります。ポリヒューズは一般的なヒューズと違って何度でも復帰できるのが特徴です。

電源部の電流値に関してですが、ポリヒューズには素子や温度によるばらつきがあるので、2,3割低い電流値(1.1A*0.7≒0.8A)の0.8A程度がRaspberry Piで消費できるmax電流と見ていいと思います。

続けてUSB出力側ですが、Revision 1.0のみUSB出力側にもポリヒューズがあります。(Revision 2.0/2.1はポリヒューズなし)きっとUSBをいろいろつなげたいという要求があって出力側のポリヒューズを取り払ったのだと思います。

20150316_2

Revision 1.0の回路図を見ると、出力側のポリヒューズは140mAとなっています。先ほどと同じように考えると、各USBポートでだいたい100mA(140mA*0.7≒100mA)程度が供給できる電流値と言えそうです。

Raspberry Pi B+

Raspberry Pi B+ではUSB出力ポートが4つに増えました。これに伴ってUSB出力周りが変更されています。

回路図は先ほどと同じようにこちらにあります。実はこの回路図は”Reduced Schematics”版ということで、かなり省略されています。そのため、電源入力部は回路図からわかりますが、USB出力部は回路図ではわからないです。

とりあえず入力部です。

20150316_03

モデルA,Bと同じようにポリヒューズが入っています。B+のモデルでは2Aとなっています。先ほどと同じように2,3割低い値を見積もって1.4Aが使えるmax電流と見ておけばいいと思います。さらに、回路が追加されていますが(Q3付近)、これは逆接防止の回路です。通常動作時はQ3がONして電流を流しますが、逆接続した時はQ3がOFFしているので電流が流れなくなり内部の回路を保護します。

次に出力部ですが、回路図はありませんがテスターで追っていってこんな感じになっていました。

20150316_5

20150316_4

U13にあるICがポイントです。おそらくですがTIのTPS2552相当のUSBロードスイッチが使われています。このICは設定した電流値以上になるとスイッチをOFFしてエラー信号を発生します。Raspberry Pi B+ではこの機能を使ってUSBの電流制限をしていると思われます。USB出力の5Vは内部で共通となっていますので、このICで設定した電流値が全USBポートの出力できる合計の電流値となります。

B+ではこの電流制限の値がデフォルトでは0.6Aの設定となっています。/boot/config.txtファイルに次の内容を追加する事によって出力電流を0.6A->1.2Aへと変更できます。(参考記事)

--- /boot/config.txt に追加 ---
safe_mode_gpio=4
max_usb_current=1

1行目の指定でよいとのことですが、近々2行目の書き方に移行するとのことです。再起動するとこの指定によって1.2Aの電流制限へと変更となります(デフォルトは0.6A)。回路図的にはQ4のFETをON/OFFすることで、電流制限の値を切替ているようです。こちらの記事によるとGPIO38のI/Oピンがそれに相当しそうです。

ということで、Raspberr Pi B+では全USB出力の合計で1.2Aまで出力できることがわかりました。

結果

model Revision 電流能力
A/B 1.0 各USBポート100mAまで
A/B 2.0 全USBポート合計300mA※1
A/B 2.1 全USBポート合計300mA※1
B+ 1.2 全USBポート合計1200mA※2

※1. Raspberry Piの消費電流を500mAとして、800mA – 500mA = 300mAとしました。
※2. /boot/config.txtで1.2Aと設定した場合

参考

USB機器の概算値です。メーカーやモデルでかなりの差がありますので、参考程度に載せておきます。

機器 電流値
キーボード 50mA
マウス 50mA
無線LAN 300mA
USBメモリ 300mA
USB HDD 700mA
DVDドライブ 1000mA

USBのHDDやDVDドライブを使いたいときは、USBハブでアダプタ付属の物(セルフパワー)を経由して接続することで問題なく使うことができますね。(USBハブからの電流供給で、Raspberry Piは電流を供給する必要がなくなるため)

失敗談

今回の話の発端は、家で眠っていたバッファローのHD-PE320U2というバスパワーのUSB HDDを使おうとしたことでした。ところが、これをRaspberry Pi B+につなげるとHDDが全然認識しません。電流制限を解除して1.2Aにする方法がわかったので、これをやってみるとたまに認識するところまでいきました。

ところが、読み書きをするとモーター音がピタッっとして止まります。「1.2Aまでいけるはずなのになぜ?」(実は、後で気が付いたのですが、各USBポートが1.2Aではなくて合計1.2Aということを見落としていました。)

ここから迷走がはじまりますw。

まず、電源をUSB充電用の2Aまで出力できる電源とUSB充電用の太いケーブルを買いました。ところが、これでも解決せず。そこで、セルフパワーのUSBハブを使います。これでも失敗(実はRaspberry PiとUSB HDDを同じUSBハブで共有してしまっていたのが原因。ハブは1A品、でもそれに気が付かず・・・)

「モーターの起動電流が原因じゃないか?」ということで、これが瞬間的に1.2Aを超えているんじゃないかという推測です。それを調べるために回路を考えました(かなりの迷走ですw)。GND側に電流検出の抵抗Rs(0.1Ω)を入れて、それを20倍に増幅する回路(RG=1kΩ, RF=20kΩ)です。1Aで2Vの出力が得られる計算です。回路図と作った回路です。USBの間に挟んで電流を測定します。

20150316_6
20150316_7

これを使ってUSB HDDの電流を測ったのがこれです。

20150316_8

ピークが1A(2V)程度ですが、USBの制限値1.2Aを大きく超えることはなさそうでした。回路自体の誤差などを考えてもHDDが動かないような原因ではなさそう。

ピキーン!

ここで初めて気が付きます。「電流制限は各USB出力ではなくて全USB出力の合計なのでは?」もしそうであれば、無線LAN用のUSBがもうひとつのポートに刺さっているではありませんか!!

この無線LAN用のUSBが0.3A程度消費していたので、USB HDDと合わせて過渡的に1.2Aを超えてしまっているのがHDDがうまく動かない原因でした。わかってしまえばすごく簡単なことでしたが、見落としや勘違いなどもあって解決にまる1日かかってしまいました。

おかげで1年半ぶりくらいにはんだ付けをしましたが、やっぱり回路を作るのはたのしいと再認識できた機会でもありました。