2014年から2015年の年末年始はこの作業にかかりっきりになりました。無印A・Bについての記事はよくありますが、B+についてはまだネット上では情報が見あたりませんでした。結果としてRaspberry Piを使うのは諦めるという話なのですが、かなりの作業時間を投入したので、どなたかのお役に立てばと思い作業経過をメモしておきます。
<前提及び目標>
・Raspberry Piをモバイルバッテリーで動作させたい
・イーサネットとUSB無線LANアダプタを同時に動作させたい
・イーサネットはPC/Macとのクロス接続
・USB無線LANアダプタはRealtek8192cu搭載モデル(アイオーデータWN-G300UA)
<まとめ>
・Raspberry Pi自体の電源はヘッダピン(5V)から供給
・8192cuにはRaspberry Piを介さずに直接電源を供給
・Raspberry Piへの電源付近に電気二重層コンデンサ(0.5F)を追加
・8192cuの電源付近に電解コンデンサ(1500uF)を追加
・/etc/network/interfacesのインターフェース起動はallow-hotplugではなくautoにする
・/etc/network/interfacesのspaの設定ファイルの呼び出しはwpa-roamではなくwpa-confインターフェース起動はallow-hotplugではなくautoにする
・/etc/modprobe.d/8192cu.confを作成してoptions 8192cu rtw_power_mgnt=0を追加
・電源に使用するケーブルは太いゲージのものを使用
・作業をするときにはシリアルでコンソールを接続しておく
・電源の投入は電源の完全切断から5秒以上待つ
<効果不明>
・OS・ファームウェアのアップデート
・SDカードの選定
・/boot/config.txtのmax_usb_current=1の追加
<経過>
話しは、Ethernetと無線LANの設定が終わったところから始まります。EthernetからのSSHログイン、無線LAN経由でのyahoo.comへのpingが通ったところで、ミドルウェアの設定に入ろうとしました。ところが再起動したときに、Piが正常に起動したり、しなかったりします。これでは安定運用が難しいので、色々な設定・回路構成を試してみました。目安としては5回連続して成功するまでとりあえず試す、それまでに起動しない試行が一度でもあればボツ、最終的には10回連続成功を目指します。
以下、
○=完全に起動成功
△=SSH(Ethernet経由)でログインはできるものの無線LANが不通
×=SSH(Ethernet経由)すらできない
・初期状態
○ 7回
△ 4回
× 1回
・rpi-updateを実行後
○ 3回
△ 1回
× 1回
・5v電源ピンに100uFのコンデンサ追加
1510成功
・8192cu.confにoptions 8192cu rtw_power_mgnt=0 rtw_enusbss=0追加
○ 6回
△ 1回
× 5回
・wifiドングルを外してみる
○ 10回
wifiドングルが影響しているという判断を確定
・wifiの省電力設定を最大化
rtw_power_mgnt=2 rtw_ips_mode=1 rtw_hwpwrp_detect=1 rtw_enusbss=1
× 2回
・電源をモバイルバッテリからMacのUSBポートに変えてみる
△ 1回
× 1回
・SDをトラセンドから東芝に変えてみる
△ 1回
× 4回
・電源用ケーブルを100均のケーブルから充電用USBケーブルに変えてみる
○ 2回
△ 2回
× 2回
・電源部分に100uFに加えて15000uFのコンデンサを追加
○ 3回
△ 2回
× 1回
・マイクロUSBからでは無くヘッダピンから給電
○ 4回
△ 3回
・15000uFから0.5Fの電気二重層コンデンサに変更
○ 5回
・ヘッダピンからでは無く充電用USBケーブルで給電(コンデンサは100uF+0.5F(電気二重層))
○ 1回
△ 1回
× 1回
・/boot/config.txtでカレントリミッター解除 ケーブルは充電用USB
○ 11回
△ 3回
× 2回
・/boot/config.txtでカレントリミッター解除 ヘッダピンからの供給に変更
○ 4回
× 1回
・/boot/config.txtでカレントリミッター解除 充電用USB 電気二重層コンデンサー
○ 8回
△ 3回
× 1回
・/boot/config.txtでカレントリミッター解除 ヘッダピンから供給 電気二重層コンデンサー
○ 12回
△ 3回
・/boot/config.txtでカレントリミッター解除 ヘッダピンから供給 680uF
○ 5回
△ 1回
× 1回
・電源直供給ハーネス+ホストポート側コンデンサ0+電源側コンデンサ0
○ 2回
△ 1回
× 1回
・電源直供給ハーネス+ホストポート側コンデンサ0+電源側コンデンサ0+8192cu.confで省電力設定
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ15000uF+8192cu.conf
○ 2回
× 2回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf にusbenum=0
△ 2回
× 1回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum=記載削除 pwrmgmtのみ
× 2回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum最大省電力+トラセンドSD
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum最大省電力+トラセンドSD+Ankerの第2世代型バッテリー
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum最大省電力+トラセンドSD+AC100V用の2AのUSBアダプタ
△ 3回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum最大省電力+トラセンドSD+wpa-roam からwpa-confに変更
△ 3回
× 1回
・/etc/network/interfacesでallow-hotplug eth0
× 1回
・/etc/network/interfacesでeth0/wlan0をauto
○6回
・ここからwpa-confからwpa-roamに変更
△ 2回
× 1回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum省電力無効+トラセンドSD+wpa-conf+auto eth0/wlan0
○ 4回
× 1回
wpa-confにしてからはイーサの起動失敗・wlanの起動するけど自動接続されない問題は解決。
両方のインターフェースをautoで起動するのがよい模様。wpa-confにする confにすると一旦接続したネットワークが切断されたときに再接続をしないけれども仕方なしとして妥協することに。interfacesの設定内容は結局以下の通り
——————
auto lo
iface lo inet loopbackauto eth0
iface eth0 inet static
address 192.168.11.11
network 192.168.11.0
netmask 255.255.255.0
broadcast 192.168.11.255
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
—————————-
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum省電力無効+東芝SD+wpa-conf+auto eth0/wlan0 +max_usb_current=1
公式Q&AにSDに注意とあったので評判のいい東芝製に変更してみる
○ 2回
× 2回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum省電力無効+トラセンドSD+wpa-conf+auto eth0/wlan0 +max_usb_current=1
○ 3回
・充電用ケーブル+コンデンサ無し+8192cu.conf enum省電力無効+トラセンドSD+wpa-conf+auto eth0/wlan0 +max_usb_current=1
× 2回
ここからソフトウェアの設定だけではやはり解決しない問題と判断
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum省電力無効+トラセンドSD+wpa-conf+auto eth0/wlan0 +max_usb_current=1 +マイコン側と同時起動
マイコンを別途使っているシステムでそちらには大きなコンデンサが繋がっている。起動時の突入電流が大きいはずなので、同時に起動しても問題無いかの検証を実施。
○ 5回
× 1回
・電源直供給ハーネス+ホストポート側コンデンサ1500uf+電源側コンデンサ0.5F+8192cu.conf enum省電力無効+トラセンドSD+wpa-conf+auto eth0/wlan0 +(max_usb_current=1を消す) +マイコン側と同時起動
○ 5回
× 1回
・ここでリセットに失敗しているのではと考えシリアルコンソールを接続
電源を抜いてから2秒程度ではリセットされないことを確認
どうやら3秒ぐらいが分かれ目で5秒待ってからでまずOK
○ 10回
これでとりあえずマイコン側に給電していない場合には10回連続成功
○ 7回
× 2回
ここで×になったのは起動プロセスの途中のシビアな段階でわざとマイコン側の給電を開始した場合
<まとめのまとめ>
以上の検証を経て、まとめに記載した結論に至りました。この電源構成と手順であれば、今のところ安定的にPiを起動し、ネットワークインターフェースを確実に初期化できています。が、これだけ電源周りの下準備をしなければ、安心して起動がさせられないというのは、なかなかに問題です。電気二重層コンデンサのような10年前にはパーツショップに並んでもいなかったパーツの手助けを借りて初めて安定的に起動できるというのは尋常な状況では無いと思います。今回のシステムではUSBポートのデバイスを更に増やさないといけないという事情があります。RFIDリーダなので消費電力が少ない訳ではありません。そうするとまた起動プロセスが不安定になるリスクをはらんでいます。また常時自分が起動するのであればよいのですが、自分以外の利用者に「5秒ルール」を徹底するのもまた容易ではないです。以上の検証結果から、今回のシステムではPiの利用を見送ることにしました。ただ絶対不可能では無いので、代替案がボツになればPiに戻ってくると思います。