12.GNUnilinkに挑戦 (1/3ページ)

  これは、もはや凄いとしか言いようがありません。私とて、とうてい足下にも及ばないというか、崇高なレベルです f^_^;。これで、純正オーディオへの外部音声入力の道スジができたわけですから、マニアにとっては非常に価値ある情報だと思います。以下、超々ディープな、たぁぼぉさんのレポートです。どうぞ、気合いを入れて読んで下さい(爆)。

1. はじめに

 すでにご承知のようにXA-107は製造中止、XA-300はGOLFのヘッドユニットとの相性のせいかリセットしまくり、といったように市販品でSONYバス(Unilink)を制御してAUX入力を可能にするものがありません。
  (【注意】 SONY および Unilink はソニー株式会社の登録商標です。)

というわけで、自作の道を探すわけですが、Webを検索すると "GNUnilink" と、 "Mic's Unilink Interface" なるサイトが見つかります。

  ●GNUnilink: 作者Simon Wood, PIC系. 通称「ドングル」
  ●Mic's Unilink I/F: 作者Michael Wolf, AVR系

 AVRマイコンを使ったMicのはかなり本格的ですが、反面荷が重そうです。 一方、GNUnilinkはRS232C用のドライバICを除けばPIC一個と僅かな部品だけです。 実際にプログラムを見てみると、使用言語の違いはあるものの、両者に機能的な大差はなさそうです。 ...ということで、シンプルでお手軽感の高いドングルに挑戦してみました。

 が、当初、Simonのオリジナルの通りに作ったところ、リセットの嵐に悩まされました。 試験用に準備したヘッドユニット(後述)ではそこそこ動くのに、実際にGOLFのヘッドユニット (MDX-5V101R)にソースセレクタ(XA-C30)を介して接続してみると全然ダメ。 1秒ぐらいの間隔で表示が点滅する、リセット頻発状態になりました。
 そこで思考錯誤を繰り返すこと約6ヶ月、ようやく幾つかの効果的(?)な改善方法が見つかりなんとか安定して動くようになりました。 また併せて、スリープ機能とBusOn信号を使った wakeup機能も実装しましたので、実用的にも合格ラインを達成できたと思っています。 ということで、以下にご紹介させていただきます。 (前フリ長すぎ...)

2. お断り事項

 本題に入る前に、お断りです。

−【お断りその1】−
 今回のドングル君は、GOLF4の標準のMDデッキ(MDX-5V101R)とソースセレクタ (XA-C30VまたはXA-C30)の組み合わせで動作を確認しています。その他のヘッドユニットでは確認していませんので、その場合は正常に動作しないかもしれません。 なお、CDチェンジャ(CDX-5V651)とMDチェンジャ(MDX-5G01)の実際パケットのモニタ結果を参考に実装している部分が多々ありますので、それらか、そのOEM元のチェンジャが接続できるヘッドユニットであれば動作する可能性は高いと思います。 ただし、その場合でもスリープ機能や"<AUX-IN>"のディスプレイ機能が正常に動作するかは判りません。

 それから、ソースセレクタなしの直結でも動作することを確認していますが、まれに演奏時間表示処理がスリープ動作と競合する問題があることから、ソースセレクタなしの場合には演奏時間のカウントアップを止めています。


これらでないと絶対にダメ、というわけではありませんが....

−【お断りその2】−
 MDX-5V101Rの場合、外付けできるCD/MDチェンジャは各1台の計2台までです。既にソースセレクタにCDチェンジャとMDチェンジャの両方が接続されている場合、更なる追加は出来ません。
余っているソースセレクタのポートにドングルを付けて第3番目の外部入力を設けようと野望を持っている方(実は私も)、残念ながら、ドングルではその夢をかなえることは出来ません。その場合はチェンジャのどちらか1つを外す必要があります。 なお、これはヘッドユニット側の制約(仕様?)のようで、GNUnilinkの問題ではありません。

−【お断りその3】−
 入念に動作確認をしたつもりですが、バグが無いとは断言できません。 その点についてはご容赦ください。

ということで、上記を踏まえた上で本題に移ります。

3. ハードウェア・回路図

 回路図を示します。若干オリジナルに手を加えています。


