Implementation of USB Host for MIDI Bridge
Implementation of USB Host for MIDI Bridge
最近のUSB-MIDIをネィティブに実現したMIDI機器は、USBケーブルでそのままパソコンにつなげて使えるので、それなりに便利です。例えば,KORGのnanoKeyはUSBで直接パソコンにつないでお手軽に演奏を行うことが出来ます。私もこれまで Object Development社のAVR-USBスタックを使ってSX-150のUSBインタフェース(Pepper-MIDI)やキーボード(Ginger-MIDIkey)を作成してきました。パソコン中心の環境ではシリアルMIDIフリーの環境で楽しめる時代になっています。
しかし、これはあくまでパソコンが中心にあることが前提です。パソコンを使いたくない場合や他のシリアルMIDI機器と組み合わせて使う場合には、直接ディジーチェーンできるシリアルMIDIの方が便利な場合もあります。nanoKeyを直接シリアルMIDIの機器に接続して演奏する方法はありません。かならずパソコン経由になります。
そこで、ネィティブなUSB-MIDI機器をシリアルMIDIにブリッジしてやる方法を調べました。
USB-MIDI機器はUSBのターゲットとして働くため、シリアルMIDIとのブリッジには必ずUSBホスト機能が必要になります。最新の規格ではUSB同士で直接接続可能なUSB OTG(On-The-Go)というのも有るようですが、結局はどちらかのターゲットにホスト機能を実装する必要があります。
以下、USBホスト機能を実現する方法です。
1. HOST機能を持つUSBコントローラを使ったマイコンを使う
例えば,CypressのSL811-HSTなどのコントローラを使えば実装可能です。秋月のキットでいえば、H8/3069F-USBホストボードが相当します。これを使う場合には、OS/USBスタックとして、以下の選択肢が有ります。
(A)三岩さんのMESをつかう
最新版MESでH8はサポートを打ち切られているので、SHボードを使った方が良いでしょう。
(B)uC Linuxを使う
実装例としてtinyWillow/Miyuki Koyanagiさんのものがあります。但し,メモリを増設する必要があるそうです。
2. USB内蔵ワンチップマイコン
最新のワンチップマイコンはUSBインタフェースを内蔵しています。使えるか調べてみました。
(A)USB内蔵PIC
MicrochipのUSB Frameworkでは8bitのPIC18系のUSB内蔵PICはターゲットのみサポートしているようです。秋月で1000円のPIC18F2550では無理で、16bitのPIC24, PIC32系が必要とのことです。残念。
(B)USB内蔵AVR
やはり頼りは我らがATMELです。AT90USB1287などUSB内蔵のCPUもあります。Hostモードもサポートされているようです。Software PackageにCDC Hostの例もありますので、これをベースに改造するのが良さそうです。
秋月もUSB評価キットであるAT90USBKeyを扱っています。
また、LUFA (Lightweight USB Framework for AVRs) もなかなか良さそうです。
3. ソフトで何とかする
ソフトのみでUSBを何とかするAVR-USBですが、さすがにUSBホストまでは実装していません。と思ったら、いしかわきょうすけさんが既にAT90S2313で試されています。素晴らしい。これを改造すれば何とかなるかもしれません。難点は、ソースコードがASMなので少し躊躇しちゃいます。
それぞれ一長一短があります。実現性では2-(B)、コストでは3でしょうか?
続く(かも)
2009年3月22日日曜日
MIDI ブリッジのためにUSB Host機能の実現方法を考える