オーディオ 試行記録

多くの個人プログやネット記事に助けられました。私の経験を還元したくです。

SMSL SU-X のファームウェアアップデート

お困りの所有者もいらっしゃりそうなので、音の話は省きファームウェア更新に絞り記しておきたいと思います。ネガティブ表現が多い文章なので面白くないです。後日、あらためて未所有の方のお役に立ちそうな製品インプレッションも記事にしたいと思います。

未だにファームウェア更新はハイリスク

使用して明確な問題が生じない限り、ファームウェア更新なんてしないほうが良いと思います。
そう思わせる理由は、アプリケーションソフトの更新と違い、ファームウェア更新には「失敗したら二度と起動しない」というリスクをユーザーに負わせるギャンブル要素が未だにあるためです。もちろん、セキュリティーの問題や製品の性能を毀損するなど、しないと不味いことがあればすべきだと思います。

ガジェット好きのおもちゃ

メーカー保証対象外となることを承知のうえで Android 携帯端末のルート ( 管理者権限 ) を取得し様々な改造をするという趣味をお持ちの方がいらっしゃります。開発者が普段使うツール類を駆使しハックを楽しみます。覚悟の上での趣味ですし、様々な権利者の権利を侵害しない範囲での楽しみでしたら大いに結構でしょう。
失敗して動かなくなっても自己責任、そのような方はメーカーに文句を言って直してくれとはおっしゃらないです。

また、半製品といわれる一部を自身で組み立てて遊ぶキットも世の中には存在します。ラズベリーパイと呼ばれるミニ PC で遊んでいらっしゃる方も多いと思います。自分で一部をハンダ付けし組み立て OS をセットアップしてと、目的のサービスや恩恵を得ることだけでなく、その過程を楽しんで知識を得て達成感や満足を得ていらっしゃります。大変良いと思います。

こういった趣味を通じて、開発者並みの知識を得ていたり、そもそも開発者がプライベートで上記のようなことをしていたりと、この世界は奥が深くコミュニティーとしても一定の規模を持っていたりします。

メーカーのミス挽回、不具合修正はメーカーの責任

半製品で「失敗したら二度と起動しないよ」と注意喚起し販売している商品なら何も問題ありません。自己責任で良いです。

そうではなく完動品として販売し不具合が出ているなら、製品保証の下で回収して直すかユーザーが誤らずに進行可能な手順書とともに修繕キットを提供すべきです。多少の手間をユーザーに取らせても構いませんが、操作手順を省かず説明し「終わるまで電源を切るな」以外で困らせるようなことをしてはいけないと思います。ましてや、オペレーション行為以外の知識を要求したりするのはもってのほかです。

不具合を出してなお「我々のデバイスの仕様は未公開です。ですが、あなたは他所で得た様々な経験と知識を頼りに、このキットを使い修繕することもできます。失敗して使えなくなることもあります。嫌なら不具合のある製品を使い続けてください。」という態度は購入者をバカにしています。メーカーとして誠意ある態度とは言い難いでしょう。

音が割れる不具合

掲題の SMSL SU-X。FILTER を OFF にした状態かつ音圧を 0.0 db にすると音がバリバリと割れる現象が発生しました。同時に使っているヘッドフォンアンプ SH-X のせいも想定し、アンプを変えてみましたが症状変わらず。不具合は SU-X 側で確定です。FILTER を他のものに変えると生じません。FILTER OFF の状態でも、音圧を -6.0 db ぐらいまで下げると改善します。

また、割れる音は低音が顕著です。ドドドンというビートの曲ならバババッと割れます。この時点でソフト側だろうと察しました。
この、ビートに合わせ派手に音割れするバリバリサウンドのせいで、FILTER を使用しているときに感じたわりと素性の良い出音まで「僅かに割れている?」と疑ってしまいます。

