I2S Audio mode not working

I am running the following Nordic sample on nRF5340 development kits : https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/applications/nrf5340_audio/README.html

The USB-audio mode for gateway works perfectly. Hence the gateway is connected to a laptop with a USB cable to get the audio. The sink boards receive and play the streamed audio. 

However, when using the I2S audio mode by enabling CONFIG_AUDIO_SOURCE_I2S=y  in the proj.conf , the result is strange. 

It was working fine at first when using an MP3 player connected to the line-in on the gateway and with a speaker connected to each board. Now it doesn't. Sometimes only the left board will play and not the right board. Sometimes nothing at all can be heard from the boards. Sometimes the audio output is choppy and flickery. It is inconsistent. I do need to reset all the boards at times to get any result. 

Are there known problems with using this mode? 

Below is a capture of the terminal output from both the left and right boards. 

Right board:

*** Booting Zephyr OS build v3.2.99-ncs1 ***
HR [00:00:00.256,835] <inf> fw_info:
         nRF5340 Audio nRF5340 Audio DK cpuapp
         NCS base version: 2.2.0
         Cmake run : Fri Jan 20 16:47:24 2023
HR [00:00:00.256,835] <inf> fw_info: ------- DEBUG BUILD -------
HR [00:00:00.256,835] <inf> fw_info: HEADSET right device
HR [00:00:00.267,456] <inf> board_version: Compatible board/HW version found: 1.0.0
HR [00:00:02.315,216] <wrn> bt_hci_core: Controller to host flow control not supported
HR [00:00:02.318,237] <inf> bt_hci_core: No ID address. App must call settings_load()
HR [00:00:02.318,298] <inf> ble: MAC: 00:00:00:00:00:00 (public)
HR [00:00:02.318,847] <inf> ble: Controller version: 3310
HR [00:00:02.444,000] <inf> cis_headset: Set direct advertising to E7:0D:01:55:C6:CA (random)
HR [00:00:02.444,610] <inf> cis_headset: Advertising successfully started
HR [00:00:04.016,876] <inf> cis_headset: Connected: E7:0D:01:55:C6:CA (random)
HR [00:00:08.416,717] <inf> cis_headset: Codec config for LC3:
HR [00:00:08.416,748] <inf> cis_headset:        Frequency: 48000 Hz
HR [00:00:08.416,748] <inf> cis_headset:        Frame Duration: 10000 us
HR [00:00:08.416,778] <inf> cis_headset:        Channel allocation: 0x1
HR [00:00:08.416,778] <inf> cis_headset:        Octets per frame: 120 (96000 kbps)
HR [00:00:08.416,778] <inf> cis_headset:        Frames per SDU: 1
HR [00:00:08.421,020] <inf> cis_headset: Presentation delay 10000 us is set by initiator

RESET GATEWAY BOARD

 <inf> cis_headset: Stream stopped
