Recover/unbrick any sw Bricked Zigbee XBee, with Arduino only (no PCB explorer)

 Ok, so first of all, some things you'll need, for sure:

  1. Windows PC. MAC or Linux won't cut it, because:
  2. You need a legacy version (windows only) of X-CTU program (current one is, AND NOT THE LATEST ONE!!!!
  3. An Arduino (pretty much any model, I used Uno)
  4. Breadboard and wires
  5. Also make sure you have the XBEE S (2 in this case) drivers from


So, this method works with ANY XBee module that is not Hardware bricked, i.e. that was destroyed due to some high voltage or misuse of some kind. This tutorial is meant for people that, just like me, put the wrong version of a given firmware, and also destroyed the bootloader of XBee (even if you didn't, you can use this method), and can therefore do ABSOLUTELY NOTHING with it, not restoring, not reading it back, NOTHING.


A pre-requisite for this unbricking, is that you need to completely wipe out all the code inside the Arduino. It is mandatory, because you will use the Tx/Rx pins from arduino to flash the XBee module, and therefore need to clear all the noise from these two pins that might be generated by any existent programming in the arduino. Use the Arduino SDK, and upload the following code to do just that:


Now, to the configuration. About the connections that you need to do:

This is the pinout of XBee module. You need to program them like:

Pin 1    ------    Vcc   ------   3.3v

Pin 5    ------    Reset  ----   (leave this wire hanging loose, for later)

Pin 10   ------   GND   ------   0v

Pin 12   ------    CTS   ------   3.3v

Pin 14   ------    DTR   ------   3.3v

Pin 16   ------    RTS   ------   3.3v

Pin 2    ------    Dout   ------   Tx

Pin 3    ------    Din     ------   Rx


Im not sure about the order of Tx/Rx pins, as I'm using the arduino shield to interface with the module. Figure out in your case. The looks are:


You need to use the arduino to grab the voltage 3.3v (NEVER THE 5v, otherwise you might damage the XBee module) and ground, and transfer them to the board. As you will have several wires pluging into either voltage or ground, you need a breadboard for that. The other couple of wires you see in this board are the Tx and Rx, the wires being used to communicate with the actual XBee board to upload the new firmware. Everything else, you plug into the breadboard (You can also see a rubber band in the pic. that is just to hold the wires without having to solder them). In this picture I forgot to plug the Pin 1 and Pin 10 (Vcc and GND), I've plugged them after the picture ;)


After all this wiring, you need to run X-CTU legacy version:


Choose the firmware version you want, but I recommen you any with "AT version", and not API


Unlike what it was told in many other sources for the baudrate (some say 115200, others 38400, 19200,....), it doesn't matter which one you select in the PC settings' tab. why? it will fail (remember, no bootloader to read). And as soon as you write the firmware, the baudrate will automatically change itself to 9600. Therefore, use this one from the start. DO NOT TOUCH ANY OTHER OPTION. All is good. Switch tab to "Modem Configuration".

This version is so important, and no other and newer version will suit the tast, because this version has a unique treat, that is the option "Always update firmware" you see here. Tick that, select the firmware YOU KNOW WILL WORK (the firmware that was there before you screwing things up), and hit write:



As you can see, it writes at 9600. IT WRITES! YEEEEEAHHHH!

This is one of the firmwares that works for my XBee Series 2. In case of doubt, please consult this page to assess which firmware family you CAN and CAN'T use:


From now on, you can double check if the module is unbricked, by trying to read it again. 

Published by fxsf às 23:07