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 的框架如下图所示: .. only:: bbb .. image:: ../../../_static/Audio_dump_debug_bus_framework.png :align: center .. centered:: Debug bus 框架图 .. only:: hornet .. image:: ../../../_static/Audio_dump_debug_bus_framework_hornet.png :align: center .. centered:: Debug bus 框架图 Audio dump 方式 --------------- Audio dump 实现了 3 种 dump 方式: - 直接 dump - 通过 TX-DFE 通道进行 dump - Dump MIC 数据 1. 直接 dump:直接 dump debug bus 数据,将需要 dump 的数据源连接到 debug bus 上进行 dump 即可。如下图所示: .. image:: ../../../_static/Audio_dump_direct_dump.png :align: center .. centered:: 直接 dump 连接示意图 直接 dump 方式可以 dump 的数据源如下: .. only:: bbb .. code-block:: c //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_BQ_6, /**< Dump data from ANC biquad 6 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_7, /**< Dump data from ANC biquad 7 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_8, /**< Dump data from ANC biquad 8 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_9, /**< Dump data from ANC biquad 9 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_10, /**< Dump data from ANC biquad 10 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_11, /**< Dump data from ANC biquad 11 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_12, /**< Dump data from ANC biquad 12 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_13, /**< Dump data from ANC biquad 13 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_14, /**< Dump data from ANC biquad 14 output. */ WQ_AUDIO_DUMP_SRC_ANC_BQ_15, /**< Dump data from ANC biquad 15 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_ANC_DRC_2, /**< Dump data from ANC DRC 2 output. */ WQ_AUDIO_DUMP_SRC_ANC_DRC_3, /**< Dump data from ANC DRC 3 output. */ WQ_AUDIO_DUMP_SRC_ANC_DRC_4, /**< Dump data from ANC DRC 4 output. */ WQ_AUDIO_DUMP_SRC_ANC_DRC_5, /**< Dump data from ANC DRC 5 output. */ WQ_AUDIO_DUMP_SRC_ANC_DRC_6, /**< Dump data from ANC DRC 6 output. */ WQ_AUDIO_DUMP_SRC_ANC_DRC_7, /**< Dump data from ANC DRC 7 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_ASRC_TX_2, /**< Dump data from ASRC 2 output. */ WQ_AUDIO_DUMP_SRC_ASRC_TX_3, /**< Dump data from ASRC 3 output. */ WQ_AUDIO_DUMP_SRC_MIXER_OUT_0, /**< Dump data from Mixer 0 output. */ WQ_AUDIO_DUMP_SRC_MIXER_OUT_1, /**< Dump data from Mixer 1 output. */ WQ_AUDIO_DUMP_SRC_DFE_TX_IN_0, /**< Dump data from TX-DFE 0 input. */ WQ_AUDIO_DUMP_SRC_DFE_TX_IN_1, /**< Dump data from TX-DFE 1 input. */ .. only:: hornet .. code-block:: c //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. */ 2. 通过 TX-DFE 通道进行 dump:首先将数据源输入到 TX-DFE,然后将 TX-DFE 输入源连接到 debug bus,最后从 debug bus 将数据 dump 出来。这种方式将会占用 TX-DFE 通道,较少使用。如下图所示: .. image:: ../../../_static/Audio_dump_dump_by_txdfe.png :align: center .. centered:: 通过 TX-DFE 通道 dump 连接示意图 通过 TX-DFE 通道进行 dump 的方式可以 dump 的数据源如下: .. only:: bbb .. code-block:: c //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_DFE_RX_2_AND_TX_0, /**< Connect RX-DFE 2 to TX-DFE 0 and dump data from TX-DFE 0 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_3_AND_TX_0, /**< Connect RX-DFE 3 to TX-DFE 0 and dump data from TX-DFE 0 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_4_AND_TX_0, /**< Connect RX-DFE 4 to TX-DFE 0 and dump data from TX-DFE 0 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_5_AND_TX_0, /**< Connect RX-DFE 5 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 ouput to TX-DFE 0 and dump data from TX-DFE 0 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_6_AND_TX_0, /**< Connect RX-DFE 6 to TX-DFE 0 and dump data from TX-DFE 0 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_7_AND_TX_0, /**< Connect RX-DFE 7 to TX-DFE 0 and dump data from TX-DFE 0 input. */ //audio dump by txdfe1 WQ_AUDIO_DUMP_SRC_DFE_RX_0_AND_TX_1, /**< Connect RX-DFE 0 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_1_AND_TX_1, /**< Connect RX-DFE 1 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_2_AND_TX_1, /**< Connect RX-DFE 2 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_3_AND_TX_1, /**< Connect RX-DFE 3 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_4_AND_TX_1, /**< Connect RX-DFE 4 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_5_AND_TX_1, /**< Connect RX-DFE 5 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_MIXER_OUT_AND_DFE_TX_1, /**< Connect Mixer output to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_ANC_OUT_AND_DFE_TX_1, /**< Connect ANC output to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_6_AND_TX_1, /**< Connect RX-DFE 6 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_DFE_RX_7_AND_TX_1, /**< Connect RX-DFE 7 to TX-DFE 1 and dump data from TX-DFE 1 input. */ WQ_AUDIO_DUMP_SRC_BY_TXDFE_MAX, .. only:: hornet .. code-block:: c //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. */ 3. Dump MIC 数据,其实就是直接走输入通路将 MIC 数据接收下来,通常 MIC 数据直接通过 ADC/PDM 模块进行获取即可,不需要通过 audio dump 模块来获取。只有在某些特殊场景下使用,比如需要 MIC 数据和 SPK 数据完全同步时使用。Dump MIC 数据如下图所示: .. image:: ../../../_static/Audio_dump_mic_dump.png :align: center .. centered:: Dump MIC 连接示意图 Dump MIC 方式可以 dump 的数据源如下: .. only:: bbb .. code-block:: c //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. */ WQ_AUDIO_DUMP_SRC_PDM_MIC_2, /**< Dump data from PDM MIC 2. */ WQ_AUDIO_DUMP_SRC_PDM_MIC_3, /**< Dump data from PDM MIC 3. */ .. only:: hornet .. code-block:: c //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 通道的使用没有什么限制。 .. only:: bbb 对于 DMIC,PDM MIC通道和 RX-DFE 通道有固定的对应关系: - PDM port 0 使用 RX-DFE channel 0 & 1 - PDM port 1 使用 RX-DFE channel 2 & 3 - PDM port 2 使用 RX-DFE channel 4 & 5 - PDM port 3 使用 RX-DFE channel 6 & 7 .. only:: hornet 对于 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。 .. only:: hornet 对于 Hornet,可以使用 RX-DFE-LITE 进行 dump MIC,因为 RX-DFE-LITE 的 dump 数据源可以来自 RX-DFE 的第一级输出(给到 ANC 的数据),如下图所示: .. image:: ../../../_static/Audio_dump_mic_dump_by_rxdfe_lite.png :align: center .. centered:: 使用 RX-DFE-LITE dump MIC 连接示意图 此时应选择如下数据源: .. code-block:: c 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 介绍 ----------- .. doxygenfile:: wq_audio_dump.h .. doxygenfile:: wq_audio_dump_declare.h