I am using a 32.768kHz crystal for a ARM M0+ MCU. According to the specification, the crystal tolerence is 20PPM, and the loading capacitance is 12.5pF. To match the loading capacitance, a capacitor is connected between each of the crystal's terminal and the ground. By calculation (considered the PCB and MCU stray capacitance), each of the capacitor is about 18pF ( 18pF = 2 x (12.5pF - Cstray) ).
For checking the accuracy, I make use of the MCU's timer periphral to generate a signal from the crystal and checking the frequency by a frequency counter. I found that the error is about 650PPM, which is much higher than my expectation. I tested it with different capacitor value but the result is similar. The ambient temperature when I test the crystal is at room temperature (~24C). I have also tested it with the integrated Real Time Clock (RTC) periphral, the result is similar. The RTC error is about 700PPM after two days.
I would like to ask is it normal that the actual error is so high for using a 20PPM crystal? If not, what is the possible reason for that?
Thank you very much.