We have a device that uses the ADuC7021. We have recently released the device to production. Now that large numbers of these devices are being manufactured, we are discovering that about 3-5% of them are not coming out of reset on power-up every time. Sometimes they will, and sometimes they wont. It is at random. After some testing on a known-failing device, it was discovered by an oscilloscope that the external 32kHz crystal is oscillating, but the processor does not appear to be executing any code. We added an approximately 1 second delay routine in the code prior to calling our initialization routine that sets up the PLL and initializes all peripherals. This seems to have fixed the problem as the processor, with the delay, will reliably come out of reset. Just to confirm, we removed the delay and the processor was sporadic in coming out of reset again.
The question is; what is causing this behavior and is our delay routine really a solid solution? Or, is that just covering a symptom and not actually fixing the problem at all?
Thanks in advance for any help rendered.
Try examining the envelope of the external crystal an make sure you are switching from internal to external oscillator at a point where the amplitude of the external oscillator signals are sufficient. Consider the loading effect of the scope probes when you examine the signal.