空を見上げて
トップページ » オーディオ » メモリプレヤー » USBプレヤー(6)

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
トラックバック
このエントリーのトラックバックURL:

トラックバックはありません

コメント

コメントはありません

コメントを書く




保存しますか?


(書式を変更するような一部のHTMLタグを使うことができます)


Please enter the security code you see here