HR [00:06:57.257,751] <inf> cis_headset: Disconnected: E7:0D:01:55:C6:CA (random) (reason 0x08)
HR [00:06:57.258,361] <inf> cis_headset: Set direct advertising to E7:0D:01:55:C6:CA (random)
HR [00:06:57.258,728] <inf> cis_headset: Advertising successfully started
HR [00:06:57.262,939] <inf> audio_datapath: Pres comp state: INIT
HR [00:06:58.003,936] <inf> cis_headset: Connected: E7:0D:01:55:C6:CA (random)
HR [00:06:58.403,533] <err> ble_audio_services: Discovery of MCS failed (14)
HR [00:06:58.606,445] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:58.704,010] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:58.903,533] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:59.004,058] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:59.204,040] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:59.304,016] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:59.603,546] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:06:59.803,558] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:07:00.103,576] <wrn> ble_audio_services: Failed to update media state: -22
HR [00:07:02.304,595] <inf> cis_headset: Codec config for LC3:
HR [00:07:02.304,595] <inf> cis_headset:        Frequency: 48000 Hz
HR [00:07:02.304,626] <inf> cis_headset:        Frame Duration: 10000 us
HR [00:07:02.304,626] <inf> cis_headset:        Channel allocation: 0x1
HR [00:07:02.304,626] <inf> cis_headset:        Octets per frame: 120 (96000 kbps)
HR [00:07:02.304,656] <inf> cis_headset:        Frames per SDU: 1
HR [00:07:02.407,135] <inf> cis_headset: Presentation delay 10000 us is set by initiator
HR [00:07:02.709,777] <wrn> audio_datapath: I2S RX continuing stream
HR [00:07:02.717,773] <wrn> audio_datapath: I2S RX overrun. Single msg
HR [00:07:02.731,781] <inf> audio_datapath: Drft comp state: INIT
HR [00:07:04.336,273] <inf> audio_datapath: Drft comp state: CALIB
HR [00:07:04.338,226] <wrn> audio_datapath: Data received, total underruns: 1625
HR [00:07:04.436,401] <inf> audio_datapath: Drft comp state: OFFSET
HR [00:07:04.789,093] <wrn> audio_datapath: Data received, total underruns: 1626
HR [00:07:04.823,120] <inf> audio_datapath: Drft comp state: LOCKED
HR [00:07:04.825,744] <inf> audio_datapath: Pres comp state: MEAS
HR [00:07:04.935,760] <inf> audio_datapath: Pres comp state: WAIT
HR [00:07:05.036,773] <inf> audio_datapath: Pres comp state: INIT
HR [00:07:05.045,745] <inf> audio_datapath: Pres comp state: MEAS
HR [00:07:05.155,731] <inf> audio_datapath: Pres comp state: LOCKED


RESET HEADSET BOARD

*** Booting Zephyr OS build v3.2.99-ncs1 ***
HR [00:00:00.256,896] <inf> fw_info:
         nRF5340 Audio nRF5340 Audio DK cpuapp
         NCS base version: 2.2.0
         Cmake run : Fri Jan 20 16:47:24 2023
HR [00:00:00.256,896] <inf> fw_info: ------- DEBUG BUILD -------
HR [00:00:00.256,927] <inf> fw_info: HEADSET right device
HR [00:00:00.267,517] <inf> board_version: Compatible board/HW version found: 1.0.0
HR [00:00:02.315,277] <wrn> bt_hci_core: Controller to host flow control not supported
HR [00:00:02.318,298] <inf> bt_hci_core: No ID address. App must call settings_load()
HR [00:00:02.318,359] <inf> ble: MAC: 00:00:00:00:00:00 (public)
HR [00:00:02.318,908] <inf> ble: Controller version: 3310
HR [00:00:02.444,000] <inf> cis_headset: Set direct advertising to E7:0D:01:55:C6:CA (random)
HR [00:00:02.444,641] <inf> cis_headset: Advertising successfully started
HR [00:00:04.344,757] <inf> cis_headset: Connected: E7:0D:01:55:C6:CA (random)
HR [00:00:08.744,567] <inf> cis_headset: Codec config for LC3:
HR [00:00:08.744,598] <inf> cis_headset:        Frequency: 48000 Hz
HR [00:00:08.744,598] <inf> cis_headset:        Frame Duration: 10000 us
HR [00:00:08.744,628] <inf> cis_headset:        Channel allocation: 0x1
HR [00:00:08.744,628] <inf> cis_headset:        Octets per frame: 120 (96000 kbps)
HR [00:00:08.744,628] <inf> cis_headset:        Frames per SDU: 1
HR [00:00:08.748,870] <inf> cis_headset: Presentation delay 10000 us is set by initiator
HR [00:00:09.063,568] <wrn> audio_datapath: I2S RX overrun. Single msg
HR [00:00:10.757,629] <inf> audio_datapath: Drft comp state: CALIB
HR [00:00:10.758,575] <wrn> audio_datapath: Data received, total underruns: 1702
HR [00:00:10.857,604] <inf> audio_datapath: Drft comp state: OFFSET
HR [00:00:11.199,981] <wrn> audio_datapath: Data received, total underruns: 1703
HR [00:00:11.305,023] <inf> audio_datapath: Drft comp state: LOCKED
HR [00:00:11.306,671] <inf> audio_datapath: Pres comp state: MEAS
HR [00:00:11.416,656] <inf> audio_datapath: Pres comp state: WAIT
HR [00:00:11.516,662] <inf> audio_datapath: Pres comp state: INIT
HR [00:00:11.526,672] <inf> audio_datapath: Pres comp state: MEAS
HR [00:00:11.636,688] <inf> audio_datapath: Pres comp state: LOCKED

