2013年08月05日

LPCOpen: 110円マイコン、LPC1114FN28でvs1053b動かしてみた。Ogg Vorbis ○

LPCOpen: 110円マイコン、LPC1114FN28でvs1053b動かしてみた。Ogg Vorbis ○
LPC1114FN28用(@110円の32bitマイコン/ARM Cortex-M0)の LPCOpen・ボード・ライブラリ
をせっかく作ったので、
マイブーム中のvs1053bにつなげて音出ししてみた。
lpc1114fn28-vs1053b.jpg
lpc1114-myarm-vs1053b-connect.png
LPCOpenを使った、上図 vs1053bの制御ポート初期化はこんな感じ。
static void hardware_init(void)
{
    /*  GPIO init */
    Chip_GPIO_WriteDirBit( LPC_GPIO_PORT, 0, 2, false );    /*  DREQ   vs1053b */
    Chip_GPIO_WriteDirBit( LPC_GPIO_PORT, 0, 3, true  );    /*  XCS    vs1053b */
    Chip_GPIO_WriteDirBit( LPC_GPIO_PORT, 0, 11,true  );    /*  XDCS   vs1053b */
    Chip_GPIO_WriteDirBit( LPC_GPIO_PORT, 1, 8, true  );    /*  XRESET vs1053b */
    Chip_GPIO_WriteDirBit( LPC_GPIO_PORT, 1, 9, true  );    /*  CS     fatfs   */
}
SPIのポート初期化は、ボードライブラリ側で指定済みなので、以下の様になりました。
 void spi_init( void ){
    static SSP_ConfigFormat ssp_format;
    /* SSP initialization */
    Board_SSP_Init();
    Chip_SSP_Init(LPC_SSP);

    ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI;
    ssp_format.bits = SSP_DATA_BITS;
    ssp_format.clockMode = SSP_CLOCK_MODE0;
    Chip_SSP_SetFormat(LPC_SSP, &ssp_format);
    Chip_SSP_SetMaster(LPC_SSP, SSP_MODE_MASTER);
    Chip_SSP_Enable(LPC_SSP);
}
前回までの話はここ。 そう、Ogg Vorbisだけが鳴らなかったのだ。 orz マイコン変えただけで動くとは思えないにしろ、(爆 何か新しい発見があるかもしれない。。。 。。。実際はなかった。(オイ やっぱり、Ogg Vorbisは再生できないのだった。 ということで、頼みの綱は前回も注目したこのスレッド。 http://www.vsdsp-forum.com/phpbb/viewtopic.php?f=11&t=460&p=1794&hilit=ogg+decode#p1794 もう一度よくよく読んでみた。 質問者は、Ogg Vorbisの再生はできるが、連続再生できないという状況。 ヤッツケ方法として、「Ogg Vorbisヘッダを送るときだけ、SDIのクロックを11.98MHzから 9.58MHzに落したらうまくいったよ」ということらしい。 自分の場合は、SDIクロック8MHzなので関係なさそうだった。 ハイつぎ。 今度は回答者の発言を読んでみると、「DREQのLowを確認してからHiを見た?」。 えっ!! DREQのHi->Lowを確認しなきゃダメなの? この部分はデータシートに既定がないのだった。 SDI/SCIクロックを送り終わってから、DERQがHiからLowに変化するまでの時間は明記されていないのだった。 タイミングチャートをみると、XCSをHiにする頃には :D 確実にDREQ=Lowに見えるだけだ。 マイコンが高速な場合、DREQがLowに落ちる前にDREQのチェックが完了してDREQ=Hiと誤認する 可能性はあり得ると予想してみた。(DREQのチェック方法はSDI/SCIで同じ) ゴニョゴニョ。。。 Bingo!! 大当たりぃ??!! (オイ DREQのHiを確認する前に、80CLKI以上(実際には10usec)待つことで、 Ogg Vorbisの再生ができたのだった!! と、いいことばかりではなくて、 やっぱり、Ogg Vorbisの「連続再生」はできないのだった。 お????い! vs1053bをリセット後、最初にOgg Vorbisを再生する場合に限って、その1回のみ成功する。 Ogg Vorbisも含めて、他のファイルを一度でも再生すると、2回目以降は全く再生できない。 (Ogg Vorbis以外なら再生可能) これは上記フォーラムの質問者の状況とほぼ一致する。 質問者は回避方法を持っていたが、それはちょっとメンドクサイので 単にSDIクロックを8MHz --> 1MHzまで遅くしてみたが、状況変わらずだった。orz 今後の方針。 キーワードは、 SS_DO_NOT_JUMP。 ソフトウエアリセット。 曲の途中停止、終了シーケンス。 最悪、Ogg Vorbisの再生前に、ソフトウエアリセットを毎回かける荒技もなくもない。 あらわざ。 :D 最後のSCI clockの立ち下がりエッジから、DREQ=Lowになるまでの時間を計ってみた。 276nsecだった。 結局、だんだんブレッドボードの信頼性が落ちてきてノイズだらけになってしまったので、 別基板を作らないと駄目そう。 orz * WAVE(/PCM)/ MP3 / Ogg Vorbis / WMA / FLAC 再生OK 結局、バグが見つかって修正したら、いろんな問題が一気に解決しちゃった。(^^)/ 根本は、音楽データを送るときに、先頭の1セクタ分(512byte)を2度送りしていたのが原因でした。orz (1) WAVE再生開始で、「ジッ!!」って音が出ていた。→ 直る。 (2) Ogg Vorbis の連続再生が出来ない。 → 直る。 (3) WMAも連続再生が出来なかった。 → 直る。 (4) FLAC。最初からOK。 と、結局、曲データのヘッダ部分を破壊してしまっていたのが原因だった。 ようやくスッキリしたのだった。/(^^)/ * ここまでのまとめ WAVE/PCM、FLAC:fs=44.1kHz、16bit、Stereo MP3/Ogg Vorbis/ WMA :圧縮率192kbps、fs=44.1kHz、16bit、Stereo の再生を確認。 MIDI: MIDIファイルもSDI経由で送って再生できたものの、音がチープなのと挙動が不安定で コントロールが難しい。MIDIは外部からデータをもらうリアルタイムMIDIのほうが良いかもしれない。 以下は、UARTターミナルから操作した図。
 -- Ok!: FLAC plugin loaded [ flac_plg.bin ] from SD Card
VS1053b info:
 mode=0x0800, status=0x0240, clockf=0x8000, vol=0x4040
*** PCM/Wave Player mode ***
</>:
[  0]        AK1.OGG [  1]     AK1_Q1.OGG [  2]        AME.OGG
[  3]       ART1.OGG [  4]       ART7.OGG [  5]      ASCOT.OGG
[  6]    BETWEEN.OGG [  7]      ETUDE.OGG [  8]       HERO.OGG
[  9]    HGHRPWR.OGG [ 10]     HUNTER.OGG [ 11]    JOURNEY.OGG
[ 12]    LVNFYOU.OGG [ 13]    MAXOMAN.OGG [ 14]      MID_B.OGG
[ 15]   MRTHNFLG.OGG [ 16]   MUSICB~1.OGG [ 17]   RCKYGNTL.OGG
[ 18]       SARA.OGG [ 19]    THEWELL.OGG [ 20]   TOMORROW.OGG
[ 21] <         PRO> [ 22] <        TEST>
Enter:[L]ist, [P]lay/Pause, [S]top, [C]:Play all, [I]nfo, [Q]uit
11
  JOURNEY.OGG id=[Og], bps=204 kbps
>>>>>>>>>>>>>>>>>>>>
 music end all  ok
    03:26 Sec ... End music.
15
 MRTHNFLG.OGG id=[Og], bps=0 kbps
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 music end all  ok
    04:45 Sec ... End music.
9
  HGHRPWR.OGG id=[Og], bps=194 kbps
>>>>>>>>>>>>>>>>>>>>>>>
 music end all  ok
    03:53 Sec ... End music.
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | TrackBack(0) | PCM/WAVE | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック