Back from the Dead: How I Revived a Fried Espruino Board

Performing a Delicate SMD Chip Transplant, Successfully!

Yesterday, the positive alligator clip of my power supply accidentally touched a Pixl.JS board, delivering 12 volts directly into one of the GPIO pins of the board. As you can probably guess, the poor board, which is only designed to handle 3.3V, did not survive the accident. It was very frustrating. This is the story of how I fixed the fried board.

Espruino and the Pixl.js Board

Espruino is an embedded JavaScript platform, allowing you to program various microcontrollers using the same language that powers that Web. It powered my In-Real Life Chrome T-Rex game, and more recently also the homemade IoT Air Pressure sensor that I built.

Pixl.js is one of the boards sold by Espruino. It is powered by the nRF52832 microcontroller, which includes Bluetooth Low Energy radio and has incredibly low power consumption. It is the same microcontroller I used when I designed the Angular beacons.

The Pixl.js also carries a small LCD screen and 4 button small push buttons and is compatible with many Arduino shields, making it incredible useful for applications where a compact device with a display, Bluetooth connectivity and low power consumption is required. It is my recommended board for Web developers that are making their first steps in the hardware world.

My fried Pixl.js board :/

Why I Didn’t Just Buy a New Board? 💰

A new Pixl.js board sells for $45, and additional $15 for shipping to Israel, so 60$ in total. It takes up to 2 weeks for the package to arrive, and then I also have to go to the post office to collect it. So it is not very cheap, and also involves waiting for a long time.

My friends and I are trying to get our Trumpet Playing Robot ready for the Chrome Dev Summit next month, and we planned on using this board. So waiting for two weeks for a replacement wasn’t something we were happy to do. Also, the board was already dead, so I didn’t have much too lose anyway.

Analyzing the Dead Board

A moment after the 12V accident happened (and after quickly disconnecting my power supply), I touched the board. The Bluetooth radio module was hot. This module is where the nRF52832 chip sits, along with several other components that connect to the Antenna and are part of the radio transmission circuity.

Since I touched the 12 volts to one of the GPIO pins of the board, and the microcontroller was pretty hot right after this happened, I was pretty certain that it was dead. I could easily confirm it by setting my power supply to 3.3 volts and connecting it to the power pins of the board — the board was short circuiting.

Dead Pixl.js board waiting for a transplant

Let’s Fix It!

I started by checking out the specs for Pixl.js and found out it uses the MDBT42Q Bluetooth Module. This module is sold by a Taiwanese company called Raytec. Getting a new module would certainly be cheaper than getting a new Pixl.js board, but I would also mean waiting for several weeks.

However, I did have a different Bluetooth module that contained the same nRF52832 chip. I got it a few years ago after backing a Kickstarter project. Apparently, backing these projects can sometimes be useful!

The two Bluetooth modules were not pin compatible, so I couldn’t just switch them. I had a different plan though: trying to switch the microcontroller chips insides the module. This was the time to try performing a transplant surgery.

Setting Up For The Surgery

I started by removing the Bluetooth module from the Pixl.js board using a hot air gun set to 260°C and a pair of tweezers:

I usually prefer going with the hot air from the other side of the board (so I won’t accidentally blow away small components or melt plastic parts), but the LCD screen covered the back of the board, so I carefully went from top this time.

and… it’s gone

Next, I mounted the Bluetooth module I just pulled of the board in order to remove the metal cover that it had on top:

With the cover removed, I could easily spot the nRF52832 chip:

The MDBT42Q module, naked

Next, I removed the presumably dead chip from the module:

This time the hot air gun went below

At this point, I was ready to begin the transplanting process!

Transplanting

I mounted the other Bluetooth module (the one I got from Kickstarter) and removed its metal cover:

which revealed it had the same chip, in the same package. The nRF52832 comes in two variations, QFN48 and WCLSP, and I was worried the other Bluetooth module might utilize a different package for the chip.

Same Chip Different Module

I started the actual transplant:

Removing the healthy chip from the module
Inspecting the chip

At this point, I noticed that some of the pads in the original Bluetooth module (the “recipient”) had bridges / solder balls:

I used my soldering iron (with the finest tip) to remove the excessive solder from this pads:

Solder bridges gone — ready to receive transplant!

I applied some liquid flux and put the chip onto the recipient board:

Ready to be soldered!

and let hot air gun do its magic:

The magic happens around 00:16

However, visually inspecting the result showed that two pins (on the top left corner) were still left disconnected:

So I went for another round with the hot air gun, gently pushing down on the chip with my tweezers. This fixed the issue and further visual inspection didn’t reveal any issues.

It was time to put back the metal cover onto the module and put it back into the Pixl.js board:

And run another round of hot air while gently pushing the module down with the tweezers:

Testing the Resurrected Board

The chip on the BLE module that I used didn’t have Espruino installed. In fact, I was not even sure it had some code running on it at all. In order to be able to upload Espruino to it, I cloned the Espruino repository and built the Espruino Bootloader by running the following command:

make BOARD=PIXLJS RELEASE=1 BOOTLOADER=1

Then, I connected my JLink debugger to the board using some improvised pogo-pins adapter:

I tried to program it using OpenOCD:

openocd -d2 -f interface/jlink.cfg -c "transport select swd" -f target/nrf52.cfg -c "init; halt; nrf5 mass_erase; program  bootloader_espruino_1v99.261_pixljs.hex; reset; exit"

Unfortunately, I got an error message on the first try (and also the second one and the third one):

I kept trying and after about a minute of so of tinkering with the pogo pins pressure, I suddenly got it to work and program the chip!

This was very exciting to us! It seemed like the hard work paid off and the transplant was successful. Ariella Eliassaf then plugged a USB cable into the board while pressing one of the buttons, which brought up the boot loader:

Seeing the output on the screen was so satisfying!

Finally, I uploaded the Espruino firmware and the board was ready to be used again!

This Seemed Like a Long Shot… It Wasn’t!

When I fried the board, I was really frustrated — I thought I’d have to pay for a new one and wait for two weeks to get it. I looked through my inventory and found the Bluetooth module that carried the same chip. Transplanting the chip seemed like a long shot for me, and I was pretty certain it was going to fail.

I am so happy I gave it a chance — the entire process took a little more than one hour (and was probably even quicker if Ariella and I didn’t spent time documenting it), and now the board is working again. Plus — I have this story to share with you!

So even if your board died don’t give up yet — take a chance, you could be able to fix it!


This is the 11th post in my Postober challenge — writing something new every single day throughout October.

I will tweet whenever I publish a new post, promise! ✍