Left board:   

*** Booting Zephyr OS build v3.2.99-ncs1 ***
HL [00:00:00.260,009] <inf> fw_info:
         nRF5340 Audio nRF5340 Audio DK cpuapp
         NCS base version: 2.2.0
         Cmake run : Fri Jan 20 16:21:37 2023
HL [00:00:00.260,009] <inf> fw_info: ------- DEBUG BUILD -------
HL [00:00:00.260,009] <inf> fw_info: HEADSET left device
HL [00:00:00.270,629] <inf> board_version: Compatible board/HW version found: 1.0.0
HL [00:00:02.318,511] <wrn> bt_hci_core: Controller to host flow control not supported
HL [00:00:02.321,624] <inf> bt_hci_core: No ID address. App must call settings_load()
HL [00:00:02.321,685] <inf> ble: MAC: 00:00:00:00:00:00 (public)
HL [00:00:02.322,235] <inf> ble: Controller version: 3310
HL [00:00:02.447,296] <inf> cis_headset: Set direct advertising to E1:32:DA:CE:BD:56 (random)
HL [00:00:02.447,937] <inf> cis_headset: Advertising successfully started

  • Hello,

    I am running the following Nordic sample on nRF5340 development kits

    Could you confirm whether you are running the gateway on a nRF5340 DK or a nRF5340 Audio DK?
    From the logs it is apparent that the headset devices are nRF5340 Audio DKs at least, but it would be great to know whether the gateway device is too.

    It was working fine at first when using an MP3 player connected to the line-in on the gateway and with a speaker connected to each board. Now it doesn't. Sometimes only the left board will play and not the right board. Sometimes nothing at all can be heard from the boards. Sometimes the audio output is choppy and flickery. It is inconsistent. I do need to reset all the boards at times to get any result. 

    Do you only see this behavior when you are using the I2S source?
    Does everything work as expected when you run the exact same code with the USB as Audio source?

    Have you made any other modifications to the nRF5340 Audio application before this occured?

    Sometimes the audio output is choppy and flickery. It is inconsistent.

    This sounds very strange - what does the logs say when this happens?
    Are both Left and Right headsets choppy, or only one? If one, which?
    The logs seem to indicate an issue with establishing the stream, not poor reception during the stream, is this correct?

    Best regards,
    Karl

  • Hi  .

    I am running the gateway on an nRF5340 Audio DK also. All three boards are the same . The issue is only present when using I2S as the source, hence setting CONFIG_AUDIO_SOURCE_I2S=y in the proj.conf before building and flashing all three boards. 

    By not enabling CONFIG_AUDIO_SOURCE_I2S=y in the proj.conf before building and flashing all three boards, and using USB as the audio source, everything works as expected.

    Regarding the choppy audio, this happened a few times with I2S mode, and only when audio was playing from the left board. Nothing played from the right board then. A reset of the gateway then resolved it.

    I haven't modified anything in the application. 

    Yes, not exactly a poor reception during the stream, but establishing the stream at first. Sometimes it plays, sometimes it doesn't, and sometimes only the left earbud. 

  • Hello again,

    Thank you for your extreme patience with this, and for confirming the hardware you are using for these tests.

    mul said:
    Regarding the choppy audio, this happened a few times with I2S mode, and only when audio was playing from the left board. Nothing played from the right board then. A reset of the gateway then resolved it.

    Was the audio on the right earbud fine while the audio on the left earbud was choppy?

    What are you using as the source for your I2S sound - is it a mobile phone you have connected, or similar?

    mul said:
    A reset of the gateway then resolved it.

    Does the issue only appear the first time after programming, and is resolved after a reset of the gateway? I.e does not reappear after the reset?

    I find it very strange that you are occasionally seeing this with the unmodified nrf5340_audio application. I will discuss this with some colleagues to see if any of them have encountered anything similar in the past.

    Best regards,
    Karl

Related