空を見上げて
トップページ » 2010年04月

USBトランスポート(2)

今度は少しアナログ回路を検討することにした。

トランスポート自体はデジタルなのだが、アナログ出力もほしいのが人情というか。
ところがVS1053の出力のコモン端子はGNDではない。
単一電源なので、中心にはバイアスがかかっている。
それもそうだし、一般的にヘッドホンの出力はLineOUtより小さい。
なので+5V単一電源のプリアンプを検討してみた。

ただ単一電源だとマイナスに振ることができない。
そこで秋月の電圧コンバータ LTC1144CN8を使用した。
これは例えば+5から-5Vを作成できる。また発振周波数はオーディオ帯域以上に設定可能である。
但し、スイッチングには違いないのでフィルタなどで十分ノイズをとる必要がある。
オペアンプはNJM4580DDにした。
入力はVS1003の出力を作動増幅し、信号にコンデンサは一切使わないDCアンプにしてある。

できたのはこんな感じ。

で、聞いてみた。
「げげ!!なあにこの音!!」という感じ。(TT)
なんだか、いきなりラジオの音っていうか、篭って低音も出ない。思わず、壊したくなった。(TT)
動作そのものはまともだし、ACアンプではなく作動のDCだ。
残る問題は電源とICなのだが...。

実は、この回路+12から-12Vを作ってLM411でプリアンプとして使用している。
これはまともでクリアーに動くし劣化も見られない。
なのでNJM4580DDそのものか、電源電圧の低さに起因すると思われる。

結局、この回路はあきらめた。(TT)
今は、後段から12VをもらってLF411で使っている。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBトランスポート(1)

せっかくできてきたので題名を変えた。

SDトランスポートにあやかってUSBトランスポートにすることとした。

ただ何度も思うのだが、5万も出せば、ビクターのEX-A150が買える。
アンプ・スピーカなどというものもついているが、
・光出力がある
・WAV(リニアPCM)が再生できる
のでUSBトランスポートとしても使えるはずである。
もっともアンプの分、電気を食うのでエコとはいえないが、そもそもピュアオーディオ自体がエコでもないような気がする。

SDでトランスポートを作成しておられる人を見かけるので、そう単純でもないのかもしれない。
個人的にはWAVにしちゃうとCD1枚で640Mも食うので
・32GのUSBでもCD50枚(十分か...)
・なんならHDDに入れて...(転送はOKなのか?)
とか考えてしまう。

まあ、そういうことはおいておいて、とりあえず先に進めることにする。
目標は44.1KHz16bitステレオ(つまり普通のCD)までとする。
それ以上を求めると、今度は再生装置側が問題だろう。

現状
・USBからFATでWAVを読み出し
・VS1003に転送しWAV再生で問題がない
ところまでは確認した。
ケース加工は全然だがプロトとしてはバラックの方がやりやすい。

すると残るのは
1)VS1003を変更してVS1053にする
 これで設定でI2Sが出せるようになる。
2)CS8406でI2SをSPDIFに変換する
 ハードモードもあるのでプログラムは不要らしい
という作業になる。

 どちらにしても部品を集めなくてはいけないが、それなりに特殊というかポピュラーでもない。

1)VS1053関係
 VS1053はChipでは秋月でも販売されている。ただモジュールとなると、なかなか...。
 スパークファンで扱っているのを見つけた。
 これだと「QFP44pinのハンダ」「レギュレータ」「水晶」からは開放される。$25も悪くないような。

 ただVS1003でやっていて思ったのだが、電源は思ったより綺麗ではない。まあ、電池式のメモリプレヤーと比較してはいけないが、かなり高周波ノイズが観測される。聞いた分にはさほどわからないが、やはり気になる。
 VS1053はアナログとインターフェイス電圧が同じ3.3Vになっている。このあたり分離したいのだが、スパークファンの回路図ではつがなっていた。(TT)全部綺麗なのを入れればいいのだろうけど。
 1.8Vはデジタルなのでこれはどうでもいいかもしれない。

 自作の利点はやはり「電源が自由」ということだと思う。(面倒には違いないが)
 アナログ出力もほしいので、自作に走る前提で検討する。
 水晶であるが12.288MHzというのは意外に入手できない。(TT)ただ仕様書を読むと、倍の24.576MHzでもレジスタ設定では動作するようである。
 秋月だと3.3V/1.8Vのレギュレータ・24.576MHzまでが入手できる。ただQFP44pinの変換基板は扱っていない。(TT)VS1011はモジュールなんだし、VS1053も出してほしいような。
 変換基板であるが、マルツなどから入手できる。(通販前提ってことで。)

2)CS8406関係
 これは共立エレショップにある。(高いけど)チップワンストップの方が少し安い。
それより光コネクタがなかなかない。
 共立ではTOTX173や177を扱っている。177は価格も手ごろなのだが、これは+5Vのものだ。
