I am trying to build a Bluetooth headset with the CYW20706. I am new to PSoCs but I have been able to get the transducer output working via a DAC/AMP combo. However, we have been unable to get the our MEMS microphone to work consistently: https://media.digikey.com/pdf/Data%20Sheets/Knowles%20Acoustics%20PDFs/SPH0645LM4H-B.pdf
I found out that the I2S clock is only ~512kHz whereas the mic requires 1.024 MHz to go into active mode (even though the spec sheet says it runs at 1.5 MHz or 2.4 MHz?) I found out another potential issue is that the CYW20706 only takes 16 bits while the microphone outputs 24 bits, however we should be getting some kind of noise at all times? The microphone does not output anything even when its output pin is not connected to the eval board's I2S input pin. However, sometimes we are able to get audio SOMETIMES by first physically floating the LRC and SEL pins on the mic, which creates some noise, then plugging both into VCC. Occasionally after the noise appears it is able to pick up human audio. We are stumped as to what the issue is as we cannot repeat this phenomenon. We are using HFP. Any guidance would be greatly appreciated.
Solved! Go to Solution.
We are able to get very clear audio sometimes by tinkering with the WS pin and hooking it up to VDD instead of WS. We only need one channel to work. Alternatively, can’t we just downshift the resolution just as it comes in? Do we have access to the I2S buffer in the CYW20706? The mic outputs 24 bits, but 6 of them are padded 0’s in the front, so it’s only 18 bits of resolution. We don’t mind losing 2 bits of resolution to bring it down to 16.
If my previous suggestions aren’t viable solutions, do you have any other design alternatives you could suggest?
Can you recommend ANY mic or mic/codec combo that will allow me to use take in audio while in HFP mode? Do we have to use I2S_IN for input if we need I2S_OUT for output to the transducer, or can we use another port for input without having to make significant code changes, such as SPI?
Have you guys tested ANY mics at all internally? Not I2S specific ones. I just need something that would work with the HFP interface. We already have output from the MCU working. We need to take in audio to make a headset.
The limitation here is that the I2S block in CYW20706 supports only 16 Bit Clock pulses per Channel. Which is 16bit audio.
In the case of SPH0645LM4H it needs 32 Bit Clock pulses per channel. Hence it kinda works when you put the WS to VDD.
Internally our use an I2S Codec that supports both Audio in & Out, thus a Analog Mic would be needed. The good thing about Codec's is that they can be configured for the 16bit per sample data format.
I tried doing a search but was not able to find a I2S Microphone with 16bit data output.
Can you please tell me what mic and codec combo you are using? I am unable to find any appropriate analog to I2S codecs on the market.
Edit: As in I am able to find an abundance of 24 bit ADCs, but on the spec sheets they don't seem to indicate that they can be set to 16 bit ADCs. If we were allowed to view the buffer, then we could just keep the upper 16 bits, but since we don't have the ability to do that, are 24 bit ADCs not viable then?
Any update on a codec that can actually output/configured to output 16 bits only? Most of the codecs I can find only output 24 bits.
Where can I get MCLK? The CYW20706 does not have a MCLK output, only BCLK. If I use a CYBT-343026, can I use the 24 MHz oscillator as MCLK by setting it to be 256Fs?
It says that "The PCM interface is used for full duplex bidirectional transfer of 8K or 16K voice samples while using the HFP profile." Does this mean when we are using HFP, the communication protocol is in linear PCM, instead of I2S? Does this mean we don't need an I2S microphone or codec, but instead a PCM codec?...
The I2S and PCM bus are very similar (bit clock, left/right word selection, Data In Data Out). So you can use the I2S codec itself.