EtherDue v1.0 boards may be affected by the following bug:
On power-on the board may not start the programmed sketch properly. The "L" LED on the board stays on, and the sketch does not run. Pressing "reset" will run the programmed sketch correctly.
What causes this?
The cause is a combination of factors, including what appears to be undocumented behaviour from the onboard microcontroller. There are some more technical details posted here on the forum.
When affected by the bug the EtherDue is actually starting up from its internal bootloader and waiting for a new program to be uploaded.
How to tell if my board is affected?
First, check the version number written on the back of the EtherDue is v1.0 as shown:
Second, power off the EtherDue for at least 10 seconds (this step is important), then apply power as usual by plugging in either USB or DC In. If the sketch starts as expected, your board is likely not affected. If the sketch fails to start, your board is affected.
The "Blink" example sketch (available under File -> Examples -> Basic in the Arduino IDE) is a good one to load onto the EtherDue for this purpose, as you can look at the LED marked "L" and see if it blinks (no bug) or remains solid (bug).
What can I do if my EtherDue is affected?
There is a one component repair that can be applied to fix affected boards.
Freetronics can apply this fix for you at no cost. Email firstname.lastname@example.org to arrange return of an affected board for repair.
Alternatively, if you are comfortable with surface mount (SMT) soldering or feel like a challenge then you can solder the component yourself. Instructions follow:
Instructions for self-repair
Self-repair is entirely optional. Email email@example.com if you would like us to repair your EtherDue.
What you will need
- Soldering iron.
- Fine Point Tweezers.
- Magnifying glass or similar device (for inspecting work).
- Solder flux. (Optional, but makes things go more smoothly. We recommend a "no-clean liquid flux" in a pen.)
- A well lit working area.
- 0603 size surface mount resistor, "10K ohms" value. 10K is recommended but any value between 10K and 50K should work. 0805 size (30% larger) also fits.
How big is an 0603 resistor? About 1.6mm x 0.8mm. Here it is shown alongside an Australian five cent piece (approx 20mm / 0.75 inches in diameter.)
As tiny as it looks, if you have reasonably steady hands and good eyesight then you can solder one of these by hand without special magnifying or soldering equipment! The repair in the example pictures shown below was done with a common soldering iron and no magnifying tools. If your eyesight is less good, or you don't feel like squinting at a tiny board, then a magnifier of some kind helps a lot (we usually use one). It's up to you if you want to try the repair at all, though.
We recommend buying a few 0603 size resistors. They're very cheap, but easy to lose or accidentally flick across the room!
Step 0 - Locating the Resistor
We need to solder the resistor between one flat pad of the "Erase" button and one leg of the small FET (black rectangular 3-legged package) below it. The location is highlighted by the red oval here:
One end of the resistor is soldered to each of these two points.
The technique we'll use to solder the resistor is called "tack/reflow".
Step 1 - Tin the "Erase" button pad
Before starting, if you have solder flux available then apply some to the flat pad at the end of the erase button, and the leg of the FET.
Using your soldering iron apply a small ball of solder to the flat pad on the "erase" button. Take care not to apply too much solder, it's easier to apply too little and then add more than to apply too much and have to clean it off.
When soldering on the EtherDue, take care not to accidentally scorch the pin headers with the soldering iron. You want a low enough angle to apply heat to the pad, without going so low that you melt the header plastic!
Your goal is to form a blob of solder that looks something like this:
Make sure you don't bridge the solder blob onto the metal body of the button.
If you apply too much solder by mistake, you can use solder wick to clean it up.
Step 2 - Place the resistor in position
Using the tweezers, pick up the resistor and place it between the blob of solder and the FET leg as shown:
Don't worry about placing it perfectly, we'll straighten it up in the following steps.
The resistor can be placed either way, its polarity (direction in the circuit) is not important.
Step 3 - Flow solder onto "button end" of the resistor
For this step keep the tweezers in one hand and the soldering iron in the other. Hold the resistor in place using the tweezers. Then use the soldering iron with a clean tip (ie no new solder) to heat the tip of the resistor, and melt the blob of solder (that you already placed in Step 1) so it flows across onto the resistor end. Try to straighten the resistor up as the solder melts on it.
When done, it should look something like this:
After the solder cools, the resistor should be firmly held in place at the "button" end.
It might take a few tries until the resistor sits in the right place and makes a strong connection. Take care not to apply heat to the board for too long at a time. A few seconds should be all it takes to melt the blob and guide it onto the end of the resistor.
Don't worry if the joint doesn't look too clean, you can go back and reflow it a second time after you've soldered the other end of the resistor.
Step 4 - Solder the other end of the resistor
Hold the soldering iron in one hand and some solder in the other, then briefly heat the other end of the resistor and the FET leg near it. Feed a tiny amount of solder in beside the iron tip to form a joint.
You're aiming for a result like this (this is almost too much solder):
At this stage if you want to go back and reflow the "button end" by applying the soldering iron quickly again, for a cleaner result, then you can.
Use the magnifier to examine your handiwork and check for a solid solder connection on each end, and no shorts to any other pins or the body of the button.
The resistor you've just soldered acts as a "pull-up resistor" that prevents the transient signal on power-on which was triggering the bug.