MP3プレーヤの改造を進めI2Sマスタ・モードへの変更ができたので、MP3プレーヤが動き始めました。マスタ・モードではLPC2388側からクロックを供給してやる必要があるので、I2S_TXRATEレジスタを設定してクロックを生成してやります。音源のサンプリング速度に応じてクロックを生成する必要があるのですが、実際のところ自分で用意している曲はCDから取り込んだものばかりなので44.1KHzのものばかりです。そこで、いまのところ44.1KHz固定で動かしています。
I2SのクロックはLPC2388のPCLKを分周することで生成します。WT32へのI2S送信データは16ビットのステレオデータとして送る必要がありますので、44.1K X 16 X 2 = 1411.2KHzのクロックが必要となります。PCLKは72MHzですので、72000/1411.2 = 51.02 となりますが、I2S_TXRATEにはこれから1を引いた50を設定します。
MP3プレーヤのタスクを動かし、WT32へのI2Sへの接続を切り替える74157を制御してLPC2388のI2S信号をWT32へつなげてやります。
これで音が出るハズだったのですが、何も出ません。WT32側ではA2DPを使ってストリームを送信しているのですが、ヘッドフォンからは何も聞こえません。ちょっと焦りました。WT32の設定を確認するために、自分の書いたブログの記録を読み直しているうちに、記録し忘れている事項があることに気が付きました。
WT32のI2Sインタフェースでは、LPC2388のI2Sと同じようにI2Sフォーマットだけでなく、左詰めや右詰めのフォーマットも扱えるようになっています。ところがこのフォーマットの選択はiWRAPのSETコマンドを使ったコマンドではおこなうことができません。それではどのようして選択するかというと、CSRから提供されるBlueSuiteという開発ツール群に含まれるPSTOOLというツールを使うことにより、WT32モジュールが使用しているBlueCore 5内の設定(Permanent Store)を書き換えることで、これをおこないます。16ビットのI2Sで使用するためには、WT32のデータシートにも明記されているように、PSKEY_DIGITAL_CONFIGというキーを0x0406に書き換える必要があるのでした。Windowsに例えていうのならば、レジストリを書き換えるのに似ている感じでしょうか。
というわけで、PSTOOLを立ち上げて書き換え作業を実施したところ、無事音がでるようになりました。PSTOOLで操作できるパラメータはたくさんあるのでうが、WT32のデータシートで説明されているのは、そのうちのほんのわずかなものだけです。これらのパラメータのほとんどはCSRから提供されるファームウェアに関わるもののようですので、詳しくはCSRからライセンスを受けるとか、開発キットを購入するとかしないと情報を入手できないのであろうと思われます。
現在のボード全景です↓SDカード部分はMP3プレーヤ用に作成したものを借用中。LCDの表示がヘンですが、JPEGの表示コードと漢字のフォントを用意していないため、その処理を省略しているのが原因です。これらについては、後で元に戻すつもりです。MP3プレーヤの画面には音量調節のアイコンもあるのですが、前回の記事で書いたとおり音量調節機能はすでに動作しなくなっているので、この表示はゆくゆくは消すつもりです。
赤黒まだらのコードはLiPo電池のコードです。電池本体がW-SIMの下からちょっとだけ顔を出しています。現在、この電池で動作するようにハードウェアを変更作業中です。この件については、また次回の記事にでも書くことにします。
I2SのクロックはLPC2388のPCLKを分周することで生成します。WT32へのI2S送信データは16ビットのステレオデータとして送る必要がありますので、44.1K X 16 X 2 = 1411.2KHzのクロックが必要となります。PCLKは72MHzですので、72000/1411.2 = 51.02 となりますが、I2S_TXRATEにはこれから1を引いた50を設定します。
MP3プレーヤのタスクを動かし、WT32へのI2Sへの接続を切り替える74157を制御してLPC2388のI2S信号をWT32へつなげてやります。
これで音が出るハズだったのですが、何も出ません。WT32側ではA2DPを使ってストリームを送信しているのですが、ヘッドフォンからは何も聞こえません。ちょっと焦りました。WT32の設定を確認するために、自分の書いたブログの記録を読み直しているうちに、記録し忘れている事項があることに気が付きました。
WT32のI2Sインタフェースでは、LPC2388のI2Sと同じようにI2Sフォーマットだけでなく、左詰めや右詰めのフォーマットも扱えるようになっています。ところがこのフォーマットの選択はiWRAPのSETコマンドを使ったコマンドではおこなうことができません。それではどのようして選択するかというと、CSRから提供されるBlueSuiteという開発ツール群に含まれるPSTOOLというツールを使うことにより、WT32モジュールが使用しているBlueCore 5内の設定(Permanent Store)を書き換えることで、これをおこないます。16ビットのI2Sで使用するためには、WT32のデータシートにも明記されているように、PSKEY_DIGITAL_CONFIGというキーを0x0406に書き換える必要があるのでした。Windowsに例えていうのならば、レジストリを書き換えるのに似ている感じでしょうか。
というわけで、PSTOOLを立ち上げて書き換え作業を実施したところ、無事音がでるようになりました。PSTOOLで操作できるパラメータはたくさんあるのでうが、WT32のデータシートで説明されているのは、そのうちのほんのわずかなものだけです。これらのパラメータのほとんどはCSRから提供されるファームウェアに関わるもののようですので、詳しくはCSRからライセンスを受けるとか、開発キットを購入するとかしないと情報を入手できないのであろうと思われます。
現在のボード全景です↓SDカード部分はMP3プレーヤ用に作成したものを借用中。LCDの表示がヘンですが、JPEGの表示コードと漢字のフォントを用意していないため、その処理を省略しているのが原因です。これらについては、後で元に戻すつもりです。MP3プレーヤの画面には音量調節のアイコンもあるのですが、前回の記事で書いたとおり音量調節機能はすでに動作しなくなっているので、この表示はゆくゆくは消すつもりです。
赤黒まだらのコードはLiPo電池のコードです。電池本体がW-SIMの下からちょっとだけ顔を出しています。現在、この電池で動作するようにハードウェアを変更作業中です。この件については、また次回の記事にでも書くことにします。