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

 今回は、SH-2AのUSB HOST機能を使って USBメモリーから I2S(の24bit)フォーマットで動く DACで 音楽再生する実験をしてみた。

回路
CQ出版社のオリジナルのSH-2A基板からの改造を下図に示す。
SH-2A基板にあるUSBコネクターに変換用のケーブ(Mini-A オス<-->A メス)をつけてUSBメモリーを接続している。
単独で動かせるように  PLAY,STOP,NEXT,BACKの操作スイッチを設け、 液晶表示モジュールを接続した。
単独で動かすときは、VBUSの+5VとGND間に外部電源(USB充電器)を接続できるようにして、電源を供給している。
サンプリング周波数が44.1KHz 叉は48KHzの4倍のWAVファイルも再生できるように、水晶に 22.5792MHz(=44.1KHz x 512) と 24.576MHz(=48KHz x 512)を使い、I2S DACのマスタークロックとして供給するようにしてある。

SH 2A I2S DAC drive

I2S DAC circuit

ソフト

 先回は、雑誌インターフェイス関連のサイトにあるサンプル・プログラム 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)している。

 DACへの出力はSH-2AのSSI2をI2S 24bitに設定して使い、SSI1はDACのマスタークロック(MCK)供給用のみに使っている。

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

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



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

lcd picture



ご注意
 不完全なものですが、I2Sフォーマットの DAC ドライブの参考用に載せておきます。

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


致命的な問題

①左右のチャンネルが逆転することがある。 現物合わせ的に調整してみた(ssif_ctrl.c) が、まだ、DMCの起動方法が不完全と思われる。I2Sフォーマットの設定すること自体は難しいことではないが、WSタイミングのとり方がよくわからない。

②出力されるオーディオデータがノイズ再生になるときがある。

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

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



設計の参考になる資料



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

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

破壊する危険があるので、電源の入れ方と切り方の順番は慎重に考えて行動しましよう。


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