Debrick Routers Using JTAG Cable
In this tutorial, I am going to show you how to debrick your router using DIYGADGET's dedicated JTAG cable for routers (solderless way).
Before you try to JTAG your router, we highly recommend you to try a few other steps before you JTAG your router.
Things need to try before you JTAG the router
Please read carefully on this article:
If you have tried everything before the section "Recovery by JTAG cable" and it still doesn't work, you can now proceed with the following tutorials on how to save your router by using DIYGADGET's JTAG cable.
You need a PC with parallel port. USB to parallel adapter will NOT work.
No USB port? no problem, use our USB JTAG:
Tutorial (debrick router using USB):
I think it is very important to introduce some router basics before we get started. Because we are going to work on these stuff later on to save your router.
You probably already heard of terms like, NVRAM, CFE, FLASH ect. So what are they?
NVRAM stands for nonvolatile RAM. It can hold its contents when the main power source is lost. You may even know this type of memory as static RAM (SRAM), Broadcom based router uses NVRAM to store the startup configuration file. Most bricked routers are caused by a wrong configuration file.
The kernel is the central component of router. Its responsibilities include managing the router's resources (the communication between hardware and software components).
A corrupted kernel can also brick a router. The kernel is stored in the onboard FLASH chip.
Common Firmware Environment (CFE)
CFE stands for Common Firmware Environment. The Broadcom Common Firmware Environment (CFE) is a collection of software modules for initialization and bootstrap of designs incorporating Broadcom MIPS64™ processors. CFE is used to bootstrap the OS.
On startup, CFE performs the following low-level initialization:
- Reset and ROM trap handler vectors
- CPU and FPU initialization
- L1 and L2 Cache initialization
- Multiprocessor initialization
- Memory controller initialization
- PCI and LDT bus configuration
- Environment variables
- Console device initialization
- Bootstrap device initialization
Corrupted CFE is an uncommon reason for a bricked router. But it could happen.
Using JTAG Cable to Repair Bricked Router
If you have read this far, it means the only way to debrick your router is by using a JTAG cable. Sorry to hear that! However, don't worry, the steps are really straightforward!
DIYGADGET's Router JTAG Cable
The is the schematic of the JTAG cable:
This is the JTAG pinout of the Linksys WRT54G(GS/GL) series routers:
nTRST 1 2 GND TDI 3 4 GND TDO 5 6 GND TMS 7 8 GND TCK 9 10 GND nSRST 11 12 GND
|5||1||TRST (Not Connected)|
The PCB Layout of DIYGADGET's Router JTAG Cable:
The internal construction of DIYGADGET's Router JTAG cable:
Disassemble WRT54G/GS/GL) Series Router
There are no screws on the Linksys WRT54G/GS/GL) Series Routers.
Unscrew the antennas from the back (you may need to slide back the antenna caps to unscrew the antennas):
There is no screws to hold the faceplate. Turn the unit upside down and place your hands between the feet on the side, then push on the blue feet with your thumbs, the faceplate and the back cover are off now:
Now the face plate is off, you can see the board now:
Locate the JTAG Pins/Pads on the Router
The WRT54G(GS/GL) series routers have the standard JTAG pads on the PCB, It's the JP2 on the pcb as shown in the following pictures:
The initial version of the utility is the very famous HairyDairyMaid Debrick utility. You can get it from here:
However, we recommend to use [TJTAG] program which includes the Newer Router Models.
- Download [TJTAG] program and unzip it to a temp directory on your harddrive.
- Copy the giveio.sys and loaddrv.exe to C:\windows\system32\drivers for XP or C:\winnt\system32\drivers for 2000.
- Double click loaddrv.exe in the system32 dir.
- Append the giveio.sys onto the path in the utility:
- Click the load button and then the start button, they should both confirm success. If this does not happen go no further, go back and fix this. You need to make sure this works first.
Leave the loaddrv.exe running.
Making The JTAG Connection
This is the exciting part of this tutorial. If your router (like the Linksys WRT54G series) already has the standard 12 pin JTAG pads on the PCB, you mostly like do NOT need to solder wires on your PCB! DIYGADGET provides solderless solution for these routers.
This is what you will receive in your purchase. In this package, you will receive a Router JTAG cable, a 12 PIN header and 6 solderless pins. The solderless pins are provided for solderless operation:
The 12 PIN header is for peoples who have the skills soldering on PCB. All you need to do is solder the 12 pin headers on the JTAG port of the router, and then connect the JTAG Cable's black header on the 12 pin header you just soldered on the pcb. Make sure pin 1 of the cable is connected to pin 1 on the board. The pin 1 of the cable can be identified by a little triangle on the black header. Pin 1 on the pcb is marked.
In this tutorial, I will show you how to make the connection using the solderless pins.
We only need 6 solderless pins for the connections because JTAG only uses 6 pins. From the schematic above, we know only the following pins on the 12 pin headers are used: 3, 5, 7, 9 and GND.
Let's carefully insert the solderless pins into the 12 header's 3, 5, 7, 9 and 6 (WRT54G/GS/GL's 2,4,6,8,10 are all grounds and they are all interconnected on the PCB. The wire 6 is the only GND wire of the header so make sure you insert a solderless pin in hole 6 not 2, 4, 8, 10 or 12):
(I also insert a pin into 1, it is optional)
Now, let's see how we make the connection. Put the spring loaded solderless pins on top of the JTAG pads, align the pins with the pads, make sure all 6 pins are connected to the corresponding pads. Give it a little pressure, you will feel the little resistance. The pins are spring loaded with crown headers, so if you give it a little pressure and it will 'clamp' to the pads and won't move at all. Try it!
Before we try to 'permanently' attach the pins to the pads, let's make sure other connections are finished.
- Connect the power adapter to the router's power input, but DO NOT attach the transformer to the wall outlet yet.
- Connect the network cable to one of the LAN port and another end of the network cable to your PC.
- Connect the DB25 side of the JTAG cable to your PC's parallel port:
- Carefully put the pins on top of the JTAG pads, then put a book or something heavy on top of the header, so the spring loaded pins will stay connected with the pads and you do not have to hold the headers any more. In the example, I used a digikey catalog on top of the header:
This is the whole setup:
Let's debrick your router!
- Attach the router's power adapter to the wall outlet.
- From the command prompt cd to your unzipped TJTAG's windows directory and run tjtagv2.exe to get a list of options.
- To check your cable, run command tjtagv2.exe -probeonly. It will automatically detect the CPU type (see pic below for an example of LINKSYS WRT54GS). If not then check your cable.
- Backup NVRAM (command tjtagv2.exe -backup:nvram):
- Backup CFE (command tjtagv2.exe -backup:cfe):
- Backup the whole flash (command tjtagv2.exe -backup:wholeflash):
- Try above steps at least 2 times, generate backups again, then use a binary comparison software to compares the backups, make sure they are exactly the same before you erase anything.
- Finally to erase your NVRAM (the usual cause of the problem) with command tjtagv2.exe -erase:nvram
- If that doesn't work, erase the kernel (firmware): tjtagv2.exe -erase:kernel, then reflash the kernel via TFTP. This is a very good tutorial on how to flash your router with TFTP: [TFTP Flash]
- If it still doesn't work, try to find a CFE for your router (make sure model/version matches) first. Here are two repositories of some router's CFE: [CFE collection project] and [CFE collection 2]
- The CFE bin files in the repository all have MAC addresses that DO NOT MATCH your hardware. Use the CFE editing tool "IMGTOOL_NVRAM" available from The [Bitsum Wiki] to set the et0macaddr and il0macaddr before uploading the CFE. et0macaddr is the address printed on the outside; il0macaddr is that same address, plus one. Example: If the printed address is 00:90:4d:83:00:01, then et0macaddr is 00:90:4d:83:00:01 and il0macaddr is 00:90:4d:83:00:02. These are HEX numbers, so HEX 09 plus one is 0A, not 10.
- Erase the CFE of your router and flash the working CFE back. tjtagv2.exe -erase:cfe will erase your router's CFE and tjtagv2.exe -flash:cfe will flash the CFE back to your router. Remember to use the modified CFE bin.
Non Linksys Routers
If your router doesn't have JTAG headers or pads, but if it has JTAG enabled, you can still debrick it using the above technique. However, it is very likely you will need to solder the wire on the board.
For a collection of the JTAG pinout of other routers, please take a look [Router JTAG pinouts].
You can cut the DIYGADGET's JTAG cable, solder wire 1, 6, 3, 5, 7 and 9 of the 12 pin flat cable to your router's TDI, GND, TDO, TMS, TCK respectively. You can check the schematic above for details. (Make sure use wire 6 of the 12 pin flat cable for ground. Wire 6 is the only GND line in the 12 pin flat cable, it connects to the DB25's 18-25).