digidesign MBox2のFirmware Updateが出来なくて困った⇒解決

 1995年にAVIDに買収された、digidesignUSBオーディオインタフェースMbox2をLinuxで使用するために入手しました。
 が、現行の機器ではFirmware Updateできなくて困ったので、Update成功までの試行を記録しておきます。

※試行順に時系列で記載してますので、冗長な記述となっていますが、Mbox2のFirmware UpdateにはWindowsXPの実機を用意して特定のソフトウェア環境で実行すべしというのが結論です。
 

Mbox2

 Mbox2は2005年発売で2010年にディスコンになった製品で、とっくにサポートは終了しています。AVIDからダウンロード可能なドライバはWindows8.1までに対応したものが最終で、Windows10は対応OSに含まれていません。振り返ってみれば発売時点(2005年)の最新OSはWindowsXP、終売の2010年時点ではWindows7が最新でしたので、これでも結構長期間サポートしてくれた方かもしれません。
 なお、Mbox2の製品としてのスペックは最高48KHz/24bitサンプリングですが、A/DもD/Aも実は192KHzまで対応したチップが使用されています。具体的には以下のキーパーツが使用されています。

Role Manufacturer Product
A/D Converter Cirrus Logic CS5361
D/A Converter Cirrus Logic CS4392
S/PDIF Transceiver Cirrus Logic CS8427
USB Controller Texas Instruments TUSB3200C

 24bit/48KHzの場合、アナログ入出力2chとデジタル(S/PDIF)入出力2chを同時使用すると、24*48000*(2+2+2+2)=9216000[bit/sec]で約9Mbpsのデータ転送帯域が必要です。これが96KHzなら2倍の約18Mbps、192KHzなら4倍の約36Mbpsの帯域が必要です。Mbox2が対応するUSB1.1のFullSpeedでは12Mbpsまでしか出ませんから、USBの帯域がボトルネックとなりA/DC及びD/ACのスペックを活かしきることなく、最高48KHzまでのサンプリング周波数としたのでしょう*1 (かつての一部のRoland(EDIROL)製品のように、入力だけ或いは出力だけしか使えない代わりにサンプリング周波数を上げるような機能はありません)。

 蛇足ながらMbox2発売前年の2004年にはAVIDはM-Audioも買収していることから、Mbox2にはM-Audioの知見も多少は活かされているのかもしれません。と、思ったのですが、当時のM-Audioの多くの製品ではA/DCやD/ACには旭化成(AKM)のチップが採用されていましたので、あまり設計や調達の共通化はされていなかったようですね。その後、M-Audioは2012年にinMusic Brands*2に買収されているため、現時点ではdigidesignM-Audioは無関係です。
 

Linuxサポート

 digidesign公式とは無関係にMbox2はかなり昔*3からALSAドライバが存在し、(無保証ながら)Linuxでも使えます。
Digidesign Mbox 2: Linux driver provided! – ZamAudio.com

 現在もUSB Audioのソースコード中にsnd_usb_mbox2_boot_quirk()というMbox2用のQuirkが存在することが確認できます。
quirks.c « usb « sound - kernel/git/torvalds/linux.git - Linux kernel source tree
 この中でmbox2_setup_48_24_magic()という関数を叩いており、名称から察せられる通り量子化ビット数24bit、サンプリング周波数48KHzに固定された動作となるようです。

 ですが、このコードが前提とするMbox2のFirmware versionは1.43*4である必要があり、古いFirmwareでは動作しません。

 このため、Linux環境下での利用を目的としてFirmware Updateをしたいユーザーは近年でも居るようですが、更新できないという悲鳴が公式フォーラムの書き込みでも見つかります。
need help updating mbox2 firmware to v1.43 - Avid Pro Audio Community

 以下のページにはステップバイステップでUpdate手順が紹介されています。が、WindowsXP環境のディスクイメージを用意してVMを使うとか、実機を用意する必要があるようです。
How to upgrade the firmware of an old MBox 2 so it will work in Linux · GitHub
 

Ubuntu20.04環境に繋いでみる

 入手したMbox2のファームウェアバージョンも解らないですので、とりあえずUbuntu20.04のPCに繋いでみたところ、dmesgには以下のような出力がありました。

