BeagleBone Blackのハードウエア不具合
BBB (BeagleBone Black、以下同様) を起動しようとしたとき、電源LEDが点灯するだけで起動しない事が稀にある。またこれよりも少し頻度が高いのだが、起動しても時々イーサネットが有効にならないことがある。後者の症状は以下のようなものだ。
- 物理層のリンクが上がらない (RJ-45のLEDが全く点灯しない)
- 物理リンクするがDHCPからアドレスを取得できない
気付いていないだけで他の症状もあるかもしれないが、いずれにせよイーサネット経由のネットワーク接続が使えないことに変わりは無い。そんなに頻繁に起こるわけではないし、再起動すると直っていたので放置していた。最近2回再起動しても直らない場合が発生したので調べてみたら、どちらも既知の問題として話題に上がっていることがわかった。
/*----------- -----------*/
既知の問題
キーワード「beaglebone black ethernet phy」でGoogle検索するとBBBの開発者が参加していると思われるGoogle Groupsのスレッドがいくつか見つかる。一番最近に開始されたと思われるスレッドを見ると、私が経験した2つの現象はシステムリセットの問題が共通の原因と捉えられているようだ。なるほど、これは一理ある。
過去のスレッドを見ると、去年5月23日初出のスレッドはなんとなく尻切れトンボになっている。また8月1日に開始されたスレッドは10月29日に「Best answer -- RESOLVED:」が出たが、11月27日に最初に紹介したスレッドが始まっていて、結局未だ解決策も回避策も提案されていない状態 (no solution/workaround for this specific problem being suggested)、と言う事だ (2013年11月27日時点)。
解決策
11月27日に始まったスレッドにAndrewTaneGlenは「C24とC30を取り除くと1,000回電源をon/offしても1回も問題が発生しなかった」と12月9日付けで発言している。多分これは私の持っているのと同じRev. A5Cについての事で、
SYS_RESETn信号とグランドの間に入っているコンデンサーを指しているようだ。これはおそらくRESETスイッチのチャタリング防止の目的だと思う。C30は同じ信号のJTAGヘッダー近くに入っている。
SYS_RESETn信号はAM3359の他にイーサネットトランシーバーLAN8710Aにも供給されている。
C24およびC30が入った状態だとSYS_RESETn信号は約10msかけてゆっくり立ち上がるが、取り除くと立ち上がり時間は1µs以下になるハズだ。
これらのコンデンサーを取り除くと問題が解決するのなら、問題の原因はこう言うことらしい。
SYS_RESETn信号に接続されているAM3359のnRESETIN_OUT端子はリセット入力であると同時に、オープンドレイン形式のリセット出力端子でもある。PORz (Power On Reset) 端子がLレベルの間はnRESETIN_OUT端子もLレベルに固定されている。PORz端子がHレベルに遷移してから一定の遅れの後nRESETIN_OUT端子もHレベルになろうとする。
(Source: AM335x ARM® Cortex™-A8 Microprocessors (MPUs) Technical Reference Manual Literature Number: SPRUH73J)
ただしnRESETIN_OUT端子はオープンドレイン出力なので、立ち上がりはSYS_RESETn信号に接続されたコンデンサーの影響でゆっくりとしたものになる。
AM3359のnRESETIN_OUT端子もLAN8710AのnRST端子もシュミットトリガー入力なので
遅い立ち上がりの信号を受ける事自体問題はないが、それぞれの入力が受け取る信号はノイズなども含めると完全に同じではないから、出力の0→1遷移タイミングがズレる場合が発生する。
つまりリセットが解除されるタイミングがズレる場合があるのだ。
多分LAN8710AがAM3359より先にリセット解除されても問題ないだろう。しかしその逆だとイーサネットの存在が認識されない場合が出てきてもおかしくない。
波形の立ち上がり時間が長くなるほどズレが大きくなる、と言うか、ズレは立ち上がり時間以上に大きくならない。だからC24とC30を取り除くとイーサネットが有効にならない問題が解決するなら、それは辻褄が合っているのだ。
12月9日付けAndrewTaneGlenの発言には「対策しないと1,000に54回問題が発生した」ともある。以上推定したような状況なら、まぁそんなものだろう。ただしこれはイーサネットが有効にならない問題についてだ。電源を入れても起動しない問題には別の原因があると考えるほうが自然だと思うが、「実は」と言うような裏の事情があって関連している可能性は否定できないだろう。
設計ミス?
先にも引用したTRF (Technical Reference Manual) には「nRESETIN_OUT端子を入力と出力、両方の目的に使うのはダメだ」と明記してある (赤線は筆者)。
(Source: AM335x ARM® Cortex™-A8 Microprocessors (MPUs) Technical Reference Manual Literature Number: SPRUH73J)
つまりnRESETIN_OUT端子にRESETスイッチとLAN8710AのnRST端子の両方を接続したのは、このガイドラインに対する明らかな違反である。その上C24とC30を取り付けたのはもっとマズかったと言うべきなのだろう。
対策はどうしよう
C24とC30を取り外すと、少なくともイーサネットが有効にならない問題が解決するのはほとんど確かだと見てよいだろう。しかしそれを実施するのは少々厄介だ。
相手がとても小さいのだ。まぁC24だけを取り外そう、と言う話ではないので、そんなに難しい訳ではないが・・・でも厄介である。それに効果と副作用もやってみないと分らないので、直ちに実施に踏み切るのはリスクを取り過ぎだろう。
もう少し穏便な対策としてSYS_RESETnにつながっているPullup抵抗の値を小さくする事が考えられる。これは何も抵抗を交換する必要は無く、P9に出ているSYS_RESETn (P9.10) とVDD_3V3B (P9.3:4) の間に1kΩ位の抵抗をつないでやればよい。
立ち上がり時間が1/11になるので、それなりの効果が期待できる。これでしばらく様子を見ながら、Google Groupsのスレッドの結末とbeagleboard.orgの動向を見守りたいと思う。
今回のまとめ
ある程度実用的なプロジェクト、特に無人運転するサーバー的な用途にBBBを使うのはもう少しハードウエアのリビジョンが進むのを待ったほうが良さそうである。ハードウエアもオープンなのは、普段なら表に出ないような問題点まで見えて多少はらはらするが、成熟度合いの見極めをつけるのには好都合と考えるべきなのだろう。
メジャーブランドの製品でもファーストロットに手を出すのはそれなりのリスクがあることを考えれば、コミュニティサポートのハードウエアの成熟に多少時間がかかるのは仕方が無いのかもしれない。
| 固定リンク
「趣味」カテゴリの記事
- カメラのファインダーについて考える(2016.02.29)
- 空間フィルターを使った天体写真の画質改善(2015.01.22)
- 水星と金星のランデブー(2015.01.10)
- カメラのノイズと解像感(2015.01.09)
- Fujifilm X-M1 とそのアクセサリー(2014.12.14)
「IT」カテゴリの記事
- DSDはピアノ・ピアニッシモを奏でられるのか?(2016.08.01)
- SATAアダプターを交換した(2014.06.25)
- ReFSを使う(2014.06.22)
- PSUを交換したらメモリーの問題も解決した(2014.06.16)
- Windows 8/8.1: SATAモード変更 (IDE⇔AHCI⇔RAID) に再インストールもregeditも要らない(2014.06.15)
「BeagleBone Black」カテゴリの記事
- DSDはピアノ・ピアニッシモを奏でられるのか?(2016.08.01)
- 最終回: microSD カードの寿命を調べる(2015.07.27)
- 続報3: microSD カードの寿命を調べる(2015.05.02)
- 続報2: microSD カードの寿命を調べる(2015.03.01)
- 続報: microSD カードの寿命を調べる(2015.02.21)
この記事へのコメントは終了しました。
コメント
大変有益な情報をありがとうございます。
Rev.Bを使用していますが、記事と全く同じ現象が発生し、
プルアップ抵抗で対応したところ問題なく動作できるようになりました。
今回の対応はプルアップ抵抗を少なくし、できるだけC24等を無視する方向で
対応していると思いますが、Rev.A6Aで、なぜかC24の容量が1μFから2.2μFに
増えています。なぜなのでしょうね?
また、記事の冒頭にあります「電源LEDが点灯するだけで起動しない事が稀にある」ですが
私の環境でも発生していて原因を調べたところ、どうやらu-bootでキー入力を感知して、
起動が止まっているようでした。
このため、UART0_RXをプルアップしたところ、問題が発生しなくなりました。
(同じ原因かわかりませんが、私の環境で解決できたので、お困りの方は試してみてください。)
これからの記事も楽しみにしております。ありがとうございました。
投稿: わたなべ | 2014年7月29日 (火) 14時52分
わたなべ さん、
お役に立てたなら幸いです。
Rev.A6AでC24が2.2に増えたのは別の問題に対処したつもりだったとか。
記事で取り上げたGoogle Groupsのスレッドにそれらしいことが書いてありました。
C24とC30を取り除くと治ると言う話が最初に登場したのが去年の12月8日で、Rev.A6Aの回路図の日付は12月13日なので反映が間に合わなかったのだと思います。
ただ・・・最新のRev.CでもC24は2.2のままですね。
どうなっているのだろう。
多量の受注残を抱えている事と関連しているのかな。
早く品質も供給も安定してくれるといいのですが。
起動しない現象はu-bootの問題、了解です。
回路図を確認して驚きました。
UART0-RXは100kΩ(R165)でプルダウンされていたんですね。
これだと起動のタイミングでNull文字を受信する可能性があります。
ただしフレーミングエラーも起こるはずなのですが、エラーの起こった受信データを無視していないのでしょうか。
開発元はソフトウエアの修正で対応しようとしている様です。
プルアップに直してもらう方がスッキリするんですけどねぇ。
この問題は最近起こらなくなったので忘れてました。
シリアルコンソールを常時接続していたのでUART0-RXをプルアップしたのと同じ状態になっていたのだと思います。
シリアルコンソールを外した状態で問題が出るようなら試してみます。
アドバイスありがとうございます。
投稿: エンジニア | 2014年7月29日 (火) 15時37分
このため、UART0_RXをプルアップはどうやってするんですか?
投稿: | 2015年6月12日 (金) 11時20分
名無しさん、こんにちは。
私は BBB の基盤裏側にプルアップ抵抗(10kΩ)をはんだ付けしています。
P9-4 (VDD_3V3) と UART0-RX の間に 1/6W 抵抗を入れるのに十分なスペースがありますよ。
投稿: エンジニア | 2015年6月12日 (金) 11時57分
P9-4 (VDD_3V3) と UART0-RX の間に 1/6W 抵抗を入れる 回路図をください
投稿: | 2015年6月12日 (金) 14時52分
UART0-RXて、p9_26ですか?
投稿: | 2015年6月12日 (金) 15時54分
BBB の基盤裏側にプルアップ抵抗(10kΩ)でいいんですね
投稿: | 2015年6月12日 (金) 15時58分
名無しさんからたくさん追加コメントをいただきました。
以下このコメントは、↓のURLにあるリンク「Schematic (PDF)」からダウンロードできる回路図に基づきますのでご参照ください。
http://www.elinux.org/Beagleboard:BeagleBoneBlack#Hardware_Files
まず UART0-RX は p9_26 ではありません。
回路図4ページの左端にある「HEADER 6」の4番ピンです。
正確な信号名称は「B_UART0_RX」ですね。
なお「HEADER 6」は BBB 基板上で P9 のすぐ内側に並んでいる6ピンヘッダーです。
回路図と言われても、前の私のコメントで言葉で書いたのと大差ありません(苦笑。
ここに図を張り付けられないので AA になりますが、下の通りです。
VDD_3V3B (P9_4) ---(10kΩ)--- B_UART0_RX (HEADER 6 pin 1)
プルアップ抵抗は、シリアルコンソールを使う予定が無ければもっと小さな値、たとえば 2.2kΩ 程度でも良いはずです。
何かの拍子に過電流がながれるといけないので、1kΩより小さくしない方がいいと思います。
逆に 10kΩ より大きいと効果が弱いと思います。
私は基板裏に取り付けましたが、これ以外の方法、たとえば「HEADER 6」にピンソケット経由で取り付けてもかまわないはずです。
この場合抵抗のもう一方は何らかの方法で VDD_3V3B (P9_3 または P9_4) に接続します。
基板裏に取り付ける場合抵抗のリード線がかなり長くなりますので、絶縁チューブをかぶせておくと安心です。
名無しさんからのコメントは同じ趣旨のものが2通セットになっている場合がありました。
このようなコメントは片方のみ掲載させていただきましたので、よろしくご了承ください。
投稿: エンジニア | 2015年6月12日 (金) 21時16分
有難うございました
投稿: | 2015年6月14日 (日) 18時14分
イーサネットが有効にならない問題が解決する方法で5.6kΩ位の抵抗でもいいですか?
投稿: 齐天大圣 | 2015年6月17日 (水) 18時16分
齐天大圣 さん、
5.6kΩでも時定数が 1/3 くらいになるのである程度効果があると思います。
ただし 1kΩ だと 1/11 なので、これよりも効果が低いはずです。
なおこの対策は BBB Rev. A5C に基づくものです。
Rev. A6 以降ではこの部分の回路が変更されているので、対策の効き方が変わっていると思います。
もしかすると対策しなくても大丈夫かもしれません。
ところで齐天大圣さんって、名無しさんと同じ方ですか?
投稿: エンジニア | 2015年6月17日 (水) 19時25分
お見事、その通りです。お礼申し上げます
投稿: 齐天大圣 | 2015年6月17日 (水) 19時32分
UART0_RXをプルアップしても起動しない問題が直らないですが、どうすればいいでしょうか
投稿: 齐天大圣 | 2015年6月22日 (月) 17時55分
齐天大圣 さん、BBB が起動しない原因はいくつも考えられます。
この記事で取り上げハードウエアの不具合は、そのごく一部に過ぎません。
第一歩として起動しない原因を特定する必要があります。
そのためにはシリアルコンソールをつなぐ必要があります。
http://qiita.com/masato/items/49961968cfed2c9d95aa
eMMCに書かれたuBoot環境が壊れた可能性が疑われますが、その場合以下の記事によれば起動可能なmicroSDを入れた状態でS2を押しながら起動できるようです。
http://www.voip-info.jp/index.php/BeagleBone_Black
この記事に書かれた対策が効くのは「時々起動しない場合がある」程度の不具合です。
全く起動しない場合は別の原因がある可能性が高いと思います。
最悪 BBB が壊れてしまった、と言う事も考えられます。
投稿: エンジニア | 2015年6月22日 (月) 21時12分