それなりの価格で買った製品です。不良品みたいな音で放っておけるわけもなく対応しようと考えます。症状としてはハードウェア故障ではなくバグ、であればアップデータがあるでしょう。

平易なファームウェア更新作業

DAC 内部の仕様と前知識を踏まえた自己解釈の操作をしない」範囲でのファームウェア更新作業を試みます。メーカーの指定しない自己流操作は製品保証の対象外になってしまいますので、指示通りにケーブルを接続しアプリを起動するということ以上のことを避けトライします。

入手

とりあえずSMSLのサイトにアクセスしてみます。Ver2.1 のファームウェアが提供されてました。

SMSL のサイトより SU-X のファームウェアを入手

アクセスした時点での最新のファームウェアのみがダウンロードできる仕様のようです。特に OS などアップデート環境の選択はありませんでした。

解凍・抽出

ダウンロードした ZIP ファイルを解凍すると、操作説明の pdf とともに様々なファイルが抽出されました。操作説明と抽出物とを見比べると構成が違いました。嫌な予感がします。

pdf の説明と実際の抽出物の構成が異なる
(左) 操作手順書 (右) 実際の抽出物

更新

SU-X を接続せずドライバのインストールをし、後に PC と SU-X を micro USB 端子を使い接続するよう操作説明には書かれていました。ですが、SU-X に micro USB 端子はありません。USB Standard B と USB Type C です。とりあえず Type C で接続します。嫌な予感は続きます。

SU-X 本体を「ノブを押しながら電源を入れる」よう記載されています。押した状態を 5 秒程度継続すると、液晶画面が点灯せず本体の赤い LED が常時点灯するとのこと。5 秒後にノブを離すと、赤い LED が灯りっぱなしで液晶画面は非表示となりました。ファームウェア更新のモードになったようです。

続けてファームウェア更新用実行ファイルを起動するよう手順書に記載されていますが、同形式の名称をもったファイルが存在しません。
操作説明で指定されているのは拡張子が .BAT のバッチファイルと呼ばれる文字ベースのコマンド羅列です。まったく名称が違うけれど同拡張子のものが一つだけあります。
そもそも、Windows のデフォルトはファイル名の拡張子が非表示です。非表示で使用している方は「違う名前だが同拡張子ならある」と気づくことができません。

また「バッチファイルから別のバッチファイルを呼び出す」ことが技術的には可能です。この名前違いのファイルがあるという状態、二つの可能性が推測されます、

  1. 操作説明に書かれている名前のファイルを入れ忘れた。
  2. 名前を間違えて付けた。操作説明で書かれているものと同じファイル。

1 のミスだった場合、入っているバッチファイルは「ファームウェア更新の一部だけを担うもの」という可能性があります。ダブルクリックするのは危険かもしれません。部分的にファームウェアが書き換わり SU-X が起動しなくなることも考えられます。

押すな、押すなよ !

操作手順にはバッチファイルを「開け ( Open )」と書かれていますが、入っていたのは別名のファイル。既に手順書の信憑性が無いことは明白です。押すなと書かれているボタンを押すかの如く、ダブルクリックの瞬間に不快な気分はピークに達します。

画面にはコマンドでエラーっぽいメッセージが吐かれ、一瞬で消えました。

想定どおりの展開です。最後に「起動しない、使えない」状態になる恐怖を感じつつ SU-X の電源バチッと切って深呼吸をし、再度バチッと起こします。幸いなことに起動しました。もちろん未アップデートのままです。

「バグパッチが無いよりはマシ。必要なら自力で解析しろ。出来ないならバグ状態で使い続ければいい。」という SMSL からのメッセージに溜息をつき、その日の作業を終えました。

SMSLのファームウェア提供傾向を調査

趣味や仕事で学んだりすることを嫌だとは思いません。メーカーの怠慢を補う目的で二度と使わない、学びたくない知識を身につけるのはストレスです。しかし、背に腹は代えられず、一週間ほど朝晩の通勤時間を全振りして調べました。

