RT-AC59Uを分解して修理した話
背景
- ある日突然ルータ(RT-AC59U)が使用不可能になった。
- 何度リセットを行っても復旧せず。電源ランプが点滅するだけ。管理画面にも入れないため、ログを見ることができず原因の切り分けが困難
- →デバッグポートがあるのでは?
- →あった!UARTで接続してログを見ちゃおう!!
- →デバッグポートがあるのでは?
行ったこと
- ASUS製のデュアルバンドWi-Fi無線ルータ「RT-AC59U」を分解
- 基板上のデバッグポート(UART)を使用可能にして解析
- ファームウェアの書き換え
必要な道具
- トルクスドライバ(T8)
- ヘラやギターのピックなどの薄くて硬いもの、あるいはマイナスドライバ
- はんだごて
- はんだ吸い取り機(あると非常に便利。なければはんだ吸い取り線とかでも。GNDとかかなり大変だけど。)
- ピンヘッダ(基板側にピンソケット、ブレッドボード用ジャンパ線で接続が楽かも)
- 適当なケーブル(片側にピンソケット、もう片側はピンヘッダにした。接続できればなんでもいい。)
- USB-シリアル変換モジュール(arduinoでも大丈夫だと思うが、モジュールを使ってPCに直接接続するのが楽だと思う)
- USB-シリアル変換モジュールに使用するUSBケーブル
- Windowsマシン(インターネットに接続しているもの)
Windows11 Home 64bitおよびWindows10 Pro 64bitでこの手順が有効なことを確認しています。ソフトウェアのダウンロードページを見る限りではWindowsであれば何でも大丈夫だと思います。
分解手順
- 本体裏側の滑り止めを4つ外す。簡単に取れる。
- 滑り止めの裏にトルクスネジが見えるようになるため、4つすべて外す。T8で外れた。中央シール裏にはネジは無い。
- ランプ側の上面カバーの隙間にマイナスドライバなどの工具を差し込む。今回はスマホ修理用のヘラの様な工具でてこの原理でこじ開けた。10か所ツメがあり、かなり硬いので注意。周囲にあるツメは無理やり外す以外の方法は思いつかなかった。
- 上の画像は開けた様子。MHFコネクタで4本のアンテナが接続されている。
- MHFケーブルをすべて外すと基板が簡単に分離できる。
余談
基板は半分ほどが黒いヒートシンク(?)で覆われている。基板の裏面から4か所、プラスネジ(Ph00あたりだったか?)で固定されている。これを外すとヒートシンクを取り外すことができる。ヒートシンクと内側のシールドは2枚の放熱シートでくっついている。無理に剝がすと破れるため注意(1敗)。
シールドははんだでがっちりと固定されているため、外すのは困難。ルータが壊れたら挑戦してみようと思う。
同メーカ製、別機種ではシール裏にvoidシールとネジが隠されているものがあるが、この機種にはなかった。今回は剝がしてもメリットはないと思う。
UARTを使用可能に
- この部分にUARTのデバッグポートを発見。シルクがあるため、テスタを当てて判別する必要はない。
- スルーホールの裏面がはんだで埋められているため、はんだごてとはんだ吸い取り機で除去。ピンヘッダを実装。
- 適当にケーブルを製作してUSB-シリアル変換モジュールに接続する。今回は秋月電子の「24ピンDIP-ICサイズ FT232RL
USB-シリアル変換モジュール」が転がっていたため、これを使用した。USB-シリアル変換モジュールはUSBケーブルでPCに接続した。
各ピンの接続先
ルータ | USB-シリアル変換モジュール |
---|---|
3.3V | 3v3 |
GND | GND |
TX | RXD |
RX | TXD |
肝心なUSB-シリアル変換モジュールの部分が写っていない......
ファームウェアの書き換え
- ルータの電源を投入。TeraTermなどで接続。ボーレートは115200だった。
- ログを眺めているとエラー発生。
ath_set_tuning_caps: read WLANCAL fail!!! (r = -1)
と表示され、Recuse Modeに入っていることが分かる。ファームウェアに問題があるっぽい。
U-Boot 1.1.4-g5820674d (May 29 2019 - 14:33:36)
RT-AC59U bootloader version: 1.0.0.5
apjet01 - JET 1.0DRAM:
sri
ath_ddr_initial_config(277): (ddr2 init)
ath_sys_frequency: cpu 775 ddr 650 ahb 258
Tap values = (0x12, 0x12, 0x12, 0x12)
128 MB
ASUS RT-AC59U gpio init : wps / reset pin
Flash Manuf Id 0xef, DeviceId0 0x40, DeviceId1 0x18
flash size 16MB, sector count = 256
Flash: 16 MB
Maximum malloc length: 128 KBytes
mem_malloc_start/brk/end: 0x87f98000/87f98000/87fc8000
*** Warning - bad CRC, using default environment
Power up PLL with outdiv = 0 then switch to 3
plat_dev_init: read 16384 bytes from offset 9fff1000 of WLANCAL fail! (r = -1)
In: serial
Out: serial
Err: serial
Net: ath_gmac_enet_initialize...
Fetching MAC Address from 0x87fee00c
ath_gmac_enet_initialize: reset mask:c02200
athr_mgmt_init ::done
JET ----> S17 PHY *
athrs17_reg_init: complete
SGMII in forced mode
athr_gmac_sgmii_setup SGMII done
: cfg1 0x80000000 cfg2 0x7114
eth0: 【念のため削除】
eth0 up
eth0
ath_set_tuning_caps: read WLANCAL fail!!! (r = -1)
Please choose the operation:
1: Load System code to SDRAM via TFTP.
2: Load System code then write to Flash via TFTP.
3: Boot System code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
0
3: Boot System code via Flash (default).
RT-AC59U bootloader version: 1.0.0.5
MAC Address: 【念のため削除】
## Checking 1st firmware at 9f060000 ...
Image Name:
Created: 2021-01-06 7:33:20 UTC
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 15698544 Bytes = 15 MB
Load Address: 80060000
Entry Point: 80060000
Verifying Checksum ... Bad Data CRC
Hello!! Enter Recuse Mode: (Check error)
eth0 link down
Force to _1000BASET and duplex
dup 1 speed 1000
switch prereq:0
tftpd start
Using eth0 device
Our IP address is:(192.168.1.1)
Wait for TFTP request...
tftpd open
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
- 原因に見当がついたところで、ファームウェアの書き直しをしてみる。ここから最新のファームウェアをダウンロード。今回はバージョン 3.0.0.4.382.52482をダウンロードした。同時にASUS Firmware Restoration version 2.1.0.3もダウンロードした。
- レスキューモードの使い方はここ
-
ASUS Firmware Restorationを解凍してインストール。今回は対象が自動的にレスキューモードに入っているため、そのままルータのLANポートとPCをLANケーブルで接続。
-
コントロールパネル→ネットワークとインターネット→ネットワークと共有センター→アダプターの設定の変更→「イーサネット」を右クリック→プロパティ
-
この状態にする。IPアドレスは「192.168.1.XXX」、サブネットマスクは255.255.255.0に設定。(先ほどのログに"Our IP address is:(192.168.1.1)"とあったので今回は192.168.1.1)
-
ASUS Firmware Restorationを起動、ダウンロードしたファームウェアを選択してアップロードする。これ以降は自動的に進むため放置。TeraTermを眺めていると面白い。
-
待っているとそのうち終了する。「システムをリカバリーしました。システムを再起動します。お待ちください」と表示されたら閉じるを押す。ルータが自動的に再起動する。
-
(作業完了後、IP設定を自動取得している場合は、「IPアドレスを自動的に取得する」と「DNSサーバーのアドレスを自動的に取得する」に戻す。)
-
書き込み完了!動作確認を行う。この時点で電源ランプの点滅は止まり、Wi-Fi 2.4GHZと5GHzのランプが点灯していた。
-
元の分解手順と逆の手順で戻す。ピンヘッダを取り外すかどうかはお任せします(通常のサイズのものならそのままで全く問題なかった)。ケーブルを直接はんだ付けした場合は切るかケースを加工して外側に引き出すか?
今後について
- UARTのデバッグポートが使えるため、何らかの方法でroot権限が取れないか試してみたい。
反省
- マニュアルに「5.2 Firmware Restoration(ファームウェアの復元)」という項目があり、さらっとレスキューモードについて言及されていることに後で気づいた。早く気づいて試していればよかった
- とは言うものの、ファームウェアが原因だと断定できなかったため、分解もやむを得なかった......?
- RT-AC59Uに使用可能なデバッグポートが残されていることを知れただけでも良かったと思う。(攻撃ポイントとして利用できるかは別として)