田舎おやじの言動log

田舎で暮らすおっさんの言動を適当にロギング。

ESP32 + MCP23S17

最近試作業務でESP32を利用する機会があり、自宅でも何か出来ないか情報収集しながら触っていた。で、手始めに1年くらい作りかけで放置したままのYM2151シールドと接続してやろうとしたが、LCDやSDも接続するとI/Oが足りない。そこでSPIのIOエキスパンダMCP23S17で賄えないか簡単に通信速度を確認した。

まずは普通にarduinoの吊るし関数で、MCP23S17の出力制御に必要な24ビットデータを10Mbpsで繰り返し送信。

およそ18.5us間隔。MMLやMDXファイルのデコードなら十分間に合う。ただVGMだと23us以内に2回出力(8bit + WR)したい。ネットで調べると似たようなことを解決した人はちらほらといて、それを参考にレジスタ制御のマクロ関数でSPI処理を書き替えた。

およそ4.5us。WRのディレーを入れても十分過ぎる。ひとまずM5StackにRaspberry Pi Pico用に作ったYM2413を接続してVGM再生できるか試してみよう。