Android Auto の接続がどうにも不安定なので、「ファームウェアの更新でも来てるんじゃないか」と思い立った。

結論から言うと、更新は不要だった。すでに最新版が入っていた。そこに至るまでに、USBメモリを引っ張り出し、フォーマットに失敗し、セキュリティソフトと格闘し、最終的に「そもそも Wi-Fi で更新できる機種だった」ことが判明する、という遠回りをした。

同じ轍を踏む人がいるかもしれないので、順を追って書いておく。

搭載しているのは PF9DA-JI-64

まず型番の確認から。うちのジムニーノマドに入っているのは、アルパインの9型ディスプレイオーディオ PF9DA-JI-64

ここが最初の落とし穴で、この型番でアップデートプログラムを探しても見つからない。PF9DA-JI-64 は「本体 + ジムニー専用パネル・取付キット」のセット品番で、本体そのものの型番は DAF9Z だからだ。アルパインのダウンロードページも DAF9Z で分類されている。

ちなみにこれは地図データを内蔵したカーナビではなく、CarPlay / Android Auto でスマホの画面を映すディスプレイオーディオ。ナビ機能はスマホ側に依存している。だから接続が不安定だと、そのまま「ナビが使えない」に直結する。

公式の更新手順は USB メモリ

アルパインの案内を読むと、更新手順はこうなっている。

  1. PC でアップデートプログラム(1GB超)をダウンロード
  2. ZIPを解凍する(ここを飛ばすと本体が認識しない)
  3. 展開してできる Update フォルダを、USBメモリの最上位階層にコピー
  4. 車で「設定 → システム → 情報/更新 → 更新」

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 の実用的な限界に近づく。マージンが薄い状態なら、「起動時のゆっくりした初期化なら通るが、後挿しの短い認識シーケンスでは失敗する」という今の症状と辻褄が合う。

次にやることは決まっている。

  1. ヘッドユニット本体側のUSB端子に直挿しして、起動後接続を試す
  2. 1m以下のデータ通信対応ケーブルに替える
  3. Pixel 側のデフォルトUSB設定を「ファイル転送」にしておく
  4. Android Auto の電池最適化を切る

当面の運用としては、先にケーブルをスマホに挿してからエンジンをかける。ヘッドユニット側は挿しっぱなしなので、乗り込む → スマホに挿す → 始動、の順にすれば確実に掴む。

まとめ

  • PF9DA-JI-64 のアップデートは DAF9Z で探す
  • ZIPは必ず解凍してから Update フォルダをUSBの最上位に置く
  • Mac でマウントが EPERM で失敗したら、セキュリティソフトのデバイス制御を疑う
  • そして何より、まず実機の「情報/更新」を開け

公開されているマニュアルやスペック表よりも、目の前の機械のほうが新しい。当たり前の話なのだが、机上で調べてから動くクセがついていると、こういう順番を間違える。

USBメモリは、そのうち何かの役に立つはずである。