2015年4月3日金曜日

Linksys E3000 へ JTAG 端子を設置

昨日までにシリアルコンソールで CFE そのもののブートが出来ていないことが判明しました。そこで JTAG により CFE を書き込むための JTAG 端子を設けました。

ネット上を検索すると、E3000 には二箇所の JTAG 端子(JB1, JB3)があることが判明しました。JB1 の方はヘッダーパットと呼ばれるプローブの針で接触させるものです。そして JB3 は、いわゆるピンヘッダを取り付けるためのスルーホール(10 ピン)となっていました。この JB3 の方へ、ピンヘッダを取り付けて、JTAG ケーブルを接続するようにしました。
(当初は JB1 の端子の方しか認識していなかったので、いろいろ準備が必要だと思っていたので、本日の作業は出来ないと思っていました。)
参考 URL
DD-WRT Forum -- Help unbricking aLinksys E3000
http://www.dd-wrt.com/forum/viewtopic.php?t=78407&postdays=0&postorder=asc&start=30&sid=ff112e29919b357c610aca7be4878057

DD-WRT Forum -- 610 V2 - E3000 jtag
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=75073

JB3 のスルーホールは、ハンダで埋められている状態であったので、このハンダを取り除くことから始めました。そして 10 ピンのピンヘッダをハンダ付けしました。

JB3 の JTAG 用ランドの様子です。

JB3 is as follows
nTRST 1 2 GND
  TDI 3 4 GND
  TDO 5 6 GND
  TMS 7 8 GND
  TCK 9 10 GND
JTAG 用にピンヘッダを取り付けたところです。
JTAG 用のピンヘッダが設置出来たところで、 JTAG ケーブルを接続して、動作確認をしてみました。やはり動作しませんでした。ネット上の情報では、RC27 〜 RC31 までの 5 個の抵抗器が欠品しているそうで、ここを接続することで JTAG が使えるようになるという情報でした。


この RC27 〜 RC31 までの 5 個の抵抗器は、すぐ傍にあるシールドケースの中に存在していました。シールドケースの上部の爪二箇所をまっすぐに直して、蓋を引き上げるのですが、内部にあるチップの熱を逃がすための放熱ラバーとがっちりと固着していて、なかなか蓋を開けることができませんでした。

JTAG 用の抵抗器(RC27 〜 RC31)のパターンが存在するシールドケースの中の様子です。

まず最初にチップ抵抗器をハンダ付けしようと格闘しました。チップ抵抗器は、先日電源を間違って装着したことで破損してしまった WHR-AMG54 のプリント印刷基盤から取り外しました。抵抗値は不明です。そして出来るだけ小さなものを選んでみましたが、写真のようにチップ抵抗器の方がかなり大きいのです。

RC30 のところへチップ抵抗器をハンダ付けしてみましたが、チップ抵抗器の大きさが全然大きい状態でした。

チップ抵抗器を取り付けることを諦めて、ハンダでブリッジをして接続しようと試みましたが、今度はハンダブリッジをしてくれないのです。いつもは簡単にブリッジしてしまうような場所なのですが、何故か上手く行きません。

そこでリード線の芯線を使って接続することにしました。時間は掛かりましたが、無事5箇所のランドを接続することができました。これら一連のハンダ付け作業は、ルーペを使いながらの作業でしたので、本当に目が疲れてしまいました(笑)。


これで JTAG ケーブルを接続してみると、JTAG によるアクセスができているようでした。

# ./tjtag3 -probeonly

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

Probing bus ... Done

Instruction Length set to 8

CPU Chip ID: 00010100011100010110000101111111 (1471617F)
*** Found a Broadcom BCM4716 Rev 1 CPU chip ***

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

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

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

*** Unknown or NO Flash Chip Detected ***

 *** REQUESTED OPERATION IS COMPLETE ***


JTAG 用のソフトウェアには、Puppy Linux で使用可能な Linux32 版の TJTAG 3.0.1 を使用しました。フラッシュメモリ(MX29LV640EBTI-70G)を自分で認識出来ないようで、オプションとして /fc:46 を設定しました。フラッシュメモリの番号は、バージョンによって異なりますので、使用するバージョンのヘルプで確認をしてから設定をしてください。

ここまでくれば、後は CFE 部分を書き込んでしまえばなんとかなる!・・・と思っていました。
Linksys E3000 用の CFE.BIN
DD-WRT Forum -- Cfe collection project -See Pg 9 for FTP server info
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=666073

# ./tjtag3 -flash:cfe /fc:46

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

Probing bus ... Done

Instruction Length set to 8

CPU Chip ID: 00010100011100010110000101111111 (1471617F)
*** Found a Broadcom BCM4716 Rev 1 CPU chip ***

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

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

Manual Flash Selection ... Done

Flash Vendor ID: 00000000000000000000000011000010 (000000C2)
Flash Device ID: 00000000000000000010001011001011 (000022CB)
*** Manually Selected a MX29LV640B 4Mx16 BotB     (16MB) Flash Chip ***

    - Flash Chip Window Start .... : 1c000000
    - Flash Chip Window Length ... : 01000000
    - Selected Area Start ........ : 1f000000
    - Selected Area Length ....... : 00040000

*** You Selected to Flash the CFE.BIN ***

=========================
Flashing Routine Started
=========================
Total Blocks to Erase: 0


Loading CFE.BIN to Flash Memory...
[  0% Flashed]   1f000000: 10000817 00000000 00000000 00000000
[  0% Flashed]   1f000010: 00000000 00000000 00000000 00000000
         ↓

         ↓ 
[  0% Flashed]   1f0001e0: 00000000 00000000 00000000 00000000
[  0% Flashed]   1f0001f0: 00000000 00000000 00000000 00000000
・・・ここで中断してしまいます!・・・

しかし JTAG で CFE を書き込んでくれないのです。書き込み始めてすぐに、0x1f0001ff のところで、何故か書き込みが停止してしまうのです。 /noreset や /noemw , /nocwd , /nobreak などのオプションを設定してみましたが、どれもダメでした。

現在は、原因が解らず困っている状況です(涙)。

今後、書き込めない理由を探してみたいと思っています。

1 件のコメント:

  1. Hi, Sir:
    Could you please show me your jtag cable? I have one works on linksys wrt54g but on e3000, any advice would be appreciated

    Thanks
    Joe

    返信削除

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