+3.3VとなるとTOTX147になるが、これは扱っていない。チップワンストップにはあるが、こちらは共立より高い。
 そもそもこの手は需要がないのか生産終息なのか、東芝のHPにも記載が...。
 パルストランスで同軸という選択もないではないが、今なら光だろうと思ったが意外だった。
 後、CS8406はTSOPなので変換基板を秋月で買う。

できれば、
・5V及び3.3V電源両用
・5Vトレラントのインターフェイスバッファをつけ
・アナログの出力(これはVS1053の出力でよい)
・I2Sをデジタル光端子に出力し
・内部I2Sをランドに出してある
VS1053モジュールがあると嬉しいというか即買いに思うが...。
このあたりホビストは部品集めにもハンダにも苦労すると思う。

それやこれやでようやく発注することができた。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(14)

もう1つwavの再生に関して。
VS1003とかはwavでもどうもデータで「WAVE」の直後に「fmt」が来ないとうまく再生しない。
規約からすれば、ここにタグがあっても良いことになっている。

例えばWMP11でCDからWAVに変換すると「LIST」というタグがついていて、ここに演奏者などの情報が格納される。これは規約上は正しい。
しかし、VS1003では、この情報があると見事にこけて無音になってしまう。(TT)
CDの変換にCD2WAVで行うとこの問題は起きない。(LISTタグがないので)

ついでながら、fmtのバイト数もWMP11だと18が設定される。拡張部分に2Byteの00がある。
これも規約上はあってもいいし、VS1003もこれは許容しているような感じで’data’タグを見ているように思われる。
でも気になるのでこれも外すことにする。

なんとも困った感じであるが、まあWindowsで変換もできるのでWAV2WAVなる
・「WAVE」と「fmt」の間のタグを削除
・「fmt」の拡張部分を削除
するソフトを作ってみた。
面倒なのは最初の「RIFF」の後に全体のバイト数があるので、これを修正しないといけない。

まあH8ではないので楽勝と言えばそうだ。
H8でも最初のヘッダだけならなんとかなりそうだが、判断が面倒なので、Windowsで変換して食べさせることにする。

大半の人はWMP11あたりで取り込みするような気がする。(昔ならCD2WAVなのだろうが)
なんか妥協だらけの産物であるが、それでもWMP11から取り込んだWAVがならせるのは使い勝手がいい。

しかしタグぐらいはまじめに見てほしいよなあ~。#VS1003

WMP11からのデータ変換もできたのだが、今度はVS1003のWAV再生が時々おかしくなる。
mp3は凄く安定していて連続再生してもこうはならない。
転送ではないようで、転送そのものは間に合っている。転送が途切れると音楽も途切れるがそういうレベルではなく「ザーーーー」というノイズ音になる。音楽にならない。(TT)

いろいろ調べていくと...転送クロックのようだ。
そこでAVRのクロックは12MHz->16MHzに、ついでにバッファも8Kから16Kにした。
これで再度安定性を見よう。

そうこうしていたら日本ではなくスパークファンにVS1053のモジュールがあった。
レギュレータもついている(^^)

USBトランスポートにしたくなってくるが...意味無いか。
ビクターので同じことができるが、一向に話題にならないのはなぜだろう?
CDトランスポートだと盛り上がるのに...。同じようなものだと思うが。
クロックだけは交換したいのかもしれないが、その程度ではないかと。
コンポにつけたのがハイエンドのマニアには受けなかったのかも。
スピーカとアンプを外せば立派なUSBトランスポーターになるような...。エコじゃあないか。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(13)

せっかくできたので、USBトランスポートを検討する。
まずはVS1003からVS1053にしてみたくなる。

その前にちゃんと仕様を考えておくことにする。
I2SのDACもないではないがマイナーな気がする。
やはりここはS/PDIF変換だろうか?
それを前提に検討する。

まずVS1053b は12.288MHzがマスターになっている。
これだと12.288MHz/256fs=48KHzサンプリング標準のChipにつなぐことになる。
こういう書き方もいけないのだが。
ところがCDなどは44.1KHzなので、Chipでも周波数を限定していて11.2896MHzを想定しているものが多い。選択できても、せいぜいが、44.1KHz*384fs=16.9344MHzとか。

そういう理由かどうかわからないが、SDでトランスポートをやっている人は48KHzサンプリングしていた。内部のオーバーサンプリングを嫌ったのだろうか?
ただ、CDは44.1KHzサンプリングだし、サンプリングそのものは、その方(44.1KHz)が自然に思う。どこでオーバーサンプルしても同じような気がするが。
実際にVS1003ではちゃんと鳴るのでVS1053でも同じだろうから、気になるのはI2Sだけだ。
では、CDで44.1KHzサンプリングの場合、I2Sはどう出すのか?ということだ。