似たようなもの見ればわかるだろう

まずは SMSL 社製の他の DACファームウェアをいくつかダウンロードしてファイル構成を調べたりしました。結果、同じ形式のものは見当たりませんでした。次に、他社や他所のファームウェアを調べてみました。
その際に、シンセンオーディオというセラーで提供している SU-X の最新ファームウェアが Ver.2.0 であることがわかりました。Ver.2.0 は SMSL のサイトにありませんでしたので、ある意味貴重です。これで追加情報も得られました。

シンセンオーディオのファームウェア
Ver.2.0 アップデートパッチ内容からわかったこと

通常のファームウェアアップデートは「順番に全部やらないといけない」か「途中を飛ばしても最新を入れれば問題ない」の何れかです。

SMSL のサイトで Ver.2.1 しか入手できないのなら後者でしょう。そんなことを考えながらVer.2.0 を解凍します。

文字化けでまともに解凍できませんでした。先の写真にあるように Window7 以降対応を謳ってグローバルに販売している製品のパッチなら半角英数字以外をフォルダやファイルの名称に使うというのは如何なものかと思います。「これは簡体字中国語圏の  Windows ユーザー向けの製品だ。他の言語版の OS 利用者は相手にしていなかった。自己責任で買ったのだ。」とか「これはオーディオ製品ではない。ガジェットマニアに向けたサウンド分野の半製品だ。」と自分に言い聞かせます。
文字コード絡みは昔から色々と面倒なことが多いです。このためだけに Windows 側で新たに解凍ツールをインストールするのは手間です。スマホで解凍できるケースは多いので、そちらで解凍しファイル移動で済ませます。

(左) Windowsで解凍し文字化け (右) スマホで解凍して回避

ファイル構成を覗いて溜息です。全て簡体字中国語は想定内でしたが、アップデーターが2種類入っているのは想定外でした。操作説明も箇条書き数行のみで Ver2.1 より更に簡素。これでは簡体字中国語圏のユーザーでも容易にはアップデートできないでしょう。これはオーディオ分野のガジェットだ、オーディオ機器じゃない、と心を落ち着かせます。

Ver.2.0 にしかないもの

Ver.2.0 に含まれていて Ver 2.1 に含まれていていないものは、XMOS XU316 用のファームウェアとアップデーターでした。こちらは他社の DACファームウェア研究をしていたときによく見かけました。最新のデバイスドライバーをセットアップし、PC から音楽を再生できる状態になってさえいればアップデーターでファイルを DAC に送るだけで済みます。

Ver2.1 に含めていない、配布をしないというのはどういうことなのでしょう。

Ver 2.0 と 2.1 に重複するもの

Ver.2.0 で SoC と書かれている方は、ほぼ Ver.2.1 とファイル構成が一緒でした。
製品保証内で操作するいちユーザーでいたかったですし、ガジェットリテラシーや開発者リテラシーを試されるようなことに付き合うのも辛いです。ですが、手がかりを掴むためバッチファイルを覗きます。

文字化けしました。メモ帳で開いて文字化けするバッチファイルで正常動作は期待できません。この文字化け解消のためだけに新たなツールをインストールしたくないのでブラウザで代用します。こういうときは文字コード認識が強いブラウザが意外と役に立ちます。ZIP の解凍時もツールを探さずスマホで回避しましたが、ドライバやツールは必要以上にインストールせずに済ませたいものです。

メモ帳で文字化けのバッチファイル

手がかりは sunxi-fel.exe

バッチファイルを覗くに、実際にファームウェアの書き込みに使用しているのは sunxi-fel.exe でしょう。引数に書き込みを示唆するスペルとアドレス、それに対象ファイル名が見られます。この exe が SMSL の独自ツールでなければ、これを手がかりに様々な情報が得られると思われます。とりあえず sunxi-fel.exe を検索してみると、幸いなことにツールの存在理由や使用目的などが得られました。最低限の作業に支障のない状態にはもっていけそうです。

