qiitaを眺めていたところ、以下の記事を見つけました。
以前秋月の処分品でvs1053bのDIP化基板モジュールを購入して部品箱にしまってあって、使い道を考えていたのですが、手持ちの部品で作れて、ちょうどいい感じです。
2023年暮れの時点でこの処分品は在庫がまだあり、チップのみが700円に対してDIP化基板モジュールが420円ととってもお徳です。
追記:2024/7に秋葉原のお店の二階で在庫処分特価で200円になっていました。私が見た時には100枚くらいはあったと思います。
Amazonでもvs1053bを使ったモジュールは千円以上します。
ブレークアウト基板より単体チップのほうが配線は面倒ですが、融通がききます。
いろいろ思案して両面のユニバーサル基板を使うことも考えたのですが、表面にジャンパーを張るためには片面のほうが都合がよいです。また変換基板が大きく、部品も多いので、秋月のC基板では無理で大きなユニバーサル基板にしました。
vs1053bの電源は1.8v+2.8vが標準ですが、1.8v+3.3vでも動作可能です。SDカードが3.3vなので、この組み合わせにします。1.8vをLM317(100mA)で作り、3.3vをXC6202(150mA)で作る事にします。LM317は220Ω,100Ωにしました。
電源は5Vにしました。これはこれまで作ったDACのI2Sにそのまま送り出せるからです。
Adafruitのブレークアウト基板を参考にして、AVCCとIOVCCの間と、AGNDとGNDの間にはおまじないにフェライトビーズを入れてあります。
ストックしてあったSDカードソケットは裏にボッチが二つあり、一つは基板の穴に入れて、片方が入るようにユニバーサル基板に穴を開けてはめ込み、四隅をジャンパーにハンダ付けして固定しています。
DIP化基板モジュールは交換することなどないためソケットなどは使わず、直にユニバーサル基板にハンダ付けしました。足が邪魔にならないように少し浮かせた状態で付けてあります。
ピンヘッダーを短く切ってもいいかもしれませんが太いやつを48本もきるのはちょっと面倒です。
vs1053bにはI2S出力があり、スタンドアロンでも使えるので、いつものI2Sコネクタも用意しておきます。
12.288MHzの水晶は部品取りしたものを使いました。パッケージには12.2EF7Nとしか書いてありませんが、周波数カウンターでI2Sのマスタークロックを見たところちゃんんと12.288MHz近くになっていました。
SPI flashはたくさんストックがあるのですが、なにかのジャンクから発掘され1MバイトとFreeBSDでは使い道のなかったMX25L8005を変換基板に貼り付けて、基板用リードフレームで足を生やします。チップが汚れていて、間違えて逆につけてしまいました。
flashは当初ファイルをコピーしてMacのflashromで焼いていたのですが、なかなかうまくいかなかったので、VSIDEから焼くようにしました。
VSIDEから焼く時は、bootのジャンパーを外してSDカードを抜いて電源を入れてVSIDEのPrommer/Flash Utilityを開きます。
1Mバイトも必要ないので、128KバイトのST 25P10VPに変えました。
VSIDEでCOMポートを変更するダイアログはstartした後にターゲットが見つからないと開けるのですが、COMポートは8までしか設定できず、USB FTDIのチップはCOM23になっていたので、solutionファイルを秀丸で開いて編集しました。
デバッグログは9600bpsで確認できます。
ヘッドフォン端子はつけないつもりだったのですが、確認を簡単にできるようにつけました。
再生が出来るようになったのですが、音がおかしいです。
VSDSPの掲示板に書き込んだところ、もうお休みにも関わらずコメントをもらえました。SCI_CLOCKFがおかしいということのようです。
なんからの理由で、SCI_CLOCKFが正常に設定されないようです。
またMyMain()の中で強制的に設定する方法を試したところ、最初はうまくいきませんでした。
これはplayer.imgを指定して焼いていても実際に焼かれるのはeeprom.imgでこれがrecoder.imgから作られた物が残っていて、変更が反映されないためでした。
当初チップのバグなどを疑いましたが、VSIDEのビルドに起因する問題のようです。VSIDEはv2.48でした。
どうにかちゃんと鳴るようになりました。
I2S接続のFN1242,PCM5102は鳴りましたが、PCM1795はだめでした。DAC側の問題でしょうか?
UIを作れるほどメモリなどに余裕はないと思われ、UI部分だけ外部で処理するのがよさそうです。方法を考えてみたいと思います。
ちょっと古いですが、データシートを翻訳された方がいました。
MP3のプレーヤーであればESP32単体でも作れるようですがESP32のI2Sにはマスタークロックがなく、FN1242などのDACが使えないので、マスタークロックがあるvs1053bは貴重です。
FreeBSDのAtherosでもmpg123を動かしてmp3を再生できますが、vs1053bの方がお手軽です。ネットのストリームはmpg123でメディア(SDカード)はvs1053bと使い分けるのが良さそうです。
9600bpsのシリアル接続で制御可能でstandalon.pdfにはPlaying modeとFile modeというの書いてあります。通常はPlaying modeでfキーを入力した後、曲が終了したところでFile modeになります。File modeのプロンプト>になり、^jを入れたところで処理されます。Playing modeはPlayCurrentFile()の実行中にUserHook()で処理され、File modeはMyMain()の中で処理されています。
消費電流はSDカードにもよるのかもしれませんが、単体で40mA以下で、FN1242をつないだ時に60mAくらいでした。