This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to read I2S configuration and print in UART using NRF52-DK ?

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

Parents
  • Sorry that this is a bit messy, but I also just read the messages that you sent me. 

    The I2S will store one sample in a buffer array. The buffer consists of 32 bit values. Try memsetting the buffer to either 0x00 or 0xFF (0x00000000 or 0xFFFFFFFF) before you sample, and see if it is more consistent.

    If you either way have to process the data (stripping away the first 12 bits of each sample) does it matter that they in some cases are 0x000 and in some cases 0xFFF? Is the rest of the sample correct?

    BR,

    Edvin

Reply
  • Sorry that this is a bit messy, but I also just read the messages that you sent me. 

    The I2S will store one sample in a buffer array. The buffer consists of 32 bit values. Try memsetting the buffer to either 0x00 or 0xFF (0x00000000 or 0xFFFFFFFF) before you sample, and see if it is more consistent.

    If you either way have to process the data (stripping away the first 12 bits of each sample) does it matter that they in some cases are 0x000 and in some cases 0xFFF? Is the rest of the sample correct?

    BR,

    Edvin

Children
Related