自己責任に足を踏み入れたファームウェア更新

失敗も多少覚悟のうえでファームウェアの更新作業を開始することとします。ここから先は独自調査の結果を交えながら記しますので誤りが含まれる可能性あります点、ご容赦ください。

ファームウェアのアップデート対象は二つ

SMSL SU-X でファームウェアのアップデート対象とする箇所は二つあります。一つは DSP : XMOS XU316 もう一つは SoC : Allwinner F1C100S です。Ver 2.0 には両方が、Ver 2.1 には SoC  のファームウェアのみが入っていました。

ということで、今回ファームウェアの更新を

  • Ver 2.0 に入っていた XMOS XU316
  • Ver 2.1 に入っていた F1C100S

という順にやりたいと思います、Ver 2.0 に入っていた F1C100S は省きます。

XMOS XU316 の ファームウェア更新

XU316 は製品仕様の説明でもアピールされているチップなので特に説明不要かと思います。AK や ESS などの DAC チップの前段に位置しデータ転送処理の役割を担っています。XU316 に限らず、この系統のチップはプログラム可能な DSP なのでオーディオメーカーが独自の機能を入れることも可能です。iFi のサイトを見たときに、その点を示唆する注意文言が書いてありましたので、iFi は独自機能を入れているのかもしれません。

PC と SU-X の接続

PC と SU-X の接続には、USB-A と USB Type-C のケーブルを用いました。特にドライバーをインストールする前から「音を鳴らすだけ」なら鳴る状態でした。

デバイスドライバーのインストール

まずはファームウェアのことを意識せず Windows PC で音楽を再生させるためのデバイスドライバーのインストールを行います。

これがデバイスドライバ

上図の ZIP を解凍すると EXE ファイルが出てきます。それをダブルクリックし、ウィザードに促されるまま操作するとドライバのインストールが完了します。

促されるままにインストール

インストールが完了するとスタートメニューに「XMOS」というグループが現れ、ドライバーの他にふたつのアプリがインストールされていることを確認できます。
このうちの「XMOS USB DAC Driver Control Panel」を起動すると、きちんと USB DAC を認識していることがわかります。

(左) アプリ2種 (右) USB DAC Control Panel
ファームウェアの更新

このまま続けて XU316 のファームウェアの更新作業に移ります。上述の「USB Type C で接続し最新のドライバーで認識できている。音楽を再生できる状態。」のまま進行を続けて問題ありません。ノブを押しながら SU-X の再起動は不要です。

この状態でファームウェアのアップデータを起動します。フォルダ名「XmosUSB升级工具」のほうです。

(左) アップデータ (右) 起動した状態

アップデータを起動すると、画面上部に接続されているデバイスが表示されます。ここに SMSL のデバイスが接続されていることが表示されます。

起動後「Browse」ボタンを押下し、アップデート後のファームウェアのファイルを指定します。「XmosUSB固件」のフォルダのなかにあります。

この状態でよく画面を確認し、アップデートを中止しました。「Start」を押せばアップデート開始なのですが、表示されている Current Firmware に v3.29 と記載があり、またファームウェアのファイル名に 3.29.bin とあるので「同一バージョンではないか?」と推察したためです。

「同じなら一応やっとけ」という考え方もあるかもしれませんが、ファームウェアの更新ですし既に自己責任の領域に足を踏み入れているので、リスクテイクはしませんでした。しかし、ここまで迷わず進められる状態でしたので、リスクは小さいだろうと想像します。

Allwinner F1C100S のファームウェア更新

いよいよ、本尊の F1C100S のファームウェアの更新を行います。このチップ、中国 Allwinner 社による ARM ベースの SoC でローエンド・組み込み系で採用されることの多い極めて安価なものだそうです。で、液晶画面付きでメニューやリモコンなども含め諸々の操作ができるとなると採用されているのも然りです。

