Audio Dump

概述

Audio dump 模块的功能是将硬件通路的某一个硬件点的数据通过 RX-DFE 或者 RX-DFE-LITE 接收下来,可以用于调试,提供数据给 DSP,啸叫检测等功能。

Audio dump 模块能够 dump 的数据源可以分为两大块:来自 debug bus 的数据和来自 MIC 的数据。 其中,debug bus 的数据源来自 ANC 和输出通路(包括 ASRC/TX-DFE 等)。Debug bus 输出可以通过 I2S TX 输出到 GPIO,也可以通过 RX-DFE 或者 RX-DFE-LITE 进行降采样之后进行保存。Debug bus 的框架如下图所示:

../../_images/Audio_dump_debug_bus_framework_hornet.png

Debug bus 框架图

Audio dump 方式

Audio dump 实现了 3 种 dump 方式:

  • 直接 dump

  • 通过 TX-DFE 通道进行 dump

  • Dump MIC 数据

  1. 直接 dump:直接 dump debug bus 数据,将需要 dump 的数据源连接到 debug bus 上进行 dump 即可。如下图所示:

../../_images/Audio_dump_direct_dump.png

直接 dump 连接示意图

直接 dump 方式可以 dump 的数据源如下:

//direct dump
WQ_AUDIO_DUMP_SRC_ANC_BQ_0,        /**< Dump data from ANC biquad 0 output. */
WQ_AUDIO_DUMP_SRC_ANC_BQ_1,        /**< Dump data from ANC biquad 1 output. */
WQ_AUDIO_DUMP_SRC_ANC_BQ_2,        /**< Dump data from ANC biquad 2 output. */
WQ_AUDIO_DUMP_SRC_ANC_BQ_3,        /**< Dump data from ANC biquad 3 output. */
WQ_AUDIO_DUMP_SRC_ANC_BQ_4,        /**< Dump data from ANC biquad 4 output. */
WQ_AUDIO_DUMP_SRC_ANC_BQ_5,        /**< Dump data from ANC biquad 5 output. */
WQ_AUDIO_DUMP_SRC_ANC_DRC_0,       /**< Dump data from ANC DRC 0 output. */
WQ_AUDIO_DUMP_SRC_ANC_DRC_1,       /**< Dump data from ANC DRC 1 output. */
WQ_AUDIO_DUMP_SRC_ASRC_TX_0,       /**< Dump data from ASRC 0 output. */
WQ_AUDIO_DUMP_SRC_ASRC_TX_1,       /**< Dump data from ASRC 1 output. */
WQ_AUDIO_DUMP_SRC_DFE_RX_0_TO_ANC, /**< Dump data from RX-DFE 0 SINC0 output, only support dumped by RX-DFE-LITE. */
WQ_AUDIO_DUMP_SRC_DFE_RX_1_TO_ANC, /**< Dump data from RX-DFE 1 SINC0 output, only support dumped by RX-DFE-LITE. */
WQ_AUDIO_DUMP_SRC_MIXER_OUT_0,     /**< Dump data from Mixer output 0. */
WQ_AUDIO_DUMP_SRC_DFE_TX_IN_0,     /**< Dump data from TX-DFE 0 input. */
  1. 通过 TX-DFE 通道进行 dump:首先将数据源输入到 TX-DFE,然后将 TX-DFE 输入源连接到 debug bus,最后从 debug bus 将数据 dump 出来。这种方式将会占用 TX-DFE 通道,较少使用。如下图所示:

../../_images/Audio_dump_dump_by_txdfe.png

通过 TX-DFE 通道 dump 连接示意图

通过 TX-DFE 通道进行 dump 的方式可以 dump 的数据源如下:

//audio dump by txdfe0
WQ_AUDIO_DUMP_SRC_DFE_RX_0_AND_TX_0, /**< Connect RX-DFE 0 to TX-DFE 0 and dump data from TX-DFE 0 input. */
WQ_AUDIO_DUMP_SRC_DFE_RX_1_AND_TX_0, /**< Connect RX-DFE 1 to TX-DFE 0 and dump data from TX-DFE 0 input. */
WQ_AUDIO_DUMP_SRC_MIXER_OUT_AND_DFE_TX_0, /**< Connect Mixer output to TX-DFE 0 and dump data from TX-DFE 0 input. */
WQ_AUDIO_DUMP_SRC_ANC_OUT_AND_DFE_TX_0,   /**< Connect ANC output to TX-DFE 0 and dump data from TX-DFE 0 input. */
  1. Dump MIC 数据,其实就是直接走输入通路将 MIC 数据接收下来,通常 MIC 数据直接通过 ADC/PDM 模块进行获取即可,不需要通过 audio dump 模块来获取。只有在某些特殊场景下使用,比如需要 MIC 数据和 SPK 数据完全同步时使用。Dump MIC 数据如下图所示:

../../_images/Audio_dump_mic_dump.png

Dump MIC 连接示意图

Dump MIC 方式可以 dump 的数据源如下:

//mic dump
WQ_AUDIO_DUMP_SRC_ADC_MIC_0, /**< Dump data from Analog MIC 0. */
WQ_AUDIO_DUMP_SRC_ADC_MIC_1, /**< Dump data from Analog MIC 1. */
WQ_AUDIO_DUMP_SRC_ADC_MIC_2, /**< Dump data from Analog MIC 2. */
WQ_AUDIO_DUMP_SRC_PDM_MIC_0, /**< Dump data from PDM MIC 0. */
WQ_AUDIO_DUMP_SRC_PDM_MIC_1, /**< Dump data from PDM MIC 1. */

使用 RX-DFE dump MIC 时需要分 dump AMIC (Analog MIC) 和 dump DMIC (DPM MIC) 两种情况。

