MP3PlayerKitを作る(5)
結局、転送速度に関しては何か根本的に変えないといけないようだ。
・メモリから読む
普通この単位は512Byteだが、USB最低64Byteである
・VS10XXに転送する
mp3などは再生時間は転送データより長くなるがwavだとそのままの時間になるので一番厳しい。
32byte単位である。中に5KByteぐらいありそれが再生長になる。しかし、16bitステレオだと1音=4Byte使われる。
非圧縮(wav)で16bitステレオで44.1KHzは最低ほしい。(つまりCD品質)
これを逆算すると、22.6uで4byte転送することになる。
176.4KB/Sになるが、それで「メモリからの読み込み」「VS10XXへの転送」を行うことになる。
なので単純に350KB/Sで読み込み、350KB/Sで書き込むことになる。
いろいろなことを考えると、それぞれが500KB/Sの能力をもってないと危ない。
特にメモリからの読み出しは「FATを参照する」「そこからセクターを決めて読む」ので、ここが速くないと速度は出ないだろう。またメモリデバイスの速度もある。
このKitの方式は
・512Byteをメモリから読み取り、32ByteづつVS10XXに転送する。
つまり16回に1度大きなインターバルがある。
組み込みでもありFATがキャッシュされているわけでもないので、次を探すのも大変。
ゆきさんの方式は
・32Byteをメモリから読み取り、32ByteづつVS10XXに転送する。
ここはいいのだが、メモリは大抵512Byte単位でこれが多分(時間がかかって)まずいのかもしれない。
同じくFATがキャッシュされているわけでもないので、毎回読むことになる。
高速化できる方策としては
・FATを全部キャッシュにいれてしまう。
CPUを変えなくてはいけないかも。SHとか?
・2CPU+DMAで「メモリ専用」「VS0XX専用」でやる
ここは時間待ちだらけで効率が悪い
FIFOを使うのも良いが...
・1CPUだが、CPLD&DMAで転送する
FAT部分は難しいが、転送だけとか。
VS0XXへの転送ならハードでできるかもしれない。
・せめてRTOSにする
待ち時間に違うタスクを少しでも走らせる
・せめて待ち時間を有効に使う
最低でもメモリを512読んでいる待ち時間にVS0XXに転送する
ということが考えられる。
RTOSか、待ち時間中の転送ぐらいが、このシステムでは現実的な改良かもしれない。
ただそれだけで性能は出るのだろうか?
それにしても、上海問屋の¥1000に負けるのは悲しい。(TT)
もっともwav再生はできないのだが。
コメントはありません