Hi,
We have a CC2541 based design that uses a 32MHz crystal for external clock (Part #: SJKY7U32000M121050B10, manufactured by Shenzhen Crystal Technology). We have several 100's of these units deployed, but on a few units (3), we are seeing a weird problem. All these 3 units used to work perfectly fine, we were able to connect to them using our BT app and sustain the link and operate them. After a few weeks of working perfectly fine, these 3 units stopped communicating with the app and when we opened up the HW to debug, we narrowed it down to the 32MHz clock. The code is basically stuck in the following code snippet at startup:
#define START_HSOSC_XOSC() \
{ \
SLEEPCMD &= ~OSC_PD; /* start 16MHz RCOSC & 32MHz XOSC */ \
while (!(SLEEPSTA & XOSC_STB)); /* wait for stable 32MHz XOSC */ \
}
The code is stuck in while() loop because there is no stable 32MHz clock (it is flat). We looked at the XOSC_Q2 output from the cc2541 chip and it is flat at 3.3V.
When we change the code to use the internal 16MHz instead of external 32MHz clock, units are alive again, so we have very high confidence that the problem is somewhere in the closed loop 32MHz circuitry or in the software that drives this loop
Since the units used to work properly, we are hesitant to conclude that this is a HW (crystal/chip) problem. At the same time we are at a loss as to what SW could do to cause 32MHz clock to be flat.
Appreciate any help/hints/guidance that could help us resolve this issue.
Thanks
Yohannes