私はMIDI Linuxガジェットモジュール(g_midi)を使ってRaspberry Pi ZeroをUSB MIDIデバイスに切り替えたいと思います。次のコマンドを使用してg_midiを有効にしました。
echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
echo "dwc2" | sudo tee -a /etc/modules
echo "g_midi" | sudo tee -a /etc/modules
reboot
これでMIDIデバイスがリストに表示されますsudo amidi -l
。
USB経由でPi Zeroをコンピュータに接続すると、コンピュータは新しいMIDIデバイスを検出し、Piとコンピュータ間でMIDIメッセージを送信できます。必要に応じてデバイスを接続して切断でき、コンピュータは常にPiを再認識します。
しかし、iPadを使うと状況が変わる。 PiデータUSBケーブルをカメラ接続キットに接続すると(Pi ZeroもPWR USBに接続されています)、カメラ接続キットをiPadに接続すると、PiはMIDIデバイスとして認識されます。ただし、カメラ接続キットを取り外して再接続すると、iPadはPiを再認識しません。
Pi USBをコンピュータに再接続すると、そのコンピュータではPiが再認識されますが、iPadでは認識されません。 Piを抜いて再び電源を入れると、再び正常に認識できますが、初めて接続するときにのみ可能です。
使用しましたが、dmesg -wH
結果は次のとおりです。
Pi Zeroは最初にコンピュータに接続されています。
[May27 11:58] dwc2 20980000.usb: new device is high-speed
[ +0.012000] dwc2 20980000.usb: new address 25
[ +0.008198] MIDI Gadget gadget: high-speed config #1: MIDI Gadget
Pi Zeroをコンピュータに再接続します。
[May27 11:59] dwc2 20980000.usb: new device is high-speed
[ +0.010505] dwc2 20980000.usb: new address 26
[ +0.006452] MIDI Gadget gadget: high-speed config #1: MIDI Gadget
Pi Zeroは最初にiPadに接続されています。
[ +23.850688] dwc2 20980000.usb: new device is low-speed
[ +0.158771] dwc2 20980000.usb: new device is high-speed
[ +0.015806] dwc2 20980000.usb: new address 1
[ +0.007635] MIDI Gadget gadget: high-speed config #1: MIDI Gadget
Pi Zero iPadの再挿入:
[ +5.517874] dwc2 20980000.usb: new device is low-speed
私は(非常に偶然に)再接続するのを待っている間にPi Zeroを数回引いた後、再接続してiPadでPi Zeroを再認識させました。プラグを抜いて再接続するのにかかる時間を測定しましたが、この時間は再現できません。まれにPi Zeroが再認識されると、次のメッセージが表示されますdmesg -wH
。
[May27 11:52] dwc2 20980000.usb: new device is low-speed
[ +0.158547] dwc2 20980000.usb: new device is high-speed
[ +0.015820] dwc2 20980000.usb: new address 1
[ +0.008327] MIDI Gadget gadget: high-speed config #1: MIDI Gadget
奇妙なことはnew address
まだ1ということです。一方、コンピュータでは、Pi Zeroを接続するたびにアドレスが1ずつ増加します。
MIDI、USB、またはLinuxのガジェットモジュールについて何も知らないので、これが重要かどうかはわかりませんが、私が知っている限り、コンピュータとiPadでPi Zeroを識別する方法の唯一の違いです。
iPadでMIDI Linux Gadgetモジュールを使った経験があり、ここで何が起こるのかを知っている人はいますか?お手伝いいただければ幸いです。
答え1
これはおそらく、デフォルトではg_midiガジェット(廃止予定)が250mV VBus Drawを使用しているためです。これは、ホストデバイスがデバイスに250mVを送信すると予想することを意味します。 iPadにこのような機能があるかどうかはわかりません。
これは一般的な設定なので、g_midiのバグではありません。 USB仕様で指定されているようにCONFIG_USB_GADGET_VBUS_DRAW flag
カーネルをコンパイルするときにこの設定を変更できます。mV * 2
たとえば、13mVだけが必要です。
CONFIG_USB_GADGET_VBUS_DRAW=26
また、利用可能な最新のLinuxカーネルバージョンを試してみると、このエラーが解決する可能性があります。