Hello,
Currently I am using the I2S driver to drive the BCLK and WS PCM clocks for a third party chip.
Using the settings below, I observe quite a substantial clock deviation.
// Initialize the I2S bus for the PCM I2S_init(); I2S_Params i2sParams; I2S_Params_init(&i2sParams); i2sParams.trueI2sFormat = true; i2sParams.invertWS = true; i2sParams.bitsPerWord = 8; i2sParams.samplingFrequency = 8 * 1e3; i2sParams.samplingEdge = I2S_SAMPLING_EDGE_FALLING; i2sParams.phaseType = I2S_PHASE_TYPE_SINGLE; i2sParams.SD0Use = I2S_SD0_OUTPUT; i2sParams.SD0Channels = I2S_8_CHANNELS; i2sParams.SD1Use = I2S_SD1_INPUT; i2sParams.SD1Channels = I2S_8_CHANNELS;
The third party chip indicates that its internal Phase-Locked Loop cannot lock on to the clock signals.
I contacted the manufacturers' support, and they say that the clock jitter is likely the problem.
Using a logic analyzer I have observed:
- WS is quite high, 8.236 kHz, but this is within the jitter spec.
- BCLK is 510.2 kHz, but 512.8 kHz every 6th period (Odd?)
- WS and BCLK start simultaneously
- WS is high for 20ns after BCLK's period has ended, but this is within the jitter spec.
What can be done to make these clock signals more precise?