[   92.096626] usb 1-2: new full-speed USB device number 7 using xhci_hcd
[   92.280366] usb 1-2: config 1 interface 2 has no altsetting 1
[   92.280382] usb 1-2: config 1 interface 3 has no altsetting 1
[   92.280392] usb 1-2: config 1 interface 4 has no altsetting 1
[   92.280401] usb 1-2: config 1 interface 5 has no altsetting 1
[   92.284260] usb 1-2: New USB device found, idVendor=0dba, idProduct=3000, bcdDevice= 1.24
[   92.284279] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   92.284291] usb 1-2: Product: Mbox 2
[   92.284303] usb 1-2: Manufacturer: Digidesign
[   92.435615] mc: Linux media interface: v0.10
[   97.609427] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  102.729873] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  107.850101] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  112.969966] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  118.090149] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  123.209913] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  128.330100] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device.
[  128.330369] usbcore: registered new interface driver snd-usb-audio

 Digidesign Mbox2が接続されたことはしっかり認識されています。また"bcdDevice= 1.24"と出ていますが、これがファームウェアバージョンに相当するようで、すなわちALSAでサポートしていないバージョンです。
 "Unknown bootresponse=1, or timed out, ignoring device."の出力が複数繰り返されているのも、前掲のquirks.cのソースコードの挙動そのものです。bootresponse=2が返ってくることを期待していますが、Firmware version 1.24では延々と1が返ってくるようです。
 とは言え末尾に”registered new interface driver snd-usb-audio”とも出力されています。もしかして使えたりするかと淡い期待をしてみましたが、そんなことはありませんでした。PCM録音・再生デバイスも、RawMIDIデバイスもAlsaSequencerポートも、(元から存在するデバイスを除き)何も認識されていません。

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 3 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 3 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: chtbswrt5672 [cht-bsw-rt5672], device 1: Deep-Buffer Audio (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ amidi -l
Dir Device    Name

$ aconnect -l
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'

 

Windows10でUpdate試行⇒失敗

 先述のステップバイステップのUpdate手順を参考に、手元にあるなるべく古いPCで試してみることにしました。
 Windows7だと思っていた古いノートPCを引っ張り出してきたのですが、無償アップデートに釣られてWindows10に更新済みでした。もう使ってないPCですので、古いドライバやソフトウェアを無理に突っ込んで環境を壊してしまっても実害は無いので、とりあえずこのPCで試してみました。

  • Protools 7LE(ptle70_28754.zip)のインストール⇒できた
    • インストールプロセス中のドライバインストール⇒Mbox2が認識されずできない
  • Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の実行⇒Mbox2が認識されずできない
  • Program Files (x86)\digidesign\Driversにあるドライバ(*inf)の手動インストール⇒署名が無くてできない
    • ドライバ署名の強制を無効化して再起動後に再試行⇒エラーは表示されずインストールできた(?)が、デバイスマネージャでは不明なデバイスとして残っている
  • Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の再実行⇒Mbox2が認識されずできない
  • Windows8.1用ドライバ(Mbox_2_USB_Family_v90265_Drivers_70922.zip)インストール⇒できた
    • 不明なデバイスが消え、オーディオ/MIDI共に正常に認識されているっぽい(とりあえずPCM再生のみ実際に確認した)
      f:id:kachine:20210829095420p:plain
      Windows 10 device manager listings about Mbox2 (after driver for Windows 8.1 installed)
  • Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の再実行⇒Mbox2が認識され、現在バージョンの確認ができるようになったが、Updateはできない
    f:id:kachine:20210829095929p:plain
    Check Firmware result

    f:id:kachine:20210829100020p:plain
    Update Firmware result
    • Program Files (x86)\digidesign\DriversやFirmware Updaterのバイナリと同一ディレクトリにFirmware.bin*5を配置して再試行しても同様。
    • "Failed to download firmware"と言っているが、いわゆるネットワーク通信は発生しておらず、PCからMbox2へのFirmwareの転送をdownloadと表現している?

 以上より、公式フォーラムの書き込みで報告されているように、Windows 10でMbox2のFirmware Updateは出来ないようです。もし、Mbox2をWindows10で使用したいだけなら、ドライバ署名の強制を無効化すればWindows8.1用ドライバで自己責任で動かすことはできそうです。
 

OSX ElCapitanでUpdate試行⇒失敗

 AVIDのサイトにはOSX用のFirmwareUpdaterも掲載されていたので、もう何年も使っていないMacbookProで試してみました。

  • OSXのバージョン確認
    f:id:kachine:20210829100617p:plain
    OS X version
  • ドライバ(Mbox2USBFamily_10_3_9_Mac_83297.dmg)インストール⇒できた
    f:id:kachine:20210829100802p:plain
    Digidesign Mbox2 icon appeared after driver installed
    • 設定画面を開く⇒Mbox2が認識されていない
      f:id:kachine:20210829100953p:plain
      Cannot connect to Mbox2
  • Firmware Updater(Mbox2firmware_v143_Intel_33123.dmg)の実行⇒Intel用を実行しているにもかかわらずPowerPCアプリと認識され実行できない
    f:id:kachine:20210829101352p:plain
    Unable to run updater (for INTEL), OSX says it is PowerPC app.
    • もしかしてPPCIntelの内容が逆になってる?と思いPPC用Updater(Mbox2firmware_v143_PPC_33124.dmg)も試してみたが、同エラーで実行できない

 以上より、OSX(El Capitan)ではMbox2のFirmware Updateも使用も出来ないようです。
 

 というわけで、詰みました。WindowsXPの実機を用意してUpdateを試すほか無さそうです。
 

その他

Windows版UpdaterにFirmwareが含まれてない説⇒嘘

 Windows版Updaterは実行ファイル(mbx2dfu.exe)だけでファームウェアファイルが無いし、exeも小さいからFirmwareそのものが含まれていないのでは?或いは、"Failed to download firmware"のメッセージからダウンロード元のURLが死んでいるのでは?説が散見されましたが、それはありません。実際にはexe中にファームウェアのバイナリは含まれています。
 OSXFirmware Updaterのdmgを展開すると、PPC版でもINTEL版でも同一の7945bytesのFirmware.binが存在します。Windows版Updaterのmbx2dfu.exeの0xCB28以降の7945bytesにもOSXdmgから抽出したFirmware.binと完全一致するバイナリが含まれています。このFirmware開始アドレス0xCB28やファームウェアサイズ7945(0x1F09)もmbx2dfu.exeにリトルエンディアンで格納されており、常識的に考えればUpdaterのプログラム中で有意に使用されていると考えられます。

# Extract Firmware from mbx2dfu.exe
$ dd ibs=1 skip=$((0xcb28)) count=7945 if=mbx2dfu.exe of=extract.bin

# Check the integrity with extracted binary and firmware.bin which is extracted from Updater for OSX 
$ sha256sum extract.bin
125ded78541ca97c483b3bfc0a0d8c2e5ddfdc3a811bda7e817b82a3b8b394f0  extract.bin
$ sha256sum ./intel/firmware.bin
125ded78541ca97c483b3bfc0a0d8c2e5ddfdc3a811bda7e817b82a3b8b394f0  ./intel/firmware.bin
$ sha256sum ./ppc/firmware.bin
125ded78541ca97c483b3bfc0a0d8c2e5ddfdc3a811bda7e817b82a3b8b394f0  ./ppc/firmware.bin

# Find the firmware start address (0xCB28) itself from mbx2dfu.exe
$ hd mbx2dfu.exe | grep "28 cb"
0000ea40  09 1f 00 00 e8 1e 00 00  28 cb 40 00 09 1f 00 00  |........(.@.....|

# Find the firmware size 7945 (0x1F09) itself from mbx2dfu.exe
$ hd mbx2dfu.exe | grep "09 1f"
0000ea40  09 1f 00 00 e8 1e 00 00  28 cb 40 00 09 1f 00 00  |........(.@.....|

 なお、mbx2dfu.exeにはhttpやftp、ホスト名やIPアドレスのようなリテラル値は含まれていませんでした。すなわち、エラーメッセージ中の"download"の語の示す意味はやはりインターネット越しのファイルダウンロードではなく、PCからMbox2へのファームウェア転送を意味していると考えられます。

 こうなると何故"Failed to download firmware"エラーになるのかは考えてみても想像が難しいです。Audio/MIDIではなくDFU(Device Firmware Update)用のドライバが正常に機能してないような気がしますが、ソースコードも無いですし、逆コンパイルデバッグ実行でもしなければ正確なところは解らないでしょう。もちろん、リバースエンジニアリングは禁止されてますから、大人しくWindowsXP環境を引っ張り出してFirmware Updateを実行するしかなさそうです。
 

WindowsXPでUpdate試行⇒成功

 WindowsXP搭載ミニノートを用意して、試してみました。

  • Protools 7LE(ptle70_28754.zip)のインストール⇒できた
    • インストールプロセス中のドライバインストール⇒できた
  • Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の実行⇒Windows10同様に"Failed to download firmware"表示になる

 XPでもUpdateできないってどういうことやねん?と、途方に暮れかけましたが…。
 そういえば、mbox2dfu.exeのバイナリを調べていた際に、何かのinfファイルを指すリテラル値が保持されていたなと思いだして、改めて確認してみたところ、".\mbx2ccgp.inf"と".\mbx2dfu.inf"というリテラルが保持されていました。これ、mbox2dfu.exeと同一ディレクトリにこの2つのinfが必要ってことなのかしらと雑に推測し、C:\Program Files\digidesign\Drivers にmbox2dfu.exeを配置して実行してみたところ、[Update Firmware]を押下後に、mbx2dfuドライバのインストール確認ダイアログが表示された後に、Updater自体は"Firmware update completed successfully”表示が出ました!

f:id:kachine:20210903230937p:plain
Firmware updated using WindowsXP

 念のため[Check Firmware]を押下してみると、正常に143に更新されていることが確認できます。

f:id:kachine:20210903231110p:plain
Mbox2 firmware version 143

 

Ubuntu20.04環境で動作確認

 dmesg(syslog)を確認すると、"bcdDevice= 1.24"だった箇所が"bcdDevice= 1.43"に変わり、"Unknown bootresponse=1, or timed out, ignoring device."のエラー出力が無く、"Digidesign Mbox 2: 24bit 48kHz"が出力されています。

[   12.368538] usb 1-2: new full-speed USB device number 7 using xhci_hcd
[   12.550662] usb 1-2: config 1 interface 2 has no altsetting 1
[   12.550667] usb 1-2: config 1 interface 3 has no altsetting 1
[   12.550669] usb 1-2: config 1 interface 4 has no altsetting 1
[   12.550672] usb 1-2: config 1 interface 5 has no altsetting 1
[   12.554386] usb 1-2: New USB device found, idVendor=0dba, idProduct=3000, bcdDevice= 1.43
[   12.554392] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   12.554395] usb 1-2: Product: Mbox 2
[   12.554397] usb 1-2: Manufacturer: Digidesign
[   16.532592] usb 1-2: Digidesign Mbox 2: 24bit 48kHz
[   16.539674] usbcore: registered new interface driver snd-usb-audio

 PCM再生・録音・RawMIDI・AlsaSequencerポート全て正常に認識されています。

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 1 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: chtbswrt5672 [cht-bsw-rt5672], device 1: Deep-Buffer Audio (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: M2 [Mbox 2], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 1 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: M2 [Mbox 2], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ amidi -l
Dir Device    Name
IO  hw:1,0,0  Mbox 2 MIDI 1

$ aconnect -l
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 20: 'Mbox 2' [type=kernel,card=1]
    0 'Mbox 2 MIDI 1   '

 なお、PCMデバイスとしてはbig-endianな符号付24bitフォーマット(S24_3BE)である点だけ留意が必要かもしれません。

$ cat /proc/asound/M2/stream0
Digidesign Mbox 2 at usb-0000:00:14.0-2, full speed : USB Audio

Playback:
  Status: Stop
  Interface 2
    Altset 2
    Format: S24_3BE
    Channels: 2
    Endpoint: 3 OUT (ASYNC)
    Rates: 48000
    Bits: 0

Capture:
  Status: Stop
  Interface 4
    Altset 2
    Format: S24_3BE
    Channels: 2
    Endpoint: 5 IN (SYNC)
    Rates: 48000
    Bits: 0

 つまり、例えばwavファイルはLittle-endianでPCMデータを保持しますから無変換では再生/録音できません。以下はaplayの例ですがarecordも同様です。

$ aplay -D hw:M2 24bitsample.wav
Playing WAVE '24bitsample.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo
aplay: set_params:1368: Sample format non available
Available formats:
- S24_3BE

 hwではなくplughwとして自動変換するように指定すれば問題ありません。もちろん、endiannessの変換は無劣化ですから波形そのものへの影響はありません。

$ aplay -D plughw:M2 24bitsample.wav
Playing WAVE '24bitsample.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo

 



以上。

*1:もしかするとFireWire版のMbox2 Proも同じA/DCとD/ACを採用していて、PC I/F以外の設計を共通化しているとかなんでしょうかね?

*2:2021年現在、AlesisやAKAIDENONやMARANTZもこのグループ傘下。

*3:Linux kernel 3.8以降?

*4:1.38以降?

*5:OSX用Updaterから抽出