Hello,
I have an analogue audio mic connected to external ADC. The external ADC can give an output of 16bit, 20bits, 24bits and 32 bits I2S data. I have configured to send 20 bit as I2S output.
To enable the I2S communication between the ADC and NRF52 I use below configuration.
config.sdin_pin = I2S_SDIN_PIN; config.sdout_pin = NRFX_I2S_PIN_NOT_USED; config.mck_pin = NRFX_I2S_PIN_NOT_USED; config.mck_setup = NRF_I2S_MCK_32MDIV15; config.ratio = NRF_I2S_RATIO_48X; config.format = NRF_I2S_FORMAT_I2S; config.sample_width = NRF_I2S_SWIDTH_24BIT; config.channels = NRF_I2S_CHANNELS_STEREO;
In the SDK config, I have selected the pin of SDIN as 28. SCK - 31 , LRCK - 30.
While debugging, I watch the RX buffer of the nrf_I2S the data to check values most of the time starts as 0xFF8 or 0xFF9 or 0x00.
I understand that if the 24-bit I2S communication is chosen then when storing NRF stores it with 0xFF"24bit value".
1. Can I communicated with 20 bits from the ADC side or should I use only 16 or 24?
2. If 20 bits can be configured then should I expect the RX buffer data should always starting as 0xFF0"20bits value"? Because I want to store it in SD card. So I need to store the raw data to a WAV header. And the raw data should be removed of first 12 bits.
When I use NRF RTT to print the 32-bit value from RX buffer it seems like NRF LOG stuck in a loop. Without NRF LOG statement I can see that RX buffer updating each time I debug. Need a suggestion for this problem as well.
Thanks
Cecil