2015年8月29日土曜日

Buffalo WBR-G54 のフラッシュメモリのバックアップ

分解掃除も終わり、JTAG 用のピンヘッダを取り付けた WBR-G54 のフラッシュメモリのバックアップを行いました。

新事実(無線LANルータの職業人や愛好家にとっては常識なのかも・・・)をいくつか発見して、どうも正しくフラッシュメモリの内容をバックアップ出来た模様です。しかしまだ出来たとは断言できません。

以下は実際に行った作業と考察の記録です。

WIGGLER ケーブルで通常のバックアップ

今まで通りにバッファタイプの WIGGLER ケーブルにて WBR-G54 のフラッシュメモリの CFE の部分だけをバックアップしてみました。

WIGGLER ケーブルでフラッシュメモリのバックアップを行なっているところです。

JTAG の操作は、操作するパソコンに JTAG のコマンドをリターンキーを押すだけの状態にしておいて、ボードの電源を投入すると同時にパソコンのリターンキーを押して、JTAG コマンドを実行させます。JTAG 動作が直ぐに停止するなど、上手く JTAG コマンドが実行出来なかったときには、繰り返して同様の操作を繰り返します。
------- プローブ動作 ----------
# ./tjtag3 -probeonly /cable:wiggler

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

Detected IR chain length = 5
Number of device(s) = 1

IDCODE for device 1 is 0x0471017F

Probing bus ... Done

Instruction Length set to 5

CPU Chip ID: 00000100011100010000000101111111 (0471017F)
*** Found a Broadcom BCM4702 Rev 1 CPU chip ***

    - EJTAG IMPCODE ....... : 00000000100000000000100100001000 (00800908)
    - EJTAG Version ....... : 1 or 2.0
    - EJTAG DMA Support ... : Yes
    - EJTAG Implementation flags: R4k MIPS32

Intial value of Control register is 0000000C
Intial value of status register is  000000F7
11110111 (000000F7)

Status bit 7 Busy Inverted pin 11 = 0
Status bit 6 *Ack          pin 10 = 1
Status bit 5 Paper-out     pin 12 = 1
Status bit 4 Select        pin 13 = 1
Status bit 3 *Error        pin 15 = 0
* means low = true, e.g., *Error

VCC connected
values of Control register after init 0x0000000C
value of status register after init   0x000000F7
system reset complete

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


Chip ID 0
Chip Rev 0
Package Options 0
Number of Cores 0
Core Revision 15
Core Type 0
Core Vendor ID 0
Flash Type 0
Flash Type = FLASH_NONE
Flash bus is 8 bits
Dest is bits 0
DMA Read Addr = 18000128  Data = (00000000)ERROR ON READ
Flash is byteswapped 0
Endian Type is LE 0
PLL Type 00000000
Enter Flash Probe

Probing Flash at (Flash Window: 0x1fc00000) ...
Done

Flash Vendor ID: 00000000000000000000000000100000 (00000020)
Flash Device ID: 00000000000000000010001011001010 (000022CA)
*** Found a ST 29w320DT 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 ***

四回フラッシュメモリのバックアップを行なってみましたが、二回だけ同じデータとなりました。WLA-G54 の時と同じような状況です。
8676a327a6e4285933e44212924642fe  CFE.BIN.SAVED_20150829_153416
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_152828
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_153913
bea3764ae315b955c7c91e874bf39b8a  CFE.BIN.SAVED_20150829_154836

抵抗値を大きくした DLC5 ケーブルでバックアップ

抵抗器で構成された DLC5 ケーブルでバックアップも試みました。しかし今まで DLC5 ケーブルに改造を加えました。今までは 100Ω の抵抗器を使用していましたが、TDI, TMS, TCK の 100Ω の抵抗器へ直列に 2.2KΩ の抵抗器を接続して 2.3KΩ の抵抗器として使用してみました。
このような処置をした理由は、パソコンのプリンタ・ポートから出力される 5 ボルトの電圧が 100Ω の抵抗器を経由して BCM4702 へ印加されているとき、BCM4702 の入力端子を保護するためのクリッパーダイオードを経由して BCM4702 の電源(3.3 ボルト? か 1.8 ボルト?)に余分な電流が流れこんでしまうことになります。この電流によって、もしかして BCM4702 の電源が揺れる現象が発生した場合、内部動作に異常を引き起こす可能性がありました。そこでこの電流を少なくするために抵抗値を大きくしてみました。あまり大きな値にすると、ボード側のプルアップ抵抗器の影響でロー・レベルに十分に下がり切らない可能性や波形が鈍るなどの副作用もあります。とりあえず手持ちにあった 2.2KΩ の抵抗器を接続してみました。

DLC5 タイプのケーブルへ 2.2KΩ の抵抗器を接続したところです。

フラッシュメモリのバックアップの値の MD5 のハッシュ値を比較したところ、やはりバラバラでした。
d85cdcdd07437be8b0e7bf62b40fd48e  CFE.BIN.SAVED_20150829_165250
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_165721
7777d35292eb40162d38bd5df1272f31  CFE.BIN.SAVED_20150829_170130
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_171108

