Android Auto の接続がどうにも不安定なので、「ファームウェアの更新でも来てるんじゃないか」と思い立った。
結論から言うと、更新は不要だった。すでに最新版が入っていた。そこに至るまでに、USBメモリを引っ張り出し、フォーマットに失敗し、セキュリティソフトと格闘し、最終的に「そもそも Wi-Fi で更新できる機種だった」ことが判明する、という遠回りをした。
同じ轍を踏む人がいるかもしれないので、順を追って書いておく。
搭載しているのは PF9DA-JI-64
まず型番の確認から。うちのジムニーノマドに入っているのは、アルパインの9型ディスプレイオーディオ PF9DA-JI-64。
ここが最初の落とし穴で、この型番でアップデートプログラムを探しても見つからない。PF9DA-JI-64 は「本体 + ジムニー専用パネル・取付キット」のセット品番で、本体そのものの型番は DAF9Z だからだ。アルパインのダウンロードページも DAF9Z で分類されている。
ちなみにこれは地図データを内蔵したカーナビではなく、CarPlay / Android Auto でスマホの画面を映すディスプレイオーディオ。ナビ機能はスマホ側に依存している。だから接続が不安定だと、そのまま「ナビが使えない」に直結する。
公式の更新手順は USB メモリ
アルパインの案内を読むと、更新手順はこうなっている。
- PC でアップデートプログラム(1GB超)をダウンロード
- ZIPを解凍する(ここを飛ばすと本体が認識しない)
- 展開してできる
Updateフォルダを、USBメモリの最上位階層にコピー - 車で「設定 → システム → 情報/更新 → 更新」
PCを持っていない人向けに、アップデート用USBメモリを無償で送ってくれるサービスもある。返却不要で、申し込みから2週間程度とのこと。
素直にUSBメモリを用意することにした。ここまでは何の問題もない。
Mac で USB メモリがマウントできない
手元にあったのは microSD を読み書きするタイプのUSBリーダー。ディスクユーティリティで FAT32 にフォーマットして、いざマウント。
$ diskutil mount /dev/disk19s1
Volume on disk19s1 failed to mount
If you think the volume is supported but damaged, try the "readOnly" option
繋がらない。
diskutil list を見る限り、パーティション構成はいたって正常だった。
/dev/disk19 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *31.0 GB disk19
1: DOS_FAT_32 UNTITLED 31.0 GB disk19s1
MBR に FAT32 のボリュームがひとつ。狙いどおりの構成なのに、マウントだけが失敗する。
最初はカードの故障やファイルシステムの破損を疑ったが、diskutil verifyVolume は正常終了する。fsck が通るということは、ブートセクタもFATも読めているということだ。
犯人は ESET のデバイスコントロールだった
ログを見て腑に落ちた。
fskitd: mount(2) error: 1
diskarbitrationd: mount failed with Error Domain=NSPOSIXErrorDomain Code=1
mount(2) が EPERM(操作が許可されていない) で弾かれている。ファイルシステムが壊れているなら EIO や EINVAL が返るはずで、EPERM は「何かがマウントを拒否している」ときのエラーだ。プローブは成功するのにマウントだけ失敗する、という非対称さがヒントだった。
原因は、少し前に何となく入れた ESET Endpoint Security のデバイスコントロール。外部メディアのマウントをブロックする機能が効いていた。
デバイスコントロールを一時的にオフにしたら、あっさりマウントできた。常用するなら、ルールエディタで対象デバイスの許可ルールをブロックルールより上に追加するのが正しい対処になる。
教訓: fsck が通るのに mount だけ EPERM で失敗したら、ファイルシステムではなく上位レイヤ(セキュリティソフト、MDM、デバイス制御)を疑う。
車に行ったら「ソフトウェア更新(OTA)」があった
USBメモリの準備が整い、意気揚々と車に向かった。
「設定 → システム → 情報/更新」を開く。そこに並んでいたのは:
- シリアルNo.
- モデル名: DAF9Z
- ソフトウェア Ver.: 6.0.000 [更新]
- ソフトウェア更新(OTA) >
- ソフトウェア自動更新案内 [オン]
- 車種専用チューニング [更新]
OTA。
しかも Wi-Fi 設定を開くと、自宅のアクセスポイントがずらりとスキャンされている。この機体、普通にネットワークに繋がる。
さらに、ソフトウェア Ver. は 6.0.000。アルパインの公式サイトで配布されている最新版と同じバージョンだった。つまり、更新すべきものは最初から何もなかった。
USBメモリの調達も、フォーマットとの格闘も、ESETの切り分けも、全部が壮大な空振りだったことになる。
ただし「更新」ボタンは今も USB を要求する
面白いのはここからで、ソフトウェア Ver. の横にある[更新]ボタンを押すと、
USBメモリを接続してください
というダイアログが出る。
つまり画面上の項目は役割が分かれているらしい。
| 項目 | 役割 |
|---|---|
| [更新]ボタン | USBメモリから実行(従来の手順) |
| ソフトウェア更新(OTA) | Wi-Fi 経由。詳細は未検証 |
| ソフトウェア自動更新案内 | 新版が出たときの通知 |
OTA メニューが本当にダウンロードから適用まで完結するのか、それとも新版の有無を確認するだけなのかは、現時点では確かめられていない。既に最新版なので、押しても「最新です」で終わってしまう。次に新しいバージョンが出たときに答え合わせになる。
本題: Android Auto の接続不具合
そもそもの動機だった不具合の話に戻る。
以前は AAWireless 2 でワイヤレス接続していたが、接続完了まで1分ほどかかるのが煩わしく、「どのみち充電もするんだから」と有線に戻した。
その有線接続で、こういう症状が出ている。
- エンジンをかける前にスマホを挿しておくと、確実に繋がる
- ディスプレイオーディオが起動した後に挿すと、しばらく認識されない
- 少し時間を置いてから挿し直す必要がある
夏場、乗り込んですぐエアコンをつけたいときに、この順番の制約はけっこう効く。
症状の出方からすると、ソフトの不具合というより USB の電源投入とデバイス認識のタイミング問題に見える。起動シーケンス中のスキャンでは掴めるが、起動完了後の挿抜イベントを取りこぼしている、という挙動だ。
疑っているのは、内装に組み込んだビルトインUSB/HDMI接続ユニット。あれは本体のUSBポートを延長している中継ハーネスで、内部の引き回しだけで1.5〜2mある。そこに手持ちのケーブルが加わると、USB 2.0 の実用的な限界に近づく。マージンが薄い状態なら、「起動時のゆっくりした初期化なら通るが、後挿しの短い認識シーケンスでは失敗する」という今の症状と辻褄が合う。
次にやることは決まっている。
- ヘッドユニット本体側のUSB端子に直挿しして、起動後接続を試す
- 1m以下のデータ通信対応ケーブルに替える
- Pixel 側のデフォルトUSB設定を「ファイル転送」にしておく
- Android Auto の電池最適化を切る
当面の運用としては、先にケーブルをスマホに挿してからエンジンをかける。ヘッドユニット側は挿しっぱなしなので、乗り込む → スマホに挿す → 始動、の順にすれば確実に掴む。
まとめ
- PF9DA-JI-64 のアップデートは DAF9Z で探す
- ZIPは必ず解凍してから
UpdateフォルダをUSBの最上位に置く - Mac でマウントが EPERM で失敗したら、セキュリティソフトのデバイス制御を疑う
- そして何より、まず実機の「情報/更新」を開け
公開されているマニュアルやスペック表よりも、目の前の機械のほうが新しい。当たり前の話なのだが、机上で調べてから動くクセがついていると、こういう順番を間違える。
USBメモリは、そのうち何かの役に立つはずである。