推定すると(違っているかもしれないが)
・VS1053はI2SのMCLKを出しているがこれは、データシートを読む限りでは12.288MHzに固定されているようだ。送出レートは48K,96K,192Kから選択できる。
仮に48Kに指定したとする。(レジスタ設定でできる)

・44.1KHzはオーバーサンプリングされて48KHzデータとして出力される!!(多分)
 これは多分、どんなサンプリングレートだろうが何だろうが、そうなるのではないかと思う。
 というのもWebで以下の記事を見つけた。VSのChip元なので間違いないだろう。
(これは日本でSDトランスポートを製作されている人の掲示板の記載)

A support staff of VLSI company pointed out our misunderstanding.
The frequency of the clock injected to VS1053b just confines the sampling rate of I2S LRCLK output.
12.288 MHz -> 48KHz, 11.2896 MHz -> 44.1KHz
Contrarily, even in the case of 12.288 MHz clock, VS1053b can accept 8,16,32,44,1,48KHz WAV files. The chip converts sampling rate (up-samples) automatically and internally.
Hence, our transport can handle WAV files of all the frequencies listed above.

まあ、音に対して、こういうオーバーサンプリングの影響があるかどうかは不明点もあるが、それはこの際よしとすることにする。
すると例えばSPDIF変換でCS8406を使うと、48KサンプリングのS/PIFデータになるはず。
S/PDIFはSyncによって同期するはずなので44.1Kでも48KHzでもいいというか。
それにVS1053が48KHz固定なら余計やりやすいような気がする。

