Intel Edisonをdsd再生可能なmobile music playerに仕立てる。

作成日2015年1月2日
更新日2015年1月4日 一部追記あり
更新日2015年1月31日 千石通商で買ったんだった。


前回の更新 から1ヶ月。IntelのEdisonは結構使えるmusic playerになりつつあります。

まだ問題は残っていますが、ほぼLivaと同じレベルの再生環境を作り出すことができました。

実は想定外だったのは、「音」の面ではLiva以上だった事です。
USBが1portしか無いのでUSB-HUBを噛ましたり、無線LANしか無いのでWifi電波も飛びまくりです。
音が良くなる方向の要素は余り無いと思ってたのですが、驚いたことによりクリアな澄んだ音が出てきました。

CPUはLivaより格段に遅いのですが、どのみちLivaでも500MHz駆動してましたので問題ありません。
なによりRaspberry Piの様な「音飛び」「音切れ」が起きるような事も無い様です。

まぁ、色々なファクターが作用した偶然の結果かもしれませんが、結果オーライと言うことで。

---

さて、前回はmpd-dsdの最新版のmakeが失敗した所まで書きました。
その原因は実に解り易いものでした。

そもそもalsaがofficial release版の状態では、ubuntu最新版環境であってもmpd-dsd最新版はmakeできません。

というのも最新版のmpd-dsdにはalsaのnative dsd supportが組み込まれています。
従来のDSD転送方式であるDoP(DSD Audio Over PCM frames)でもDSD native再生には違いないです。
でも、PCMフォーマットにcapsule化しなくて済むならそれに越したことは無いでしょう。
しかし、このalsaの変更はまだkernelに正式に組み込まれておらず、patchとして提供されています。
当然、ubuntuにも取り込まれていないため、mpd-dsd最新版はmakeに失敗してしまいます。
またEdison(ubilinuxも)のkernelはubuntuよりも古いものですので、mpd-dsd最新版を入れるのはちょっと厳しいかも。

と、言うわけでmpd-dsdは0.18.11-dsdで落ち着きました。
mpd-dsdでは、これ以降のversionでnative dsd supportが行われています。
まぁ、CONCERO-HPも現時点ではDoPしか使えないのであまり恩恵は無さそうですので良しとします。



また前回、情報のエッセンスとして残した点ですが...

ubilinuxのkernelをYocto環境で変更する方式はそのまま継続です。
但し、USB-AUDIOのconfigはkernelへ組み込みでは無く、moduleに変更しました。

なぜ、moduleにしたか?と言うと、alsaのcard番号をどうしても0にしたかったからです。
alsaをkernel組み込みにすると、Loopbackデバイスが必ずcard 0に鎮座する様です。
alsaの設定でsysdefaultをcard 0以外にすればcard 0にこだわる必要もないのですが、結構いろいろ周辺に手を入れなきゃならなくなるので。
今のところLoopbackを必要としてませんし、ubuntuでもUSB-AUDIOはmoduleで作られているのでmoduleにしました。


そして、現時点での最大の問題は...

rebootすると、USB OTGが100% OFFになる。その状態で再度rebootすると100% USB OTGがONになる。

...もっと簡単に言うと...

rebootすると、USB機器が認識できなくなる。でも、その状態でもう一回rebootするとUSB機器は認識できる。その確率(今の所)100%だ。

です。


最初に通電した時は問題なくUSB機器を認識できるので、何らかの理由でrebootしない限り問題はありません。
rebootするんじゃなくて、一旦shutdownつまり再度起動するには電源OFF/ONするのであれば問題は発生しません。

現時点での推察としては...
EdisonのUSB portはちょっと特殊です。
USBから5Vを給電することでもEdisonは動作しますし、他の電源入力端子から7V以上の給電をすることでもEdisonは動作します。
また、USBから給電している場合、USB portへUSB機器を接続しても動作しません。
つまりUSBがhost modeかdevice modeかのどちらかになる、USB OTGの動作そのものです。
device modeになればEdisonはUSBからの給電で動作する子機器になり、
host modeになれば、EdisonはUSB機器をcontrolする親機器になります。
そしてOTGの判別方法はID pinがGroundに落ちているかどうかと言う、至極普通の方式です。

それでは、USBをhost modeにした状態(ID=Ground)で、給電をUSB portから行うとどうなるか?
試してみると、Edisonは起動しますがUSB機器は認識できませんでした。
つまりID pinの状態よりも給電状態の判別の方が優先される様です。...本当かな??

ちなみに現在、私のEdisonのUSB portにはSelf powerのUSB HUBが接続されていますが、Vcc線は未接続です。

これは、
「reboot時にUSB Vcc電圧をUSB portからの給電と誤認識してdevice modeで起動しているのか?」
と言う推察から試しにcutしてみたものです。

しかし残念ながら状況は変わらず。しかもVcc未接続状態でも同じ様にUSB機器は認識されています。


やはりkernelのrebootシーケンスでUSBのモードを設定する処理に何らかの問題がありそうな気がします。

このあたりで議論されていますね。