ということで、さっそく準備に入ります。
まずは SU-X の電源を切り、PC から外しておきます。ついでに Windows PC も再起動しておきます。

Ver2.1 のファイルを移動し、一ヶ所に集約

最初に Ver 2.1 に含まれていたファイルを全て一か所にまとめてしまいます。フォルダに階層構造があると、相対指定だのアクセス権だのと何かと操作しにくいです。私は、C ドライプ直下に「Temp」というフォルダを作成し、そこに全て入れました。

全て一ヶ所に集めてしまう
コマンドプロンプトを出しておく

さきほどファイルを集めたフォルダを使いファームウェアの更新を行います。全てコマンドプロンプト上で行いますので、あらかじめ表示させておきます。

  • スタートで右クリック「ファイル名を指定して実行」
  • CMD を起動
  • cd ¥Temp でフォルダを移動
(左) 右クリックで (中) ファイル名を指定して実行 "cmd" (右) cd ¥Temp
PC と SU-X を接続

SU-X の電源を OFF のまま USB Standard B 端子のほうを使い PC を接続します。Type C ではダメです。続けて、回転ノブを押し続けた状態で電源をオンにします。ノブを押し続けたまま 6 - 7 秒ほど待ちます。SU-X の画面が黒く赤いランプが灯ったままてしたら放します。

この状態は SU-X 内の F1C100S が FEL (First-stage External Loader ) モードに入ったことを意味します。この状態で SoC が認識できる USB が 2.0 までのため、Type C のコネクタには対応できていません。

バイス認識状態を確認

FEL モードの Allwinner SoC を接続したことがなければ「不明のデバイス」としてWindows 側が認識している筈です。スタートメニューで右クリックしてデバイスマネージャーを呼び出します。

バイスマネージャーを呼び出す

不明なデバイスの状態
不明のデバイスに対するドライバをインストール

この状態で、出しておいたコマンドプロンプトに移動します。

sunxi-fel.exe ver と入力してみます。(.exe の部分は省略できます)

コマンドは正常に起動しますが、下の画面のように「FELモードのデバイスが見つからない」というエラーが表示されます。

FEL モードのデバイスが見つからない

この状態でドライバのインストールを開始します。

zadig-2.8.exe と入力します。

するとすぐにコマンドプロンプトは次のコマンド待ち状態になり、ウィンドウ形式のアプリが画面に表示されます。

この zadig のウィンドウ画面をしばらく出しっぱなしにしていたら、最新版の 2.9 があるという案内が表示されました。せっかくなので、促されるままに 2.9 をダウンロードします。2.9 のアプリは 2.8 と同じ ¥Temp フォルダに入っていました。2.8 のアプリを終了した後、先ほどと同様コマンドプロンプト

zadig-2.9.exe と入力します。

すると下記画面のように「この不明なデバイスに対してドライバーをインストールする」という意味の画面が表示されます。予めデバイスマネージャーで不明なデバイスが一つある状態であること確認できていれば、これが FEL モードの SU-X で間違いないです。もしも複数の不明なデバイスを繋いでいる状態で操作をしていると、ここで間違ったほうを選ぶ可能性があるので注意が必要です。

デバイスドライバーをインストールする

このドライバーのインストールは多少時間がかかって不安になった記憶があります。数分はかかったけど 10 分はかからなかったような。気長に待ちますと、下記のように成功した旨の表示が出ます。この表示、ドライバをインストールすることに成功したという意味でデバイスの認識に成功したという意味ではないです。認識できていなくても成功と出ます。

インストール成功の表示

バイスの認識に成功すると、デバイスマネージャー上で「ほかのデバイス ⇒ 不明なデバイス」という位置にあったものが、USB 接続のデバイスのほうに移動しています。

USB デバイスとして認識している