図をクリックしてください。回路図が見れます。(公開終了しました)

 −<オリジナルとの主な違い>−
  ●RS232CのドライバIC部は使わないので削除.
  ●ハードウェアリセット(Reset)用のトランジスタの回路は使わないので削除.(プルアップ抵抗のみ)
  ●保護用と波形整形用に抵抗とダイオードなどを追加.(効果の程は不明です)
  ●PICの1番と6番を接続.(BusOn信号によるスリープ復帰割込み用)
  ●動作中表示用のLEDを追加.(付けなくとも動作に影響ありません)

 なお、CD/MDモードの選択ですが、オリジナルではPICの2番ピン(RA3)を5VプルアップかアースかでCD/MDを選択するようになっていましたが、今回は自動選択機能を実装しましたので、回路図から削除しています。 (一応ソース上、マニュアル設定機能もdefine文指定で使えるように残してあります.)

 それから、以下のように部品選択の幅がオリジナルよりも狭くなっています。
 −<ハードについての制限事項>−

  ●PICは16F628でのみ確認.
    プログラムが大きくなってしまいました。16F627や16F84Aでは載りません。
  ●外部クロックは20MHz限定.
    安定性向上を図るには出来るだけ高速のクロックで動かすのが良いようです。
    ということで、オリジナルは4MHzから動くように書かれていますが、20MHz限定としました。

【2004年3月28日追記】:部品リスト、配線図、および、出来上がり写真
  <部品一覧>


  なお、PIC16F628については、"PIC16F628-20/P"を使っています。

  <配線図と出来上がりの様子>

  
(注):ICソケットの下に隠れている抵抗が見えるように、PICは外してあります。

-【参考】(開発用基板)-


開発用に作った基板.
実際に必要なのは上の部分と右下の3端子レギュレータの部分 (青く囲った部分)だけです。

 これは、開発用に作っ(てしまっ)た基板です。 RS232CドライバIC付きの回路(下側)と、 RS232ドライバなしの回路(上側)があります。上側の部分は、上記の回路図とほぼ同じ実装になっています。 一方、下側のPICの回路はSimonのオリジナルとほぼ同じものです。 上側のPICにドングルのプログラムをインストールし、CD/MDチェンジャの擬似をさせます。 また、下側のPICにはパケットモニタのプログラムを載せ、RS232CでPCに繋ぎSONYバス上のパケットをモニタします。 上側のPICを外して下側だけ使えば、SONYバスのモニタになり、さらにプログラムを変えると、ResetやBusOnのパルスのモニタにもなります。

 4本の黄色い線がSONYバスに繋がります。 Data, Clock, BusOnは上下のPICに並列に接続されています。 1本だけ基板裏に延びているのがResetで、当初は上側PICのリセット回路に繋いでいたのですが、現在はテストポイントに出して、普段は外しています。
 (なお、開発用基板の回路図については後日公開を考えています。)

4. プログラム

 コード一式を置きます。圧縮してあるので解凍して使ってください。 中にあるファイルのうち、GNUnilink.hex がPIC16F628指定で作ったバイナリファイルです。必要があればGNUnilink.asmの各種define文のところを修正して再ファイル化して下さい。(公開終了しました)

【2004年7月3日追記】:新バージョン GNUnilink version 1.8T_01
 第2版ドングルとしてご紹介していますが、本ハードにも互換があります。
 ハードの違いからバスOUT機能(ドングルへのCDチェンジャの接続)は出来ませんが、その他の機能追加や更なる安定性向上、それに第1版で見つかっているバグの修正が盛り込まれています。 オススメです。

 −<オリジナルとの主な違い>


  ●安定性向上 (労力の大半はこのために費やされました)
  ●RS232Cを使ったPC通信機能は削除.
  ●ひたすら進むだけの演奏時間表示機能 (なんか本物っぽい)
  ●スリープ機能 (電源スイッチが不要ってのは嬉しい)
  ●CD/MDモード自動判定 (余っているほうを選びます。当然ですが両方塞がってる場合はダメです)
  ●MDトラック名表示機能を削除 (MDディスク名表示機能のみ)

 なお、このプログラムは名前のとおりGNUライセンスとなっています。