maedaさん(前田さん?日本の方かな??)曰く、

「最終的にはEdisonのVBUS(20)とUSBのVBUSをcutしてPSW(21)を直接つなぐことにした。」

との事です。うーむ。



私の場合は、(幸いな事に)100%の再現性であることに妥協して、Edison起動時に

「USBが認識されなかった場合は1回だけ再起動する」

というworkaroundを追加して凌いでいます。1回だけが重要。




Intel Edison music player Version 1.1
edison1 現在の状況

この写真ではEdisonに入れ替わっていますが、
CONCERO + LIVA + 電池の3段重ねだと厚みがあり、
bagへの収容性が悪かったので「横置き」にしていました。

見えないけど、電源は秋月のDC-DCコンバータK-07608と言うのに替えました。\700也。

ベースは1.5mm厚のアルミです。
実はアルミ板で組む前に、アクリルで同じものを作っています。
その時は問題なかったのですが、アルミにしたらEdisonのWifi感度が著しく悪くなりました。

しかし直接の原因はアルミ板(だけ?)では無く、SSD基盤からのノイズでした。
試しに1mmアルミ板をEdisonとSSDの間に差し込んでみたらping応答時間が安定しました。

配置を見直すべきかもしれませんが、コネクタ配置の関係でこの向きに置きたいです。
結果としてアルミのセパレータを銅箔テープで包んで間に挟んでみました。

写真では試しに外部アンテナを付けています。あくまでテスト的に入れただけですのであしからず。
ちなみに外部アンテナをWifiルータの上に置いていますが、むしろ近すぎて駄目だった様です。
逆にノイズ源であるはずのSSDの上の銅箔に貼り付けた方が安定したりします。Wifi難しい。

いっそhostapdでEdisonの内蔵Wifiをaccess pointにしちゃおうかとも思いますが
「突然落ちちゃうこともあるけど、hostapd再起動すればオッケー」的な状況らしいです。

hostapdはちょっと高機能すぎます。イコール重すぎるんじゃないかな?っと躊躇。

1/4追記
EdisonのWifiが弱い件、解決したかも。

このスレッドがズバリでした。

/etc/network/interfacesに以下を追記したところ...

post-up iwconfig wlan0 power off

なんと1桁response timeが減り、しかも安定しています。
power managementをoffにしたので消費電力は上がったんでしょうけど。

今まではWifiの接続自体が不安定な印象でした。
syslogを確認すると、何度もAccess pointとの接続に失敗した挙句、何とか繋がる事も多々ありました。
それが、この変更により一撃で繋がっています。

全く思いつきませんでしたが....
そういえばF-07CとかD4とかでも、Wifiのpower management設定って悪さする代表選手だったよなぁ。

Intel Edison music player Version 1.1(stack)
edison1 3段重ねにしてみました。

今回、Edisonのケースは厚み20mm(内寸)です。
3段重ねにしてもRaspberryPiの時よりも薄くできました。
20mmのFANを入れる為にこの高さにしましたが、FAN不要ならあと5mm位削れたかな。

Edison収容部は100x150x1.5(mm)のアルミ板でサンドイッチです。
若干奥行きが大きいですが、CONCERO-HPにUSBケーブルを刺した状態で重ねたときに、
USBプラグ部を保護できるサイズです。
またフロント側にMicroUSBコネクタが集合していますが、これらもガード出来る位置まで
引っ込めることができました。MicroUSBジャックは弱すぎなので...。

またまたFANを入れちゃったのは、m-sata SSDが思い切り発熱するからです。
FAN無しだとSSDの煽りを受けてEdisonまで80度越えになったりします。


1/4 ついでに追記
モバイルバッテリに刺さっているのは、 いつものUSBケーブル(生産終了品)のコネクタです。
但し、コネクタから出ているケーブルは 2.4Aまでイケる ケーブルです。

今回のシステムでは仮組時にこのケーブルでテストしていました。1本接続だけで問題なく動きます。
ところが、実際に持ち出す際に いつものケーブル を使った所、再生中にSSDを認識できなくなりました。どうやらいつものケーブルの限界だった様です。

でもバカでかいUSBコネクタは使う気にならないのでこれらを合体させてみました。結構いい感じです。

1/31 修正と追記あり

おまけのおまけですが、EdisonはRTCを持っているので、外付けで電池をつければ時間が保持できます。
私の場合、ボタン電池型のリチウム電池を付けています。
千石通商の店頭で適当なサイズ(2032より小さめ)の物を買った。 多分これ。ML2016-HJ1
2次電池なのでedisonは充電もしてくれるらしいけど...時間保持だけなので効果の程は良く判りません。
取り敢えず1970年に戻ることも無く2ヶ月弱動いてます。




実はEdisonには当初あまり期待していませんでした。

まずアクリル板でケースを作ったのも、そんな思いからです。

でも、予想外に「いい感じ」なので、アルミ工作に突入です。
WebリモコンもLivaと同様に使えたし、とりあえずLivaには休暇とってもらっています。


戻る

inserted by FC2 system