USB-MIDI (4)

STARM 基板に続き、オプティマイズ製のボード、「MINI EZ-USB」用の USB-MIDI プログラムを書いてみました。
MINI EZ-USB ボードは、購入後サンプルプログラムを試しただけで、長い間放置したままでしたが、最近になって、やっと AVR の書き込み器として「実用的」に活用するようになりました。
しかし、それは、先人が作成したプログラムを書き込んでその「機能」を利用するだけであり、自分でプログラミングをする対象ではありませんでした。
今回、EZ-USB で初めて USB 機器として機能するプログラムを作成してみましたが、意外と簡単にできました。
オプティマイズの Web サイトにある、「空」のバルク転送サンプルプログラム「null_fw」を元に変更を加えました。
「空」というのはバルク転送されてきたデータを単に捨てているという意味です。
USB-MIDI として機能させるために、

  1. MIDIStreaming Interface SubClass のコンフィギュレーションディスクリプタ
  2. UART およびボーレート・ジェネレータとして使うタイマの初期設定
  3. バルク出力エンドポイントからデータを取り出し、シリアル出力する部分

を追加しました。
単に MIDI OUT にデータを流すだけの USB-MIDI インターフェースでは、クラス特有のリクエストに応答する必要もなく、ホストに対する USB ターゲットデバイスとしての機能についてはサンプルプログラムで実現されているものに何も追加する必要はありません。
そのため、2.、3. の処理は USB のプロトコルには直接関係しない、「普通」の処理になります。
USB らしいのは 1. のディスクリプタの作成だけです。
出来上がりのコードサイズは 2677 バイトで、無償版のコンパイラの 4 K 制限まで余裕があります。
また、EZ-USB には UART が2個内蔵されているので、2 MIDI IN, 2 MIDI OUT までは実現できます。