5. Tools

 私が使った道具一式です。PIC用ツールは世間に沢山あるようなので、 これらに限らず、お好きなものを選んでいただければ良いかと思います。
 (A)PICライタ:
   ・秋月PICプログラマーVer.3キット (最新はVer.3.5)


【2004年3月28日追記】:超ローコストPICライタ
 \1000以下で作れるシリアルポート接続PICライター なるサイトがあります。 "JDMプログラマ" というものですが、拍子抜けするほど超簡単なハードでビックリ。 しかも "IC-Prog" というPC側ソフト(フリーソフト)に対応しているというから二度ビックリです。 私は試していませんが、現在PICライタの購入を検討されている方は必見です。

 (B)PICソフト開発環境:
   ・GPUTILS
      GPASM(GNUのPIC用アセンブラ)などのツール一式
   ・MINGW32
      Windows上のshell環境エミュレータ. Linuxユーザは不要. cygwinのほうが有名か?
   なお、これらのインストールにGCCが必要です。
   それから、若干の修正でMicrochip社のMPASMでもいけるらしいです。(未確認です)

 (C)パケット可読化ソフト:
   ・Richie(Richard Jonsson)作の"Unilink logger"
    これ、大感謝. Special Thanks to Richie!! です。
    これがなければ今回のGNUnilink実装は成功しなかったでしょう。
    Micのサイトから手繰っていけば見つけられます。PASCALのソース付きです。


 (D)自作のモニタソフト:
   ・Unilink loggerに食わせるパケットを収集するためのモニタ
   ・BusOnやReset等のSONYバスのbit状態モニタ
      パケットモニタについてはMassimiliano(Felix Max)作のツールがあるのらしいのですが
      見つけられませんでした。仕方がないので作りました。
      (ひどいコードなので今はまだお見せできませんが、後日公開したいと考えています。)


パケットモニタのRS232C出力をハイパーターミナルで表示しているところ

 (E)試験環境:
   ・万一壊れてもいいヘッドユニット一式.
    手持ちで余っていたMDチェンジャ(MDX-61)の制御部を使いました。
    一部、機種依存というか、GOLFのヘッドユニットとコマンドやタイミング条件が異なる部分があるので、
    最終的には実機での確認も必要です。


 なお、単に同じものを作りたいだけの場合と、解析&開発をしたい場合とでは必要な道具は違ってきます。大体こんな感じです。

パターン 必要なツール
1)同じものが欲しいだけ、PICライタ買うのも勿体無い なし。ただし誰かにPICのソフトを焼いてもらうこと。
2)PICぐらい焼いてもいいが、プログラムを変える気はない。 (A)
3)手持ちのPIC-LSIが異なるので再ファイル化が必要。 (A)+(B)
4)軽くひと通りトライしてみたい。 (A)+(B)、 できれば(E)
5)解析もしたい(例:XA-300ではなぜダメか調べたい) 開発用のボードを含め(A)から(E)まで全部.

6. 使い方と結果

 (1)オーディオ機器との接続構成
  ソースセレクタまたはCDチェンジャ接続用ケーブルにドングルを接続します。
 くれぐれもCD/MDチェンジャ接続台数制限は守ってください

 (2)組み込み
  接続後は、一度必ずヘッドユニットの電源を入れてドングルが認識されることを確認して下さい。
  これには以下の2つの意味があります。
   ●接続構成の変更をヘッドユニットに気付かせて組み込みを勧誘するため。
   ●ヘッドユニットからのスリープ要求イベントを貰うため。
  LEDが点滅していれば組み込みは成功しています。ヘッドユニットのスイッチを切るか、
  キーを抜いてアクセサリ電源を切れば数秒後にスリープに移行し、LEDも消灯します。
  一方、点きっぱなしの場合は組み込み失敗です。 その場合には、
    −ヘッドユニットの電源スイッチを入れなおす.
    −チェンジャを外して構成を変える.
    −1分ぐらい暫く待つ.
    −イグニッションONする.
  などしてみてください。

 (3)AUX入力
  特に問題がなければ、あたかもCD/MDチェンジャが繋がっているかのような表示になります。
  当然AUXのラインに音声信号が入っていれば音もでます。 音質も特に問題ありませんでした。

 (4)ディスク名表示・演奏時間表示
  少しややこしいですが、MDモード/CDモード、ソースセレクタ有り/なし、の場合で以下のようになります。
   【a】MDモード
     (a-1)ソースセレクタありの場合
       デフォルトではディスプレイへの"<AUX-IN>"表示後に演奏時間表示になります。
       いつも"<AUX-IN>"表示のままにしたければ、REPEAT(REP)ボタンを押してください。
     (a-2)ソースセレクタなしの場合
       いきなり演奏時間表示になりますが、"0分01秒"で止まり、以降はカウントアップしません。
       またREPEAT(REP)ボタンを1度押すと、"<AUX-IN>"の表示になります。
   【b】CDモード
     (b-1)ソースセレクタありの場合
       いきなり演奏時間表示になります。"<AUX-IN>"の表示はありません。
       またREPEAT(REP)ボタンを押しても何も変化はありません。
     (b-2)ソースセレクタなしの場合
       演奏時間表示が"0分01秒"で止まり、以降はカウントアップしません。"<AUX-IN>"の表示もありません。

  それから、時間表示のカウントアップがかなりギコチないとか、REPボタンを押して表示が変わるのに2〜3秒ぐらい
  かかったりとかいった部分がありますが、それらの点に関してはご容赦ください。
   (安定化対策の影響です。なお、時間はギコチなさの割には意外と正確だったりします。)

 (5)連続運転実績
  上記の構成で、2時間連続リセット発生なしを達成しています。
  また、試験環境では、24時間連続でのリセット発生なしも確認しています。

