UPDATE on R23:
I confirmed that changing R23 to 1K does correct the “No device found on COMxx” problem.
It seems to be very reliable (no failures seen in over 100 attempts on multiple computers) - but only one DUE tried.
The R23 change also fixes the reset of the SAM3X after the sketch has loaded.
@garygid: Yes, soldering a 1K in parallel with the existing 10K will result in a 909 Ohm total resistance - which is close enough to 1K. (my soldering skills are not good enough to do this).
However - changing R23 value has an unintended consequence:
The power-on reset of the SAM3X no longer works if the DUE is un-powered for 30sec or more.
I’m not sure why this occurs, but it is very repeatable.
Pushing the reset button on the DUE works - but this is not a compromise I can live with.
FIXING the POWER-ON RESET of the SAM3X:
I noticed that the 16U2 firmware does not reset the SAM3X when the 16U2 is reset on power-up (which seems to be very reliable).
So I added the following code to the 16U2 firmware to reset the SAM3X.
The code is added to the SetupHardware() function, directly after wdt_disable();
// assert /RESET to ensure reliable Target power-up reset
TCNT0 = 0;
TCCR0B = (1 << CS01) | (1 << CS00); // Set prescaler to 64 and start counting (4uS/tick)
while(TCNT0 < 24); // Wait for approx 100 uS
TCCR0B=0; // Stop the counter
TCNT0 = 0; // re-init timer count
On my DUE, I found that the TCOUNT0 value had to be at least 3 for the SAM3X to reset properly (approx 12uS or more).
I chose a TCOUNT0 value of 24 (100uS) to ensure more than enough margin (for my DUE).
The TCOUNT0 value may have to be increased to ensure robustness on all possible DUE component variations.
The firmware fix seems to be reliable (in the 36 hours since I changed the firmware - including two 6+ hour power-downs).
So in summary:
Two items need to be fixed on the DUE to completely solve this problem - R23 value and the 16U2 firmware.
I would be interested if anyone has an alternate solution that is simpler or can confirm that this fixes their DUE.
(I did consider replacing R23 with a diode - but the BOM cost would increase).
Arduino-DUE-usbserial-prod-firmware-2013-02-05_resetfix.hex (11.9 KB)