ここまで進んだら、zadig-2.9.exe のウィンドウをクローズします。
続けて、コマンドプロンプト上で

sunxi-fel.exe ver と入力してみます。(.exe の部分は省略できます)

うまくいっていれば、F1C100S が接続されている状態だと表示されます。これで、ファームウェア更新を開始できます。

F1C100s が接続されていると認識
ファームウェアを更新

ここから先は SU-X が起動しなくなるリスクを帯びるので、慎重に作業が必要です。

ブラウザ等を使い、load.bat を文字化けの無い状態で表示します。

その画面を見ながら、sunxi-fel.exe を順次実行します。

下にそのときの画面写真を貼ります。

sunxi-fel.exe を順次実行する

まず、load.bat に様々なものが表示されますが、sunxi-fel 以外は無視します。また、ファイル名を指定する部分がフォルダパスも含め長く書かれていますが、これも不要です。この指定ミスを防ぐために全てを同じ Temp フォルダに入れました。ですので、以下のような三行となります。一度にやらず、ひとつやって 100% になったら次と進めます。

sunxi-fel -p spiflash-write 0x6000  boot0.bin
sunxi-fel -p spiflash-write 0x6000  LOGO_SMSL.bin
sunxi-fel -p spiflash-write 0x50000 SMSL SUX_MCU_V2.1.bin

これを見て

「同じ 0x6000 に、 boot0.bin と LOGO_SMSL.bin の二つを書くっておかしくないか?」

と思ったのですが、考え出すと "おかしい" "たぶん SMSL 側のミス" という結論にしかなりません。なので、とりあえず「このとおりやっておけば、動作するだろう」と割り切って粛々と作業します。

終了し再起動

上の画面のようになって数分放置してみましたが、SU-X が再起動する様子はありませんでした。パツンと SU-X の電源を切り、PC と SU-X を接続していた USB ケーブルも外し、再起動します。

すると、無事に SMSL のロゴが表示されました。アップデートできたようです。

ところが現れた文字はすべてロシア語。焦ると同時に笑い出してしまいました。最後まで楽しませてくれます。ロシア語表示のままメニュー画面を調べると言語切り替えがありました。そのなかに日本語もありましたが、一部が中国語だったり訳が不自然だったりするので英語に設定し何とか無事完了しました。

(左) 購入直後 (右) アップデート直後のロシア語

購入直後は、Allwinner SoC 側のバージョン番号しか表示していませんが、アップデート後は XMOS 側のバージョン番号も表示するようになったようです。

不具合はどうなった?

FILTER を OFF にした状態で音圧を 0.0 db にすると音がバリバリとする不具合がどうなったか早速試してみました。結果、改善されていました。更新した甲斐がありました。

しかし、この FILTER OFF の状態で SOUND COLOR という音色を変える機能を使うと、当初の状態ほどではありませんが残念ながらビートに合わせてバリバリ割れた音がしました。

この SOUND COLOR という機能は音に軽くエフェクトをかけるもので、Rich Tube Crysral の3種から好みのものを選べます。

元々の FiLTER OFF 不具合が音圧を下げると改善し -6.0 db あたりまで下げると生じなくなったこと、ファームウェアのアップデートで修正可能だったこと、改善したファームウェアでも SOUND COLOR エフェクトを使用した際に音割れが発生すること。計算時の桁溢れをうまく処理できていないのでしょうね。

私個人は 音色を変えるデジタルエフェクト機能を使用しませんので FiLTER OFF の状態で SOUND COLOR を使用したときに音圧の高い低音が割れる不具合があっても許容はできます。

しかし、たまたま私が使わないだけに過ぎず、それを使いたい人はいるでしょうから、きちんと修正をすべきでしょう。そして、次のアップデーターでは、せめて梱包物と操作手順書を一致させ、全て半角英数字でファイル名やバッチファイルを書いて提供をと切に願うところです。