FR60 マイコン基板 (22) -- USB-MIDI (7)

FR60 版の USB-MIDI プログラムは、当然、FR60 用のベースボード上で作成しているわけです。
ベースボード上の LCD が電源投入時のデフォルト状態のまま、1 行だけ薄ぼんやりと見えているのは寂しいので、FM音源プログラムの LCD 表示部のプログラムを追加して、LCD および OSD で表示されるようにしました。
表示する内容ですが、当初は、単にバルク転送されてくるブロック数と、出力する MIDI データのバイト数をモニタするだけでしたが、USB イベントを内部 RAM に記録しておいて表示する、簡易 USB モニタの機能も付け加えました。

FR60 の USB ファンクションは、ほとんどのリクエストに自動応答するので、ユーザープログラム側でキャプチャできるイベントは数少ないのですが、GET_DESCRIPTOR や、バスリセット、NAK などは割り込みを伴って通知されます。
それらのイベントを順次、内部 RAM に記録しておきます。
そのイベントを LCD に表示させ、キー入力で前後に送れるようにしてありますが、イベント数が多くなると手に負えなくなりますから、UART0 (フラッシュ書き込み用のシリアルポート) から外部にダンプできるようにしました。
それをプログラムで見やすいように表示したのが下のリストです。
最初の数字は、ms 単位での時間です。
GET_DESCRIPTOR での、括弧に入った最後の数字は、実際に送り返したディスクリプタの長さです。
これは Windows XP に接続した場合の例で、デバイスディスクリプタでマニュファクチャラ ID として string[1] を指定しているのですが、全くアクセスしてこないことが分かります。
(string[2] はプロダクト ID、string[3] はシリアルナンバー)

   320.4   Bus_reset

   436.4   Bus_reset

   514.4   GET_DESC. device[0] 0x0000 0x40 (0x12)
           80 06 0001 0000 4000

   515.0   Bus_reset

   623.6   GET_DESC. device[0] 0x0000 0x12 (0x12)
           80 06 0001 0000 1200

   624.1   GET_DESC. config[0] 0x0000 0x9 (0x48)
           80 06 0002 0000 0900

   624.6   GET_DESC. string[0] 0x0000 0xff (0x4)
           80 06 0003 0000 ff00

   625.0   GET_DESC. string[3] 0x0409 0xff (0x14)
           80 06 0303 0904 ff00

   625.1   EP0_IN_NAK

   625.5   GET_DESC. config[0] 0x0000 0xff (0x48)
           80 06 0002 0000 ff00

   625.6   EP0_IN_NAK

   626.3   GET_DESC. string[0] 0x0000 0xff (0x4)
           80 06 0003 0000 ff00

   626.7   GET_DESC. string[2] 0x0409 0xff (0x20)
           80 06 0203 0904 ff00

   627.2   GET_DESC. string[0] 0x0000 0xff (0x4)
           80 06 0003 0000 ff00

   627.7   GET_DESC. string[2] 0x0409 0xff (0x20)
           80 06 0203 0904 ff00

   647.6   GET_DESC. device[0] 0x0000 0x12 (0x12)
           80 06 0001 0000 1200

   648.1   GET_DESC. config[0] 0x0000 0x9 (0x48)
           80 06 0002 0000 0900

   648.5   GET_DESC. config[0] 0x0000 0x48 (0x48)
           80 06 0002 0000 4800

   648.6   EP0_IN_NAK

   671.1   GET_DESC. string[0] 0x0000 0xff (0x4)
           80 06 0003 0000 ff00

   671.4   GET_DESC. string[2] 0x0409 0xff (0x20)
           80 06 0203 0904 ff00

   671.5   EP0_IN_NAK

   672.2   GET_DESC. string[0] 0x0000 0xff (0x4)
           80 06 0003 0000 ff00

   672.8   GET_DESC. string[2] 0x0409 0xff (0x20)
           80 06 0203 0904 ff00

   672.8   EP0_IN_NAK

   685.2   GET_DESC. string[0] 0x0000 0xff (0x4)
           80 06 0003 0000 ff00

   685.7   GET_DESC. string[2] 0x0409 0xff (0x20)
           80 06 0203 0904 ff00

   685.8   EP0_IN_NAK