インターフェース付録のSH-2A基板基板のUSB HOST機能を使った音楽の再生の実験2 PCM1702をドライブする

先回は、PCから直接オーディオデータをUSB接続によるバルク転送でSH -2A基板に送って、20BIT DACのPCM1702を2個(左右チャンネル用に各1個)ドライブする実験をしてみたが、今回は、SH-2AのUSB HOST機能を使って USBメモリーから直接 音楽再生する実験をしてみた。


回路
CQ出版社のオリジナルのSH-2A基板からの改造を下図に示す。
SH-2A基板にあるUSBコネクターに変換用のケーブ(Mini-A オス<-->A メス)をつけてUSBメモリーを接続している。
ソフトの開発デバッグ用に、SH-2Aのシリアル入出0番をUSBシリアル変換モジュールでPCとつないで、PC上のTera Term (ボーレート115200,データ8bit,パリティnone,ストップ1bit,フロー制御none)でおこなっている。単独で動かせるように  PLAY,STOP,NEXT,BACKの操作スイッチを設け、 更に液晶表示モジュールを接続する予定である。

sh-2a board -no2


今回は、PCM1702を動かす専用(X4に11.2896MHzを使用する。)の回路にしたが、TDA1543の様なマスタークロッがいらないI2S接続のDACの場合でも、ソフトと回路を変更すればたぶん対応できるはずである。I2S DACの再生実験へのリンク


一般に、オーディオDACへのクロック信号のジッターが音質に悪影響を及ぼすことが知られている。
そのため、オーディオのクロック信号の発振器で高精度のものを使ったものを見かけるが、これ以外に、電源変動の影響を受けてH/L閾値が揺らぐため ICの中の実際にDACへクロックを出力供給して部分のロジック回路にてジッターが発生する可能性も考られる。
そこで、電源をより安定化することを狙って、SH-2A ICの直下で 電源3.3Vラインに大きめの容量の100uFの電解コンデンサーをつけることにした。(下図。 基板の裏面、SH-2Aの真下に電解コンデンサーをつける)

sh2-3_3v-100uF




ソフト

 先回は、雑誌インターフェイス関連のサイトにあるサンプル・プログラム sh7264_usb_function_sample.zip をもとに作成した。今回は更にUSB機能をホストに変更するため、アルファプロジェクトさんAP-SH2A-3A用サンプルの中に含まれるusbhost,,,usb_firm,srcをもとにしている(ここではusb_firm,host,src,hostディレクトリ以下に相当する)。ファイルシステムの処理には、汎用FATファイルシステム・モジュールFatFsを 具体的には雑誌インターフェイス2011年3月号のサンプルプロジェクトの中のものをもとにしている(ここではfatfsディレクトリにある。 misc.cのdisk_readでscsiコマンドのread(10)を呼んでいる ここではMSCドライバのような中間ソフトはない)。  デバッグ表示用のxxxx_printf()文の処理の部分(ここではcqディレクトリーにあるソース)とMSCの読み込み方は 雑誌インターフェイス2012年7月号付録DVDのUSB HOSTプログラム fm3_sample_usbhost.20120313の中にあるものを参考利用させて頂いた。USBホストのMSCの制御については、雑誌インター フェイス2010年9月号の記事「USB マス・ストレージ・クラスの制御手順」を参考にした(ここでは、h_main.c の最後の方にある)。 USBメモリー接続時の初期処理にはノウハウがあるようであるが、そこまでおこなっていないので、読み込めないUSBメモリーがある。

 また、1MバイトのRAM領域は WAVデータ取り込みと DAC出力のフォーマットにあわせた並び替え処理に 専用につかうようにセクションを宣言(section CDATA)している。

 雑誌付属SH-2Aの基板の制約上、プログラムROMサイズを32Kバイト以内で収めないといけないので(他に方法はあるようだが)、実装項目はできるだけ少なくしている。以下のような制約事項がある。

①USBメモリーのセクターサイズは512バイトと固定にしている。
②SH-2AのUSBホスト部分から汎用メモリーへのDMA転送は未対応。(と言うかDMA転送の方は上手く動かせていない。現状の方式でも192KHz 24bit のステレオ再生処理が間に合っているので そのままにしてある。)
③扱えるファイルシステムは、FATでルートディレクトリーにあるWAVファイルで数は90個まで。 ファイル 名は、昔のMS-DOSの様に、アルファベットの8文字表示(xxxxxxxx..WAV)で、ロングファイル名は未対応。日本語も不可。
④FATFSで対応したコマンドは、disk_read。
⑤SCSIコマンドで対応したのは、Test Unit Ready, Inquiry, Read Capacity, Read(10)のみで。エラー処理はなし。
⑥サンプリング周波数(44.1KHz, 88.2KHz, 176.4KHz, 48KHz, 96KHz, 192KHz,352.8KHz)のデータのビット数(16bits, 24bits)のPCMのWAVファイル。2チェンネル。 世の中には色々なヘッダがあるので読めないWAVファイルもあるだろう。
⑦その他。多数。
⑧PLAY,STOP,NEXT,BACKの操作ボタンの反応は怪しい。
⑨デバッグ用に 情報を表示させると プログラム容量が大きくなる(ROMの容量オーバーする)ので、デバッグ表示用のオプションは(common.hの中でコメントアウトして)オフにしてある。 

 デバッグの情報の表示例

もともとは、プログラムを作りながらデバッグ表示で確認し、デバッグ表示部分を削除して あまった容量で 更に プログラムを作るというやりかたをしていた。


更に、Strawbery Linux社のavr-i2clcd.zip AVRサンプルを参考にしながら、SH-2AとI2C接続したキャラクタ液晶モジュール(16x2行)をつかって、8文字のファイル名を表示させることにした。 下図は1曲目を再生しているときの表示例である。

lcd picture



ご注意
 まともに動くものではありませんが、参考用に載せておきます。

参考用:更新作成したソースファイル


致命的な問題

①PLAYが上手く起動できない。 つまり、片方のチャンネルのSSIへデータを送るDMAが正常に動作しないことがある。DMAを2チャンネル同時に駆 動に成功していないようだ。 STOPとPLAYを何度か繰り返すと、再生できることがある。DMAの残量をチェックしてリトライ機能を追加したがまだ不 完全だ。 

②出力されるオーディオデータのビットがずれて ノイズ再生になるときがある。

③再生できないUSBメモリーがある。

④同じUSBメモリーでも、
USBメモリーが抜いたときの処理が不完全のため、抜き刺しをすると、再生できない場合がある。 その場合、RESETしてやり直すと再生できることがある。 



設計の参考になる資料

追記
仮想マシンを使ったInterface2010年6月号付属SH-2Aマイコン基板用USB版 シリアル接続HEWモニタの接続


警告
SH-2A基板をつかって接続する場合は、電気的なことをよく理解した上でお 使いください。そうしないと、PCやその基板と接続した相手などを破壊する危険があります。
供給元が違うVBUS+5V同士を接続すると、電源が喧嘩をして破壊する恐れがあります。供給元が違う電源は一緒に接続しないように。

PCM1702のための(外部)電源がオフの状態で、PCM1702に信号を入れるとPCM1702やSH-2A側も破壊する危険があります。電源の入れ方と切り方の順番を考えましょう。

デバッグ用のUSBシリアルモジュールの電源と(外部)電源が同時に供給されると、破壊する危険があるので、電源ライン同士が短絡しないようにしましょう。


免責
(1)回路図やプログラムやデータの使用により、使用者に損失が生じたとしても、その責任 を負いません。
(2)回路図やプログラムやデータにバグや欠陥があったとしても、修正や改良の義務を負い ません。