7. チャレンジャー募集!!

 接続性・再現性について確認してくれる方がいると嬉しいです。
PICが幾つか余っていますので、是非試したい、という方にはプログラムを焼いたものをお分けしたいと思います。
 (実はSONYバスケーブルのコネクタが高価ってのが一番の障壁なのですが....)
 オフミで配るなど、配布方法については考えたいと思います。

8. 顛末記とチマチマした話

 長くなるので別途書きます。(ノウハウ満載の予定?です。)



9. 使用レポート (2004年6月追記)

 カロナビ(HDDミュージックサーバー付き)をお使いのnissyさんにモニタをお願いしました。 レポートをいただきましたのでご紹介させて頂きます。



 Carrozzeriaのナビ音声出力を純正デッキへ入力することに成功しましたので報告します。

<接続>
 カロナビ(AVIC-XH07V)の音声出力を変換コネクター(CD-RB10)を用いて、IPバス→RCA変換します。 (グローブボックス下)
 ラゲッジのCDチェンジャ接続用ケーブルにドングルを接続します。 RCAケーブル(3m)は車体左側を通しています。(ソースセレクタは使用していません)


<モード切替とデッキ表示>
(1).MDモードのとき
 デフォルトではカウンタ表示となります。 REPEAT(REP)ボタンを1度押すと、"<AUX-IN>" の表示になります。
この状態からSHUFFLE(SHUF)ボタンを押すと"XX-Xxxxxxx"の表示になります。 (接続以来この状態で使用しています。)
 [注:一部伏字にしました。(T)]


(2).CDモードのとき
 カウンタ表示となります。 REPEAT(REP)ボタンを押しても"<AUX-IN>"の表示はありません。

<連続運転実績>
 上記の構成で4月17日の施工以降、トータルで約8時間 特に問題なく 稼働しています。
"特に"というのは車側のノイズを拾ってしまっているようです。 アクセル開度による「ヒューン」という音と、ブレーキを踏んだときの「プチッ」というノイズです。 ノイズフィルタが必要ですね。

<その他気付いた点>
 現在MDモードで使用していますので、デッキ本体が「MD1」、ドングルが「MD2」となっています。 「MD1」つまりデッキ本体のMD最後の曲が終了すると「MD2」に切り替わります。
ちなみにCDモード時は、MDの最終曲が終了すると、CDに移行せずにまた(MDデッキの)最初の曲が再生されます。
「MD1」→「MD2」というデッキ本体のロジックなんでしょうね。


 [以上]



 nissyさん、レポートありがとうございます。 MD1→MD2の件、AUXに何も繋がないでいると延々と無音になるので確かに気になりますね。(とはいえ、いい策が思いつきません...) なお、文中のノイズの原因については調査中とのことです。


 (バージョン2、バスOUT編につづく)

(このページは、掲載している方法および結果を保証するものではありません)