2015年3月16日月曜日

Buffalo WER-A54G54 の分解とフラッシュメモリのバックアップ

バッファロー WER-A54G54 を分解して、内部のプリント印刷基盤へシリアル・コンソールを接続できるように準備をしました。

分解は、WHR2-A54G54 や WHR3-AG54 と同様のため、問題なく分解ができました。とは言っても、いつプラスチックの部品が破損してしまうのか心配で、ハラハラ・ドキドキの作業でした。

筐体を分解して内部を見えるようにした WER-A54G54 です。

取り出したプリント印刷基盤の表面の様子です。右側に白いソケットが二つ並んでいるうち、向かって左側のソケットがシリアル・コンソールのものとなります。そして左下に JTAG の 14 ピンヘッダが見えます。

WER-A54G54 のプリント印刷基盤を取り出したところです。
シリアルコンソールのピンの様子です。間違え防止のため、Rx, Tx, GND, Vcc の記号を書き込んでおきました。
こちらは JTAG のピンの様子です。左下が 1 番ピンでした。

そして裏側を観察すると、なんだか妙に汚れています。アルコールでしっかりと汚れを落としておきました。

WER-A54G54 のプリント印刷基盤の裏側の様子です。
何かの汚れが全面にわたって付着していました。

JTAG のピンヘッダが用意されていることもあり、DD-WRT のファームウェアのインストールの前にフラッシュメモリの内容をバックアップしてみることとしました。

WHR2-A54G54 や WHR3-AG54 でも使用した自作のプリンターポートを利用する JTAG ケーブルを接続しました。そして制御ソフトウェアの TJTAG でアクセスしてみました。情報が読み取れませんでした。今までフラッシュメモリのバックアップを取得したのは Broadcom 社のチップの無線LANルータでしたが、今回は Atheros 社のチップが使用されているものなので、上手くアクセスが出来ないのでしょうか?

JTAG ケーブルを接続してフラッシュメモリをバックアップしているところです。
パソコン側は Puppy Linux 5.7.1 JP を使用しています。

いろいろとネット上を検索してみると、いくつか判明したことがありました。

まずハードウェア的には WER-A54G54 は WHR-HP-AG108 と互換性があることでした。
このために DD-WRT のファームウェアは WHR-HP-AG108 と同じものが使用出来るそうです。
dd-wrt.com WHR-HP-AG108
http://www.dd-wrt.com/wiki/index.php/WHR-HP-AG108
Howto install OpenWRT Kamikaze on a Fonera
http://www.zoobab.com/fonera

そして JTAG 用のピンヘッダについては、標準的な 14 ピンの JTAG と同じレイアウトになっているそうです。そして大切なことは、1 番ピン(TRST)と 14 番ピン(Vcc)の間を 100 オームの抵抗器で接続(1 番ピンを 14 番ピンの電源へプルアップ)することでした。製作した JTAG ケーブルには、この部分が無かったため、動作しないことが判りました。


急遽 100 オームの抵抗器を接続して、動作確認をしてみました。すると TJTAG でちゃんと無線LANルータの情報を読み取ることができました。ただ、今までと違って処理が終了しても、自動的に停止せず、Ctrl + C で強制終了させる必要がありました。これは 1 番ピンのプルアップの影響なのでしょうか?
 # ./tjtag3 -probeonly

==============================================
 EJTAG Debrick Utility v3.0.1 Tornado-MOD
==============================================

Probing bus ... Done

Instruction Length set to 5

CPU Chip ID: 00000000000000000000000000000001 (00000001)
*** Found a Atheros AR531X/231X CPU chip ***

    - EJTAG IMPCODE ....... : 01000000010000000100000000000000 (40404000)
    - EJTAG Version ....... : 2.6
    - EJTAG DMA Support ... : No
    - EJTAG Implementation flags: R4k ASID_8 NoDMA MIPS32

Issuing Processor / Peripheral Reset ... Done
Enabling Memory Writes ... Skipped
Halting Processor ... ... Done
Clearing Watchdog ... Done

Enabling Atheros Flash Read/Write ... Done

.RE-Probing Atheros processor....
Probing Flash at (Flash Window: 0x1fc00000) ...
Done

Flash Vendor ID: 00000000000000000000000011000010 (000000C2)
Flash Device ID: 00000000000000000010001010100111 (000022A7)
*** Found a MX29LV320T 2Mx16 TopB      (4MB) Flash Chip ***

    - Flash Chip Window Start .... : 1fc00000
    - Flash Chip Window Length ... : 00400000
    - Selected Area Start ........ : 00000000
    - Selected Area Length ....... : 00000000



 *** REQUESTED OPERATION IS COMPLETE ***

Resuming Processor ...

^C
#

JTAG が動作することを確認したので、フラッシュメモリのバックアップを行うこととしました。

まずは CFE の部分です。
# ./tjtag3 -backup:cfe

何と!読み出し動作が非常に遅いのです!まるで昔のパソコン通信時代に 9600 bps のモデムで通信していたかのように、読み出すデータが目で追えるのです(爆笑)。256KB ほどの CFE 部分を読み出すのにおよそ 800 秒(13 分強)もの時間が掛かってしまいました。どうも DMA アクセスが出来ないことが原因のようです。

あまりの遅さにどこか問題があるのではないかと、読み出し用のパソコンを再起動させてみましたが、結果は変わりませんでした。

気を取り直して、今度はフラッシュメモリ全体をバックアップしました。全体で 4MB のフラッシュメモリなので、256KB の 13分ということは比例計算で 256 分(4.3 時間)ということになります。

実際にフラッシュメモリ全体をバックアップしてみました。
# ./tjtag3 -backup:wholeflash

バックアップ時間は 12,426 秒(207 分、3.5 時間)となりました。若干予想より早かったみたいです。しかし、これを二回バックアップして、md5sum のハッシュを採り、比較して同じ値となっていることを確認しました。放置しておくだけなのですが、度々進行状況を確認していることもあり、気が休まりませんでした。

フラッシュメモリをバックアップ中の動作状況です。
右上に JTAG ケーブルの中間にある接続部分が見えますが、追加で取り付けた抵抗器も見えます。なんとかきっちりとした加工を施さないと事故になりそうです。

さて、このフラッシュメモリのバックアップの間に、いつものように筐体のプラスチック部品を水洗いしました。レンジ周り用の強力アルカリ洗剤でしっかりと洗いました。(注意:電子パーツをアルカリ系洗剤で洗浄するのは厳禁です。洗浄可能なのは、プラスチック部品のみです。)

アルカリ系洗剤で洗浄中の様子です。
シャワーで洗剤を綺麗に洗い流しました。

これでようやく DD-WRT のインストールが行える状況となりました。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。