Monday, 12 March 2018

audio - I2S MCLK Generation


I'm working with a Sierra Wireless BC127 (Bluetooth Module) I2S master which is generating Left-Justified, 16 bps @ 44.1khz sample rate. The Bit clock is set to 2.822 Mhz.


I want to use a Cirrus Logic WM8804 to convert the I2S data to S/PDIF @ 44.1khz (please ignore the fact that the BC127 can output S/PDIF -- I need both digital audio formats). It appears that since the WM8804 needs to operate in slave I2S mode, the internal PLL cannot be used to generate the clock, and MCLK must be provided.


Unfortunately, the BC127 does not output MCLK, so I believe I need to use the bit clock (BCLK) from the BC127 to generate MCLK.




  • I believe I can use something like the Cirrus CS2300-03 to generate the MCLK, is that correct?





  • If the above is correct, what should I multiply BCLK by in order to generate a useful MCLK?




  • Are there any simpler means of generating MCLK? Keep in mind that the BC127 won't run as an I2S slave.




  • Additionally, what frequency crystal should I connect to the WM8804 to generate the required S/PDIF signal?





Answer




Reposting the answer I put in a comment:



I want to use a Cirrus Logic WM8804 to convert the I2S data to S/PDIF @ 44.1khz (please ignore the fact that the BC127 can output S/PDIF -- I need both digital audio formats)



Wouldn't it be simpler to have your bluetooth module output SPDIF, then use the WM8804 to decode this into I2S? You'd get both SPDIF and I2S outputs as desired.


Now that you confirmed it is possible, here's more:


If you need I2S, I presume you'll use this to feed a DAC chip. W8804 will decode SPDIF from your bluetooth module and generate I2S and MCLK from it. I don't remember the exact settings, but you can configure it to generate the MCLK frequency your DAC chip needs.


WM8804 is also very good at cleaning up jitter, so the I2S it generates could be cleaner that what comes out of the bluetooth module (although you'd have to measure it to be sure).


It can also act as a SPDIF pass-through, so you can route the SPDIF signal from the Bluetooth module, through the W8804, and then to the SPDIF output. If you have another I2S source, you can use W8804 as a mux and SPDIF encoder to output the source you want. It will also clean up the jitter on the SPDIF, although that's not very useful (clean clock recovery is better done on the receiving side).


If you use WM8804 to generate MCLK for a DAC, then I'd recommend using a XO instead of a crystal. The layout for WM8804 crystal oscillator is really difficult to get right, and I always got lower jitter with a sub-$1 XO.



No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...