JTAG モードへ移行したサイン?

ここで一つ発見しました。フラッシュメモリをバックアップしている途中、LED1 と LED2 の赤いランプが四回点滅を繰り返しては、少し休んで再び四回点滅することを繰り返しているのです。これが JTAG モードへ移行していることのサインである可能性がありました。
[2015-08-30 追記]
この四回の赤い LED の点滅は、無線LANカードがないことを警告するもののようです。JTAG ケーブルを接続しないで、写真のように無線LANカードを取り外した状態で起動させると同様の動作をします。このことから、正常に JTAG でフラッシュメモリのバックアップが出来たときには、ファームウェアが動作しているようです。

JTAG でフラッシュメモリをバックアップしている途中、赤い LED 二個が四回点滅することを繰り返していました。

TDO 用にトランジスタ・バッファを追加

上記の TDI, TMS, TCK へ 2.2KΩ の抵抗器を追加したDLC5 タイプのケーブルへトランジスタを二個組み合わせたバッファ回路を追加しました。

今回追加した二個のトランジスタによるバッファ回路です。
図面が手書きでごめんなさい。
昔、家電製品から取り出していたトランジスタ(2SC458)を流用しました。
今では見かけることのない台形パッケージの製品です。
二個のトランジスタで構成したバッファ回路です。

この目的は、スレッショルド・レベルをシリコントランジスタの 0.6 ボルトとすることで、TDO 信号が少しでも上昇するとハイ・レベルと見做してしまうものです。BCM4702 の電源は 3.3 ボルトの他に 1.8 ボルトも使用されているということで、TDO の信号のハイ・レベルがパソコンのプリンタポートで知覚できる 2.5 ボルトのスレッショルド・レベルを下回っている可能性があります。そこでこのトランジスタのバッファ回路を使って、かならず 3.3 ボルトまで上昇するようにしてみました。ただこのトランジスタのバッファ回路によって信号の遅延が発生するなどの副作用も考えらますが、とりあえず試しに行なってみました。

トランジスタのバッファ回路付きの DLC5 ケーブルでフラッシュメモリのバックアップを行なっているところです。

フラッシュメモリの CFE のバックアップは大成功です。四回バックアップを行なって三回同じデータが得られました。今回のバックアップで特に注意したことは、最初のバックアップを行った後、ボードの電源を切らずにそのままバックアップを繰り返したことです。上記の JTAG モードを示していると思われる LED の点滅を確認をしながらバックアップを継続した結果です。どうも JTAG モードに入った直後は、データが乱れる可能性があるようです。
bea3764ae315b955c7c91e874bf39b8a  CFE.BIN.SAVED_20150829_181028
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_181409
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_181804
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_182218
-- 青色のハッシュ値のデータが正しいデータのようです。--

フラッシュメモリ全体をバックアップ

そこでフラッシュメモリ全体を JTAG モードに入った状態からバックアップを開始してみました。4MB のフラッシュメモリ全体をバックアップするのに一時間ほど時間が必要です。何度も繰り返すことができませんが、何とか三回繰り返しました。三つのデータとも同じハッシュ値でした。
7ac19ccfe041e015d66b7aef862e75ef  WHOLEFLASH.BIN.SAVED_20150829_184641
7ac19ccfe041e015d66b7aef862e75ef  WHOLEFLASH.BIN.SAVED_20150829_194705
7ac19ccfe041e015d66b7aef862e75ef  WHOLEFLASH.BIN.SAVED_20150829_210051

再度通常の DLC5 タイプのケーブルでバックアップ

JTAG モードへの移行で正常にバックアップ出来るとなると、改造した DLC5 ケーブルではなく、通常の DLC5 ケーブルではどうなるか?・・・を再度 CFE をバックアップして確認してみました。なんと!四回測定しましたが、同じハッシュ値となり、安定してバックアップが出来ていました。
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_221641
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_221301
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_222156
99efda3f23780918712232d3942ceb36  CFE.BIN.SAVED_20150829_222537

結果

JTAG モードに移行したことを確認して、フラッシュメモリのバックアップを行う必要があります。
通常の DLC5 タイプのケーブルでバックアップができました。おそらく JTAG モードへ正しく移行した後であれば WIGGLER ケーブルでも動作するものと思われます。

手順

以下の手順で正しくバックアップが出来ました。

1. ボードの電源投入と同時にプローブ動作をさせる。
   -- これで JTAG モードへ移行します。[2015-08-30 削除]
2. しばらくすると二個の赤い LED が四回点滅することを繰り返すのを確認する。
3. 念の為、再度プローブ動作をさせる。
4. バックアップ動作をさせる。
   -- 動作中も赤い LED が四回点滅していれば正常にバックアップをしている。
   -- 途中で赤い LED が四回点滅がしなくなった場合、異常の可能性があります。

その他注意点として、JTAG を動作させた直後の "Init PrAcc ... Skipped" のところで一時的に停止して再開するようです。正しく JTAG モードになっていないときには、ここでフリーズします。この場合、ボードの電源を切って、最初からやり直しとなります。

0 件のコメント:

コメントを投稿

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