と考えているうちに...
なんでトランスポートなのだろう?と思い始めた。(^^!

まあ、それもいいにはいいのだが、いっそI2SのままD級アンプに入れたらどうかと。
以前エレキジャックのD級アンプで、そういうのが販売されていたらしいが、今は無い。(TT)
これはI2Sがあったというわけではなく、内部に存在していたので改造でつけるという。
そういう意味なら、D級では幾つかあるかもしれない。
探してみると、まあ他にもありそうだし。
そうなるとUSBメモリからアナログを介さないフルデジタルアンプになる。(^^)
USBメモリ->I2S->D級アンプ
になる。
USBメモリ->I2S->S/PDIF->高級DAC->高級アンプ
には負けるか...。価格では勝つだろうが。

しかし、最近のD級は優秀で、そう悪くないと思っている。駆動力もある。高級アンプとの差も僅少のような。
むしろスピーカの影響が膨大なような。
余計なアナログがないとすると、
「USBメモリ->I2S->D級アンプ」
はとってもいいのかも。


by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(12)

なんとなくできたので、秋月の改造のまとめなど。

・SCI0
 今のRS232Cコンバータを介さないものを外部Pinに出す
 RS232CコンバータがSMTなので面倒。
コンバータがほしいのはSCI1だけなので、全部はずして、SCI1だけ外付けで用意したほうがいいかも。
 Pinは出す部分はある。
 SCI0は「SPI」「DMA」のために必須になる。

・SCI3
 本来はこれがSDの予定だったように思うが、これも外付けでいいのかも。
 これは、まだトランジスタに出ているし、外部Pinも出しやすい。
 実際作ってみるとやはりリモコンがほしくなった。(^^!
SCI3からキャラを送ると一応動くようなつもりでプログラムだけ入れておいた。
Debugしていない危ない感じはするのだが、そう使うのがよさそう。

・リセット
 外部で作成するのもいいが、せっかくスイッチがあるし、Pinに出してほしかった。
 AVRがあるので一応出しておいた。
 ただAVRのリセットはISPでかけなくなるのでショートピンで切れるようにしないといけない。

・SL811
 クロックは推奨回路に改造。
 これはやらないとまずいような感じ。
できれば、SL811のリセットをH8にやらせたいが、まあ最悪リセットSWがあるから我慢。

ううむ。結構大変かも。(^^!
でも自分で最初から組むよりは改造の方が楽だし。(^^v

ついでにVS1003の改造。
・XDCSとDREQにノイズがのる
 XDCSは入力なのでケーブルなのだろうか?
 するとDREQは受け側か?
 いずれにしても今はこの位置に10P入れてある。
無いと誤動作していた。AVRは無事だったので実装のせいかもしれない。

後、改造はしていないが、このユニット
・ACアダプタを抜いておくと出力は無音
なのだが、
・ACアダプタをつなぐと(電源を入れなくても)大きなノイズが出る
再生すると止まる。
なのでヘッドホン端子に510Ω程度を入れてみたが、小さくはなるがハムが出る。(TT)
電源がないのにちょっと悲しい...。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(11)

なんとなくせっかくできたので、使ってみる。

すると、電源投入でUSBが認識しない。
どうも5回に1度はそうなってしまう。(TT)

SL811が動かないというか...。
但しレジスタの読み書きはできている状態。

最初はSL811の初期化を疑った。
何度も何度もコードを修正してみたが、それでも一向に改善しない。(TT)

それならばリセットスイッチでも同じことが起こりそうなものだが...
・1度電源投入でうまく立ち上がると後は何度リセットしてもうまく行く
・1度電源投入でうまく立ち上がらないと後は何度リセットしてもうまく行かない
という感じ。

リセット回路とか電源の立ち上がりとか見直したが異常はない。
こういう感じで1日つぶしてしまった。

思い悩んだあげく、「もしかして発振しないのでは?」ということに行き当たった。
ただ不思議なことにこういう書き込みもあまりないが、発振が不安定なことが書いてあった。
クロック関係のエラッタもあるので、そういうロットなのかもしれない。

早速いろいろやってみた。
例えば、セラロックに変更すると、立ち上がる頻度は増えたが、USBがすさまじく不安定になりやめた。(^^!
元々秋月の回路はCypressの推奨回路ではない。コンデンサも15pだし。
推奨回路は以下。この100Ωがミソのようで、これで安定した人もいるようだ。

また、22Pも秋月のは15Pだ。

この回路は凄くデリケートらしく、変更するとしょっちゅうクロック停止や不安定になっていた。
そこで思い切ってCypress推奨にした。
・秋月のから15Pと1Mと水晶をはずしてしまう。
 外さないと推奨回路にできない。(TT)
・外部で水晶に細工する。

ちゃんと22Pをつけ、100Ωもつける。
・それを再び組み上げる。

ううむ。ま、いいか。

でやってみると、これが安定!!
まあ100回もやったら出ることもあるかもしれないけど。
調子にのってやっていたら今度はSL811がリセットしないことが...。(TT)
SL811のリセットはH8のポートにしてほしかったなあ~。

SMTの改造は面倒なので、プログラムだけ書いておく。
ついでにトーンコントロールも実装しておく。

やっと使えるレベルか...。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(10)

できるにはできたが、なんか今一。(TT)
ケースを想定していないというか。


念願の(?)ランダム再生も実装することにした。
EEPROMは
・演奏曲番号
・ボリューム
・再生モード
などを記録している。
スイッチは単純に4つにした。
<停止時>
1)再生モード(順次/ランダム)
2)音量Up
3)音量Down
4)スタート
<再生時>
1)なし
2)前の曲
3)次の曲
4)停止
なお、mp3、wav、wmaが再生できる。
まあwavで途切れガ無いので他はOK。(^^v

VS1053にしたいところだが、その前にケースに入れるべきような。
電源SWもリモコンもないが、スタンドアロンで動作できる。
数時間は安定動作している。

USBは今のところ3種やってOKだが相性はあるかもしれない。
手持ちでやったので、それ以外が危ないが上海問屋(トランゼント)はOKかも。

音はmp3はmp3。ただノイズが少し多い感じ。
wavはそれなりにいい感じである。(^^)
でもVS00XXの出力だしなあ~。
まあ制御としてはなんとかできた。(^^v
費用は¥7000ほどかな?
時間が大変だった。

こんなの作る人っていないだろうなあ~。
mp3だけならもっと安いKitもあるし、格好もいいし。
wavのためだけって感じだよなあ~。でもそれって結構しんどい。メーカが外したくなるわけだ。

MMC/SDでやるのも凄いが、まだUSBよりは情報があるような...。
SCI3とかもDMAできたら、かなり高速なSDプレヤーができるかも。
そういえばSDでWAVトランスポートをやっている人がいる。
192KHz/24bitだと、44.1K/16bitの6.5倍高速。凄い!!

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(9)

H8のDMAでなんとかwav再生はできたが、ブロック転送の欠点もある。
以下はその対策というか...。

1.ファイルの最終にゴミが残ってそれを転送してしまう。
 これはバッファを0クリアした。
 最初、プログラムクリアしたらwavでこけてしまった。(サイズによるが)
そこでクリアしたバッファを用意してそれをDMA転送してクリアした。(^^!
さすがにDMAは高速で瞬間的に終わってしまう。
なんせH8の外付けで2MByteもあるわけで、8Kごときを沢山とってもおつりだらけだし。

2.次のファイルのバッファクリア
 今度はVS00XXに残るデータの話。
よくわからないのだが、どうも最後のデータが残るらしく、2048の0を送るのが慣例らしい。
ソフトリセットでクリアしてくれてもよさそうだが、それがしきたりなのだろうか?
 これはバッファを2048クリアするためのコマンドをAVRに実装した。
データはH8なので、結局AVRは
・1クロックモード(XDCSはそのまま)
・32クロックモード(XDCS制御付)...使っていない
・2048クロックモード(XDCS制御付)=クリア用
・8192クロックモード(XDCS制御付)=DMA用
の4モードを搭載し、H8からの2bitで切り替えるようになっている。

確かに一番最初に音を出すとそういう感じの音がするような...。
でも、ハードリセットも出しているのだが...。

まあ曲間が一番時間が自由で、結局ここでいろいろ処理するのがよさそう。

3.音量調整で再生が止まる
 DMA中はAVRがXDCSを管轄していて、H8はわからない。そのためXCSを発行できない。
できるのはDMAが終わった時。ということは、次を送らなくてはいけないというか。
 まあmp3ならともかくwavでは厳しいものがある。
つまり
・転送終了を待つ
・ボリュームコマンドをかける
・転送を再開する
とやらなくてはならない。厳しいのはDREQとは無関係なこと。
 などとも思ったが、個人的にどうもデジタルボリュームが好きではない。
そもそもどこか電源を切っても覚えなくてはならないし、直感性がない。
 こんなの音量を最大に設定しておいて、出力にボリュームをつければ余計便利なような気がする。
別段ここでやっらないといけないこともなさそう。
 他にもトーンコントロールなどもそうか...。(つけてないが...。)

 ちなみに曲送り(戻し)はブロックで切ることができるので問題なし。
8Kぐらいだとレスポンスも良い。(mp3とwavでレスポンスが違うのも...。)

と割り切りも進んできた。(^^!

やっとスタンドアロンで動かす元気が出てきた。
で、LCDとSWとEEPROMをつけることにした。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(8)

さすがにH8とAVRがあると面倒。(TT)
でもAVRはそんなにたいしたものではない。CPLDよりははるかに有難い。

でもってやった結果。
こんな感じ。(wavを再生しているところ)

一番上のDebugというのは
LがUSBからファイルを読んでいる部分。
Hがお休み時間。つまりAVRの転送終了を待っている部分。これがなくなると転送ミスする。
転送が終わると、DMAをかけて再びLになる。
下がDREQとSCKで、これは忙しく出ている。(殆ど間断ない。)

基本的に「読み込み時間」<「転送(再生)時間」でないと音楽プレヤーとしては成り立たないわけで、H8は毎回転送終了を待つことになる。
この時間は操作関係に利用できる。
wav再生ではさすがに厳しく、読み込みの10%程度が待ち時間になる。
一方DMA転送は、それとは別にバックグラウンドで処理されているのがわかる。この転送にはCPUは携わっておらず、AVRがクロックを出しているだけで後はDMAが処理している。

やったーーー。wavが再生できた!!
ちょっと感動的だった。
ううむ全然落ちない。バッファは8Kでも16Kでも32Kでも、いいようだ。
この休み時間に操作を見るが、反応を上げるには8Kの方がよさそう。
ただ音量などのコマンドを出すと一旦転送が止まって変な音がする。

それと、8K単位にしろファイルの最終にゴミが残ってそれを転送してしまう。
DMAは一括転送だし、ここが泣き所...。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(7)

予想通り、並列転送型でこけてしまった。(TT)
まあUSBの250K/Sも1Byte4uと考えると立派ともいえる。
これにSPI出力転送を足して、176KB/S以上出せる魔法のような方式は???

ここにH8ならではの方式がある。
その名はDMA。SCI0はDMAの転送先に使える。(ここでSCI0にした理由が...。)
DMAはハード処理なのでプログラム負担がない。バスはとられるが、たかが知れている。

が、しかし、VS0XXXにバースト転送してもいけない。音楽再生中はバッファフルになってDREQが落ちる。
これで悩んだ。
で以下がこの記事の真骨頂というかエッセンスというか。
最早これだけで成り立っているというか。

・H8のSCIは外部クロックにする
・外部クロックはDREQが落ちると止まり、上がるとまた働く
(H8ではDREQは見ずにDMAが完了したかどうかだけ見る)
・外部クロックは予定されたバイト数を出すまで続ける。
例えば8KByteなら8KByteのクロックを出す

CPLDかと考えたが、この程度ならAVRでできる。
ただVS0XXXのXDCSなども制御するので8pinではなく、20pinのTyny2313にした。
秋月で...
AVRマイコン  ATTINY2313-20PU
1個 ¥100
安い!!12Mhzで動かした。早すぎるとSCKの上限を超えるほど強力!!

【H8(3096)の使い方】
H8でSCI0でDMAをかける。
クロック(SCK0)は外部入力にする。
8Kなら8Kの転送指示を出し、後はDMAにまかせる。
DMAはH8が管理しているというより、AVRが出すクロックで送信速度が決まる。

【AVRTiny2313の使い方】
外部を12MHz程度にすれば、PortのOnOffで4MHzのクロックは楽勝で作れる。(タイマは不要)
32Byte単位で送信し、XDCSを制御する。
DREQを見て、Lになれば一旦止め、Hになれば再開する。
8Kなら8Kまでこれを繰り返す。
通常の通信用のSCKも必要なので、クロック切替端子で「XDCSを出さないで1クロック出す」モードもつけておく。
H8からの指定は外部割込みで受けて、取りこぼしがないようにする。

H8とのハンドシェイクであるが、基本的には
・DMA転送
 DMAの終わりがAVRが全部送り終わった時点
・クロック転送
 送信レジスタがエンプティで送信完了になれば送り終わった時点
となる。
XCS、MOSI、MISO、XRESETはH8側で制御する。
AVRはSCK、XDCS、DREQを処理する。

こんな感じ。

どういう動作になるかというと...
・H8ではUSBを読み込む
 例えば8Kなら8Kをバッファに入れる
・H8でSCI0でDMAをかける
 AVRに「8K送ってね」と頼む
・H8は次のバッファにUSBを読み込む
 前とは別のバッファ(前のバッファは転送中なので)
・H8でDMAが終わったか見る
 終わっていれば、AVRに転送依頼する
...を繰り返す。

 VS10XXは2048Byteのバッファがあるので、フルであるならwavでも10ms程度は持ちこたえられる。この間にDMAをセットしてしまえばいいだけである。

DMAはバスを使うがプログラムを実行するわけではないので非常に高速で負担がない。(^^)
欠点と言えば、転送が小さな単位ではできず8Kなら8Kを送ってしまって中断できない。(^^!
32Byte単位のDMAもありだが、今度は設定が大変だし、細かすぎて意味が無い。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(6)

基本的なプログラム構造として2種類ある。

1.逐次転送型
 例えば「読んで」「送って」「読んで」「送って」...を繰り返す方式。
 一般的なmp3の製作例ではこれが多い。
VS10XX系は2048Byteのバッファがあるのでそのあたり(2048づつ)読んでは送るのが効率がよさそう。
大きくすると、FATには(平均速度として)有利に働くが、音源にデータを渡す時間間隔が延びるため転送が間に合わない可能性がある。

 まずはお手軽にこの方式でやってみた。
とは言えH8にはSPIがない。かと言ってIO転送は遅くてとてもではないが、350KB/Sなどは期待できない。
 SPIはないがSCIで実現はできる。この場合クロック同期転送を使う。
 VS0XXXの場合はSCKに24.576MHz/6=4M程度のクロックが使えるので500KB/S程度まで出せるはず。

【秋月H8の使い方】
SCI3を使う向きも見受けられるがSCI0を使った。(この理由は後述するがDMAを期待している)
SCI1はターミナルでそのまま。
SCI0は秋月はRS232Cのレベルコンバータに入っているので、これを浮かせる必要がある。
幸いにしてSDカードらしき部分があり、ここに3.3Vもあるので、そこから引き出す。
ついでにリセットも出しておく。
これでジャンピング2本でパターンカット2箇所になる。
ただ、ここのPinは他のコネクタとは半ピッチ(1.25mm)ずれているので、ここにピンをたてても乗らない。(TT)

【H8(3096)の使い方】
H8ではSPIは難しいと考えられるのはRS232CがLSB1stだから。
ただ3096はスマートカードが使えるのでMSB1stのレジスタがある。
SCMR0 = 0xFA; // MsbFirst送信を設定
とやるとMSB1stにできる。

これでどうだ!!とやってみると、速度は64KB/S程度しか出ない。(TT)
まあmp3はちゃんと音が出るが、wavでは音楽にならない。(TT)
原因は
・FATに対して2Kのバッファは小さい
・いくらSPIがハードでも1ch単位の転送ではかかってしまう。(1Byte=8usほどか?)
である。

2.並列転送型
 これは、例えば
・フォアグラウンドで「読んで」おいて
・バックグラウンドで「送って」
...を繰り返す方式。
当然ながらダブルバッファになり、ピンポン転送を行うことになる。
この場合はバッファは大きくとれる利点がある。

 こうやるとマルチタスクになるが、例えばタイマ割り込みで1msで512Byte送るのなら512KB/S出せるはずである。
 とやってみると、これが全然。当然だが
・USB読み込み+音源転送で176KB/Sを満足しない(つまり音源転送が遅い)
・USBでSOFを止めているため長期の割り込みでUSBがこける
となる。(TT)
 割り込みでこうであればマルチタスクであっても、後者は回避できても前者で引っかかる。 

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(5)

紆余曲折をしながらなんとかUSBメモリが動作するようになった。(^^)
実際は凄くかかっているのだが、そこを書いてもしょうがないし。

早速、速度を測定してみることにする。
テストは4MByteを読み捨てする方式で行った。

最初は全然速度が出なかった。
おかしいと思って調べると、

【SL811の使い方】
SOF(1ms単位に出る)に1パケットしか転送しない。
これはBulk転送でもそうなる。
つまりSOFを出すと1msに64Byte(64KByte/S)しか出ない!!
高速化するにはHUBをあきらめてSOFを出さないこと。

ことになる。
そこで強制的にSOFを止めるとこの4倍(250KB/S)は出るようになった。
ただSOFを止めるためHUBは使えないのだが、メモリを直接さすのでそこはあきらめても良いように思う。

ELMさんのページにもあるが、FATはオーバーヘッドがつくので、読み取りサイズが小さいと不利になる。
大雑把ではあるが、
・32K単位の読み取り:250KB/S
・512単位の読み取り:125KB/S
である。それ以上増やしてもあまり変わらないことから限度はどうも250KB/S程度らしい。
つまり転送は1Byte4usほどで、それ以外がオーバーヘッドである。
ちょっと目標の350KB/Sには及ばないが、今度は音源への転送を考えてみる。

【FAT-FSの使い方】
オーバーヘッドを少なくするには、沢山読む。
例えば512*16読めばオーバーヘッドは1/16になる。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(4)

というので早速作ってみた。

音源モジュールとは先に述べたように3.3VなのでH8の5Vとは、レベルコンバータが必要になる。
秋月に
3ステートバッファ(フラット) TC74VHC244F(5個入)
1パック ¥100(税込)
というのがあるので買っておいた。
ただ、これはDipではないので
SOP28ピン(1.27mm)DIP変換基板
1枚 ¥80(税込)
もあったほうが良い。

まずUSBメモリの読み込みからはじめる。

USB_Hostのプロトコルスタックであるが、Cypressのサンプル(AVR用)をH8に書き直した。
ただ、これにはマスストレージドライバがないので、ここは自作した。
マスストレージドライバはSCSIインターフェイスで
・テストユニットレディ0x00
・リクエストセンス0x03
・ リード・キャパシティ0x25
・拡張リード0x28
・拡張ライト0x2a
の5つを実装すれば動作する。

FATはELMさんのFAT-FSを採用した。
これは非常に素晴らしい。感謝感謝。m(__)m

理解するのにかなり時間がかかる。
モジュールを買えばよかったのかしら...。
やはりこの手は「使えるライブラリ公開」がChip屋さんのセールスではないかと。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(3)

USBのHostが決まったので、今度は音源モジュールを探す。

この手はVS10XXが有名で例外に漏れずそれを採用することにする。
本来ならAS1053というChipを使いたかった。
これはI2Sを内蔵しているので、SPDIF変換も可能そうだ。
Chipも秋月で@700だ。
でも...外付けが面倒。(TT)レギュレータは3.3V以外に1.8Vがいる。
秋月ではVS1011はPt板につけて@700なのだが、VS1053はやってくれないのだろうか。(TT)

結局は軟弱に日昇のMP3 Decoderモジュール(VS1003搭載) を使うことにした。
これは電源は+5Vだが、内部に2種のレギュレータがある。
インターフェイスは3.3Vなので注意が必要。

まあ後で乗せ代えればいいような...。

この音源のIFはSPIである。
SCKは4MHzまであげられるので500KB/Sまで期待できる。
但し内蔵のバッファは2048Byteと小さい気がする。8Kぐらいつけておいてくれたら楽なのに。

H8でSPIはないように思うが、スマートカード対応のものはMSBとLSBを入れ替えることができる。
これと同期式転送をつかえば、なんとかSPIもどきができることになる。

最近はこれに限らず、SPI形式のインターフェイスが増えているのでルネサスさんにもつけてほしいというか。これとI2Cは標準で是非!!

それはともかく、手持ちのボードを使うことにしたが、買っても@2500だし、ここまででで@6000以下とまあまあの価格。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(2)

いろいろと敷居が高いものがあるが、まずはUSB-Hostから検討する。
wav再生は44.1KHzの16bit*2cなので176.4KB/Sの速度が必要である。
USB2.0のHostはあってもフルスピードなのでUSB1.1の12Mbps程度。
ただこれでも1.5MB/Sなのでまともに出れば、転送速度としては申し分ない。

そこで候補をあげると
1.MAX3421(MAXIM)
 SPIのホストコントローラ。GHIエレクトロニクス社から、これを使ったAlFATなるモジュールが販売されている。
日本ではヒューマンデータ社が扱っていたようだが、やめたようだ。
 FATも搭載していて、扱いやすいのだが、転送速度は期待できそうもない。

2.S1R72U6(EPSON)
 これもSPIでマスストレージが扱えるらしい。
 ホームページを見ると資料は登録が必要で企業向けか?

3.BU9458KV(Rohm)
 これはUSBホストから音楽再生まで全部入っているし、SPDIFまでついている。
 対応でwavはないのだが、WMA9Standardとある。なのでWM9でサポートされたロスレスのwmaがサポートされていればこれだけで事足りてしまう。
 ただここも企業向けみたいで、個人向けではない。評価ボードやマニュアルも不明。
 問い合わせすると返事は来たが、どうもロスレスは未対応とのこと。(TT)
高級オーディオ向けじゃないってことだろうか...。

4.USB-Wiz(GHIエレクトロニクス社)
 どうもARMベースのモジュールで250KB/S出るとある。$60と微妙。

5.CH375(日昇)
 こちらはバス接続。FAT内蔵とあるが、USBマスストレージのドライバまででFATは自前で用意する必要がある。
 速度は不明ながら「バス接続」と「@2100(モジュール)」という価格が魅力。
 販売されているのは3.3Vだが、本家には5Vのものもある。

6.SL811(Cypress)
 老舗と言えば老舗で、これを搭載したボードは
・秋月のH8の3096ボード(RAM付)@3750
・みついわさんのSHボード(RAM付)@6300
などがある。

7.USB-Key(Atmel)
 秋月で@3400。これはUSB-Hostにもなりマスストレージも扱うことができる。
開発環境もUSBケーブル1本でできる。

8.VNC1L(FTDI)
USB-232C変換で有名なFTDIのChip。日本ではストリベリーリナックスさんが扱っている。
トラ技でこれでmp3プレヤーを作った例もあるし、同社のページを見るとそういうボードも存在する。
但し、相手はVS1003である。(^^!
内部を見るとDMAもあって高速なのだが、RAMが4KなのでFATでの速度はやや苦しい感じ。
WAVが再生するとは書いてないが、一番近いような気もしてきた。
ただ「内部は非公開でFTDIのものを書き込む」仕様なので、今回は断念。(TT)

まあ他にもあるかもしれないが、ホビーでめぼしいものはこんな感じ。

それならCH375でもいいのではないか?となるが、これでこけたのでさすがに考える。
元々、普通に考えるとwav再生するには176KB/Sの能力が必要になる。
単純に考えても
・メモリからCPU=350KB/S
・CPUからmp3モジュール=350KB/S
が安定に出てはじめて再生できる。
wavはbpsに換算すると
44.1KHz*2ch*2Byte*8bit=1411.2bps
となり、mp3の128Kbpsの10倍以上の速度が必要になる。
なのでmp3ならともかく、この速度はPCだと楽勝でも、組み込みのCPUでは苦しい。

350KB/Sとすると1Byteの転送は3usなのでかなり高速である。
なので
・Host-Chipはバス接続にする
 CH375はIOポート接続されていた。これはクロックなどのOnOffが必要で不利。
・それなりのバッファをつける
 特にFATを搭載した場合には、どうしてもオーバヘッドがつくため、こまごま読むより一括して読み込んだほうが有利になる。
 なので外付けでもいいからRAMがほしい。
という観点で選ぶことにした。

<結果>
秋月のH8の3096ボード(RAM2MB付)@3750
で行くことにした。
(SHでも良かったが、安かったのと多分IOネックになりそうなため。)
後は、後述するがDMAにかなり期待している。

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)

USBプレヤー(1)

以前に日昇のmp3PlayerKitを買った。
構成はここにあるように「ATmega64+VS1003+LCD」というものでオプションで「USB1.1 ホストモジュール(CH375搭載) 」というのがあり、これも購入した。
ソースコードも付属しており、ISPは必要だが、(これも@1500で売っている)自分で開発ができる。
でもって、サンプルを動かしてみたのだが...
・mp3は音が途切れることがある
・wavは音楽にならない(音が途切れながら再生される)
というのですっかりあきらめていた。

ただ、この進んだ世の中でCDプレヤーならぬメモリプレヤーがあってもいいように思う。
確かにあるのだが、「USBが使える」「wav再生ができる」「据え置き」「トランスポートになる」となると多くはない。
オーディオと言えば
・wav(でなくても可逆圧縮)再生
・据え置き(どうでもいいか...)
・USB-Host(HDDだってつなぐかもしれない)
・トランスポート(内蔵DAに不満な場合)
があるといいのだが。
iPODという手もあるにはあるが、USBが使えない。後は売られている。
HDD内蔵のiPODClassicという手もないではないが。

ビクターのEX-AR3などは候補としては良いように思う。
でもスピーカやアンプは要らないので安くしてほしいというか...。(^^!
5万なので微妙と言えば微妙だし、アンプもスピーカもよさそうである。
プレヤー部だけ販売してほしいものなのだが...。

それやこれやで、自作してみる決意をする。
目標として
・wav再生
・据え置き
・USB-Host
・トランスポートオプション
で材料費は1万以下でやってみる。(^^!

by   at 09:00  | Permalink  | Comments (0)  | Trackbacks (0)