对于 AMIC,任意一个 RX-DFE 通道可以连接到任意一个 AMIC 上,所以在 dump AMIC 时,RX-DFE 通道的使用没有什么限制。

对于 DMIC,PDM MIC通道和 RX-DFE 通道有固定的对应关系:

  • PDM port 0 使用 RX-DFE channel 0 & 1

当使用 RX-DFE dump PDM MIC 时,一个 PDM port 只能接一个 PDM MIC。一个 PDM 连接的两个 RX-DFE channel,一个用于接收 MIC 数据,一个用于 dump MIC 数据。两个 RX-DFE 通道接收到的分别是 PDM MIC 的两个声道数据,这里利用了 PDM MIC 的一个特性:当一个 PDM port 只接了一个 PDM MIC时,两个声道的数据是完全一样的。所以我们只提供了 4 个 PDM MIC source,在使用 PDM MIC 时也需要注意 RX-DFE 通道的分配,以及一个 PDM port 只能接一个 PDM MIC。

对于 Hornet,可以使用 RX-DFE-LITE 进行 dump MIC,因为 RX-DFE-LITE 的 dump 数据源可以来自 RX-DFE 的第一级输出(给到 ANC 的数据),如下图所示:

../../_images/Audio_dump_mic_dump_by_rxdfe_lite.png

使用 RX-DFE-LITE dump MIC 连接示意图

此时应选择如下数据源:

WQ_AUDIO_DUMP_SRC_DFE_RX_0_TO_ANC, /**< Dump data from RX-DFE 0 SINC0 output, only support dumped by RX-DFE-LITE. */
WQ_AUDIO_DUMP_SRC_DFE_RX_1_TO_ANC, /**< Dump data from RX-DFE 1 SINC0 output, only support dumped by RX-DFE-LITE. */

Aduio dump 启动方式

Audio dump 支持 2 种启动方式:self trigger 和 software trigger。

  1. self trigger:在 audio dump 打开时自动进行启动

  2. software trigger:需要额外调用 software trigger 接口进行启动。如果使用 RX-DFE 进行 dump,调用 wq_audio_dump_software_start_all_rx_dfe 接口进行启动;如果使用 RX-DFE-LITE 进行 dump,调用 wq_audio_intf_start_all 接口进行启动。

API 介绍

Typedefs

typedef enum _WQ_AUDIO_DUMP_SRC WQ_AUDIO_DUMP_SRC

Audio dump source.

typedef enum _WQ_AUDIO_DUMP_CHN WQ_AUDIO_DUMP_CHN

Audio dump channel.

typedef enum _WQ_DUMP_TRIGGER_MODE WQ_DUMP_TRIGGER_MODE

Audio dump trigger mode.

typedef void (*wq_audio_dump_dma_done_callback)(void *buf, uint32_t length, void *param)

Audio dump data receive done callback.

Functions

uint8_t wq_audio_dump_open(WQ_AUDIO_DUMP_SRC src, WQ_AUDIO_DUMP_CHN chn, uint32_t fs, WQ_DUMP_TRIGGER_MODE trigger)

Open audio dump.

参数:
  • src -- Dump source

  • chn -- Dump channel

  • fs -- Output sample frequency

  • trigger -- Start trigger mode

返回:

Audio FIFO ID

WQ_RET wq_audio_dump_close(WQ_AUDIO_DUMP_SRC src, WQ_AUDIO_DUMP_CHN chn)

Close audio dump.

参数:
  • src -- Dump source

  • chn -- Dump channel

返回:

WQ_RET_OK - success, other - failed

WQ_RET wq_audio_dump_mount_dma(uint8_t fifo_id, char *dst, uint32_t size, wq_audio_dump_dma_done_callback cb)

Receive audio dump data by DMA.

参数:
  • fifo_id -- Audio FIFO ID

  • dst -- Receive data buffer

  • size -- Receive data size

  • cb -- Receive done callback

返回:

WQ_RET_OK - success, other - failed

WQ_RET wq_audio_dump_digital_gain_set(WQ_AUDIO_DUMP_CHN chn, int16_t gain)

Set audio dump rxdfe lite digital gain,must be an integer multiple of 32.

备注

The target gain is the step code, one step corresponds to 0.1875 dB, so the dB value of gain is gain * 0.1875 dB. The target gain range is -511 ~ 511.

参数:
  • chn -- Digital channel.

  • gain -- Target digital gain step code.

返回:

WQ_RET_OK - success, other - failed.

WQ_RET wq_audio_dump_software_start_all_rx_dfe(void)

Software start all RX-DFE channel used to dump data.

返回:

WQ_RET_OK for success else error

WQ_RET wq_audio_dump_adc_feedback_set(uint8_t adc_port, WQ_AUDIO_DUMP_CHN chn)

set dump point feedback channel

参数:
  • adc_port -- adc feedback port

  • chn -- feedback dump channel

返回:

WQ_RET - success, other - failed

WQ_RET wq_audio_dump_adc_feedback_clear(uint8_t adc_port, WQ_AUDIO_DUMP_CHN chn)

clear dump point feedback channel

参数:
  • adc_port -- adc feedback port

  • chn -- feedback dump channel

返回:

WQ_RET - success, other - failed

WQ_RET wq_audio_dump_spk_feedback_link(uint8_t spk_chn)

speaker timer callback link mixer data to feedback channel, only for interrupt context

参数:

spk_chn -- spk out channel

返回:

WQ_RET - success, other - failed

WQ_RET wq_audio_dump_spk_feedback_dislink(void)

speaker dislink feedback channel

返回:

WQ_RET - success, other - failed