If you’ve had a lot of Arduino DUEs go through your hands (or if you are just unlucky), chances are you’ve come across at least one that does not start-up properly.
The symptom is simple: you power up the Arduino but it doesn’t appear to “boot”. Your code simply doesn’t start running.
You might have noticed that resetting the board (by pressing the reset button) causes the board to start-up normally.
I had come across such a board a while back, and had thought to myself “cheap generic, probably faulty” and had just put it aside. At ~13€ it was no big loss.
A few days ago a fellow tinkerer (thank you Alex!) alerted me to a fix for this problem.
It appears that the problem was first spotted on Freetronics’ forum and was dealt with swiftly.
The problem occurs only on some DUE boards and is due to some undocumented behaviour of the ATSAM3X8E processor combined with the behaviour of some MOSFETS installed on the DUE boards. So its occurence is largely a matter of luck.
The fix is simple: you just solder a 10K resistor across the top of this mosfet:
This is a 10K 0805 resistor that is about to be soldered:
..and after soldering:
The discovery of the problem prompted a new revision of the reference design by the Arduino team.
This is what the Rev 2’s relevant part of the schematic looks like:
and the PCB:
And this is what Rev 3 looks like:
You will notice a new component, R99, plus the mosfet is now mounted vertically.
So, if you are shopping for a DUE, look for one with this mosfet mounted vertically, just to be on the safe side.