すごいダルいので箱から出しただけ。実は以前使ってた DENON AVC-1620の デジタル音声入力(だけ)がいきなり死んでしまってですね.... 絵は出るし、セットアップモードでのテストトーンも大音量で鳴るけど 一切入力音が出ない。普通こういうのはアンプ部が 壊れて電源はいらなくなるとか、そういう壊れ方じゃないっすかね? なんでデジタル部が壊れるんだDENONよ。
ともあれ、今のAVシステムだとアンプがないと全く音が出ないので、 急遽kakaku.comで人気が高くて安い奴を買ったというわけで。
しばらくAVコンポーネントの世界から遠ざかっていたんだけど、 なんか廉価版にもHDMIx4とか付いてるし、7.1chオーディオだしすごいね。 どうもBlu-rayあわせ?(PS3あわせ?)でガンガン機能アップした時期が あったらしい。
ところが......持った瞬間思ったぜ「やっちゃった!」と。 めちゃくちゃ軽いんじゃよ。
ふと中身を覗き込むと スッカスカ でした。 AVC-1620はもっとドンとした重量感があったのですが。
で、 フロントステレオ2chのみスクリューレット だった.....('A`)ソリャよく調べなかった俺が悪いけど、センター/サラウンドは例のバネ式洗濯バサミだった。これはひどいだろ。2.4万円のAVC-1620でも 全チャンネルだったぞ。
極めつけ。 SPDIFの光/同軸がライン固定! .....つまり 光端子はAV1、と決まっていて変更できない。D端子もマップが決まってる。こんなのアリなのか? 組み合わせがあらかじめ決まってるって ことは少ない入力端子をフル活用することはできないってことじゃないの('A`)萎えるわ。
まあ、この総HDMI時代にアナログ入力でごちゃごちゃ言ってるのは 俺だけかもしれないナ。素直に他のレコーダ含めて買い替えを検討 するべきだろう。また金かかる....onz
え?良かったところはないのかって? FMチューナ内蔵なのは良かった(笑) というか知らないで買ったのかよ!>俺
まあ、結論から言うとサブウーハーをなめてましたね。 重低音を補完するだけじゃん?近所迷惑じゃん?みたいな。
買ったのは3店回って最後の店にあった中古のSX-DW303。 DENONやYAMAHAの安めの出物を蹴って買った理由は 入力ONで電源ON になるスタンバイモードが あったから....というだけだったんだが。本体は中古と思えないほど 奇麗だったし、剛性感もあってなかなか良い買い物をしました。
設置してびっくり。明確にサラウンドスピーカーに余裕が感じられ るようになった。中高域の音の移動がよくわかるようになったというべきか。ウーハー自体は、どこから重低音鳴ってるのかいまいちわからんが、 CoD4やっていると戦場の包み込むような不安感、爆発音が ゲームを盛り上げてくれます。よく死ぬけど(汗;
そんなにウーハーのボリュームをあげなくてもいいんだね。 これは早めに買うべきだった。
見積メール出したらいつの間にか発注したことになったでござる(^^; 会社にお伺いたててから発注しようと思ったのに。 てなわけで、以下の基板が 私物 と化した訳でござる。
EZ-USB FX2ってのはサイプレスのUSBコントローラ内蔵マイコンが載ったボード。「個人でもUSBデバイスが開発できる!」ってマニアの間では一時期盛り上がった。このチップの特徴は「CPUが動いてなくても仮のUSBターゲットとして起動」し、PCからUSB経由で気軽にプログラムを書き込めるところ。i2cやJTAGを引き出さなくてもいいわけだ。
まあそこから5年くらい経って、マイクロチップ系(PIC)も 富士通のFRマイコンとかでも最初からフラッシュ書き込み用の ローダーが焼かれてるチップが出てきてるけど、そこは温故知新ということで。
ちょろっと暇を見つけて遊んでみるつもり。もちろんホスト側はLinuxで(笑)無謀カナア....
まずはWindowsで動作確認を。EZ-USB基板の半田盛りを見ると「如何にも手作り」という 雰囲気がアリアリなので、本当はテスタくらい当てた方がいいのかもしれないけど、 USB差したくらいで壊れるならITプラザに突っ返すので、とっととUSBケーブルを接続することにする。
製造元であるCYPRESSではWindows用の 開発キットを用意してくれている。トップの検索から「CY3684」で検索すると CY3684 EZ-USB FX2LP Development Kit というのが出てくるので、SETUP_FX2LP_DVK_1004.exeをダウンロードしてインストールする。
EZ-USB FX2基板をUSBケーブルでPC本体に接続すると、いつもの認識画面になるので、 Cypress純正ドライバをインストールする。
スタートメニュー/Cypress/USB/CyConsoleを起動して認識されているか確認する。
さらにEZ-USB Interfaceを起動すると、各エンドポイントの状態取得、EEPROMの書き込み、 CPUの動作状態制御などができるようです。
一般的にはKEIL社の8051プロセッサ用コンパイラを購入するか、オブジェクトサイズに制限のある 評価版コンパイラを入手して開発するようだ。が、面倒くさいので 最初からLinux で開発環境を整えることにする。LinuxディストリビューションはDebian GNU/Linux Lennyで。
apt-cacheコマンドでクロスコンパイラsdccを検索すると....
$ apt-cache search sdcc sdcc - Small Device C Compiler (DFSG version) sdcc-doc - Small Device C Compiler (documentation, DFSG version) sdcc-libraries - Small Device C Compiler (libraries, DFSG version) sdcc-ucsim - Micro-controller simulator for SDCC (DFSG version) sdcc-doc-nf - Small Device C Compiler (documentation) sdcc-libraries-nf - Small Device C Compiler (libraries) sdcc-nf - Small Device C Compiler sdcc-ucsim-nf - Micro-controller simulator for SDCC
DFSG(Debianガチガチ)に即したバージョンと、non-free版の2種類があるようだ。 「あるようだ」 、とか他人事みたいに書いてるけど、 皆様の予想通り 最初DFSG版インストールしてハマりました... 8051サポート入ってないんだもんなあ...必ずnon-free版を入れましょう。
# apt-get install sdcc-nf sdcc-libraries-nf sdcc-doc-nf
あと8051の逆アセンブラdis51もインストールしておく。
# apt-get install dis51
さらにホスト側にUSBユーザランド実装のlibusbが入っていなければインストールしておきましょう。 最終的にはネイティブのUSBターゲットドライバを開発するんだろけど、ファームウェアをデバッグ するような段階ではユーザランドで実装します。後述するfx2_programmerというコマンドも コレを呼び出しています。
# apt-get install libusb-0.1-4 libusb-dev
EZ-USB FX2の特徴は...
ということなので、PC側に、ターゲットCPU制御とファームウェアダウンロードを行うソフトが必要です。 Windowsの場合は先ほどのEZ-USB Interfaceでできるんだが、Linuxの場合は fx2_programmer を使います。ダウンロードはsourceforge.netからfx2_programmer-2.0.2.tgzを。
そのままコンパイル...と言いたいところだがココでも ハマった。 エンドポイントのオープンができないんだよね。PS/2コネクタ全盛だった数年前とは違って、 最近のPCではマウス/キーボード等もUSBを使っている。USB汎用デバイスが接続されていると、 そのままではlibusbが動かないことがある。その対策コードのパッチを用意しました( fx2_programmer.patch)。
# tar xvzf fx2_programmer-2.0.2.tgz # cd fx2_programmer # patch < fx2_programmer.patch patching file fx2_programmer.c # make fx2_programmer # cp fx2_programmer /usr/local/bin
できあがったバイナリfx2_programmerは/usr/local/binあたりにコピーしておきましょう。
基板が動くかどうかもわからないうちからファームウェアをゼロから書く...のは無理なので、 fx2_programmerの作者さんが用意してくれているテストファームを使うことにします。 上のホームページから辿れるリンクはことごとく404 Not Foundだけど、 Sourceforge.net側から探したらあった。 8051ディレクトリ からいくつかファイルを落とす必要があります。cvs checkoutでもよし、ファイル少ないから ブラウザでちまちま落としても間に合うでしょう。こんなディレクトリ構造でOK。
8051/ 8051/ex3/Makefile 8051/ex3/ex3.c 8051/ex3/program_and_start.sh 8051/include/fx2regs.h 8051/include/fx2regs.inc
コンパイルは8051/ex3へ行ってmake...だけど、そんな複雑なことをしているわけではなく結果的に
# sdcc -mmcs51 -I../include/ ex3.c
が実行されているだけです。mcs51ってのが今回のCPUアーキテクチャ8051の指定ね。
※余談だが、8051系列のアーキテクチャは古いPCマニアなら1度は目にしているはず。 PC/ATのキーボードを分解するとWinbond製のICが載ってたじゃないですか。 あるいはマザボ上のシリアルとか統合したSuperIOチップ。 あの中身が8051だったはず。うろおぼえだけどね...。
とりあえずこれでPC側の設定はほぼ終わり。明日以降は実機でファームウェアを動かさねば。
_ Albertareft [The prostate related is central to the section of a male's..]
前回の手順でファームウェアサンプルであるex3をコンパイルすると、 いろいろファイルが生成されるのだが、実行ファイルに相当するものは ex3.ihxというファイル。 Intel Hex形式で 記述された8051のオブジェクトコードだ。
:03000000020008F3 :0300610002000397 :0500030012011780FE50 :080064007A007BF87C007D02AC
でも、これだとなんだかわからないので中身を覗いてみる。逆アセンブラはdis51。
$ dis51 < ex3.ihx CSEG AT 0000h LJMP L0001 L0004: LCALL L0005 L0006: SJMP L0006 L0001: MOV SP, #9h LCALL L0002 MOV A, DPL JZ L0003 LJMP L0004
おお、それらしいじゃないですか。演算はほぼ全てAレジスタ(アキュームレータ)を起点として 行うようです。どのアドレスが内部メモリでどれがI/Oマップなのか未だにわかりませんが。 ex3は基本的にEP6をIN(PCからみた場合、ターゲットからだと出力になる)に初期化して いるだけのようです。が、ex3.c本体も、できあがったihxを逆汗した結果も、 割り込みテーブルの初期化とか全くしてないように見えるんだが...これでいいのかな。 スタートアップコードはほとんど全く付加されず、元ソース由来のニモニックばかりだねえ。
ex3に添付されているprogram_and_start.shというシェルスクリプトが、 そのままfx2_programmerの使用例になっている。
EZ-USBは認識のたびにバスID,デバイスIDが変わってしまう。むろんEEPROMで独自のIDを 持ったファームウェアを毎回ブートするようにすれば変わらないようにもできるが、 今割り当てているのはLinux Kernel側のusbdevだ(多分)。
fx2_programmerを使うと状態がダンプできる。上記のシェルスクリプトは ダンプした結果から'UNCONFIGURED'という行をgrepで抽出して、バスIDを環境変数BUS, デバイスIDをDEVICEにセットする。本来、ネイティブドライバではベンダーIDや プロダクトIDで(もちろんEZ-USB、Cypressが決めたIDではなく自社で取得したIDね) 検索する部分を、半自動でやってくれるわけね。
# fx2_programmer any any dump_busses Dump of USB subsystem: bus 006 device 001 vendor id=0x1d6b product id=0x0001 bus 005 device 001 vendor id=0x1d6b product id=0x0001 bus 004 device 001 vendor id=0x1d6b product id=0x0001 bus 003 device 001 vendor id=0x1d6b product id=0x0001 bus 002 device 002 vendor id=0x04b4 product id=0x8613 (UNCONFIGURED FX2)
以降、環境変数BUS,DEVICEを使ってfx2_programmerコマンドを呼び出せば、 ある程度対話的にEZ-USBを制御できるというわけ。8051をリセットする場合は
# fx2_programmer $BUS $DEVICE set 0xE600 1
となる。0xE600は何なの?と思ってfx2regs.hを見ると、CPUを外部から コントロールするためのI/Oアドレスのようだ。
EXTERN xdata _AT_(0xE600) volatile BYTE CPUCS ; // Control & Status
書いてる値「1」は、Cypressの開発キットと同時にインストールされる テクニカルリファレンス(EZ-USB_TRM.pdf)をひくと、1でCPUがHOLDされ、さらに 0を書くとリセットかかるみたいなことがかいてある。
ここがEZ-USBのおもしろいところなんだけど、 CPUCSってのはUSB coreのポート であって、それがCPUのリセット信号に直結されている構造なんだな。 一般的なマイコンボードだとCPUが絶対的支配者でUSBペリフェラルがサブであるが、 EZ-USBではUSB Coreのほうがえらいということか(TRMのFigure7-1)。
program_and_start.shは、先ほどコンパイルしたファームウェアを以下のコマンドで ダウンロードしている。
# fx2_programmer $BUS $DEVICE program ex3.ihx
その後0xE600に0を書いて、この瞬間から8051が動き出すというわけだ。 うまくできてるなあ。
# fx2_programmer $BUS $DEVICE set 0xE600 0
fx2_programmerにはbluk_benchというコマンドが用意されていて、 ひたすら指定したエンドポイントを所定バイト数、所定チャンクで読み出して時間を測定してくれる。
# fx2_programmer $BUS $DEVICE bulk_bench 0x86 102400000 2048
Read 102400000 bytes in 26 seconds and 184313 microseconds. Rate of 3910738 bytes/second
約4MB/s (32Mbps)。USBバルク転送でこれだけ出てれば十分というべき...いや やはり遅いのか?400Mbpsくらい出すにはどうしたらいいんだろう。
ex3.cのソースみてたらバグ発見。
/* configure ep6 to be quad buffered */ EP6CFG=(EP6CFG & ~3)|3;
これだとEP6CFGの値は0xe3になる。TRM 8-4をみるとquadバッファするためには0xe0に しないといけない。下位2bitが11だとトリプルバッファだね。
しかもトリプルといいつつFIFOBUFの設定は各1回しかやってない。どういうことなんだろうか。 なんとなくだが、上記ベンチマークは シングルバッファの結果 な予感がする。 実質的にはSlaveFIFOで動作しているわけではない(入力側の回路がない)ので、 USB的には固定バッファを送り出しているだけだから、最大速度出てる可能性もあるけどね。 あとはバッファ長か?PC側ドライバの問題か?
_ クマ三郎 [るぅ嬢が「で、音は?」と聞いております。]
_ 通りすがりのあいあん [お大事に〜(^^)ノシ]
_ ぱ [夜になったら熱あがってきたし。しかしま、DSPの性能はYAMAHAが段違いにいいな。シアターホールを複数選べるwww..]