This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PCM3168A:6个独立音频

Guru**** 2382480 points
Other Parts Discussed in Thread: PCM3168A
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1128507/pcm3168a-6-independent-audios

器件型号:PCM3168A
主题中讨论的其他器件: PCM3168

您好!

我正在一个项目中、我需要有6个不同的音频通信路径。  我需要每个信道能够建立一部或多部 sip 电话的呼叫。

在 A 中、我有一个类比麦克风和扬声器。

我找到了具有6个输入/8个输出的 PCM3168A 编解码器、因此我使用该编解码器创建了定制原型、并连接到 IMX8mm EVK 的 J1001连接器(请参阅原理图.pdf)。

e2e.ti.com/.../6378.schematic.pdf

基于 bootlin.com/.../、我配置了器件树:

sound-pcm3168a{
      兼容="简单音频卡";
      simple-audio-card、name ="pcm3168a-audio";
      simple-audio-card、widget =   "扬声器"、"通道1输出"、
                                                   "扬声器"、"信道2out"、
                                                   "扬声器"、"通道3输出"、
                                                   "扬声器"、"通道4输出"、
                                                   "扬声器"、"通道5输出"、
                                                   "扬声器"、"信道选择6out"、
                                                   "麦克风"、"信道1英寸"、    
                                                   "麦克风"、"信道2输入"、
                                                   "麦克风"、"信道3in"、
                                                   "麦克风"、" Channel4in"、
                                                   "麦克风"、"信道5英寸"、
                                                   "麦克风"、"信道6in";
    simple-audio-card、路由=   "Channel1out"、"AOUT1L"、
                                                 "Channel2out"、"AOUT1R"、
                                                 "Channel3out"、"AOUT2L"、
                                                 "Channel4out"、"AOUT2R"、
                                                 "Channel5out"、"AOUT3L"、
                                                 "Channel6out"、"AOUT3R"、
                                                 "Channel1in"、"AIN1L"、
                                                 "Channel2in"、"AIN1R"、
                                                 "Channel3in"、"AIN2L"、
                                                 "Channel4in"、"AIN2R"、
                                                 "Channel5in"、"AIN3L"、
                                                 "Channel6in"、"AIN3R";
      simple-audio-card、di-link@1{
                  格式="left_j";
             bitclock-master =<&pcm3168a_DAC>;
             FRAME-MASTER =<&pcm3168a_DAC>;
               CPU{
                     ??Sound-Dai =<?Sa义1>;
                   di-tdm-slot-num =<8>;
                   di-tdm-slot-width =<32>;
               };
               pcm3168a_DAC:编解码器{
                   sound-dai =<&pcm3168a 0>;
                   时钟=<&clk IMX8MM_CLK_SAI1_ROOT>;
               };
    };
         simple-audio-card、di-link@2{
                  格式="left_j";
                  
                  bitclock-master =<&pcm3168a_adc>;
                  FRAME-MASTER =<&pcm3168A_ADC>;
                  CPU{
                        ??Sound-Dai =<?Sa义1>;
                        di-tdm-slot-num =<8>;
                        di-tdm-slot-width =<32>;
                  };
                  pcm3168a_adc:编解码器{
                        Sound-Dai =<&pcm3168a 1>;
                        时钟=<&clk IMX8MM_CLK_SAI1_ROOT>;
                  };
    };
   };

 

//I2C3

pcm3168a:音频编解码器@44{
      兼容="ti、pcm3168a";
      #sound-di-cells =<1>;
      reg =<0x44>;
      RESET-GPIO =<&GPIO4 17 GPIO_ACTIVE_LOW>;
   时钟=<&clk IMX8MM_CLK_SAI1_ROOT>;
      时钟名称="scki";
      /*VDD1-supply =<&supply3v3>;
      VDD2-supply =<&supply3v3>;
      VCCAD1-SUPPLY =<&supply5v0>;
      VCCAD2-SUPPLY =<&supply5v0>;
      VCCDA1-SUPPLY =<&supply5v0>;
      VCCDA2-supply =<&supply5v0>;*/
      pinctrl-names ="default";
      pinctrl-0 =<&pinctrl_pcm3168a>;
   };

 

//iomux

pinctrl_pcm3168a:pinctrl_pcm3168a{
      FSL、引脚=<
         MX8MM_IOMUXC_SAI1_TXD5_GPIO4_IO17   0x19   /*复位*/
         MX8MM_IOMUXC_SAI1_TXD6_GPIO4_IO18   0x19   /* OVF *
         MX8MM_IOMUXC_SAI1_TXD7_GPIO4_IO19   0x19   /*零*/
      >;
   };
   

pinctrl_sai1:sai1grp{
      FSL、引脚=<
         MX8MM_IOMUXC_SAI1_MCLK_SAI1_MCLK   0xd6
         MX8MM_IOMUXC_SAI1_TXFS_SAI1_TX_SYNC   0xd6
         MX8MM_IOMUXC_SAI1_TXC_SAI1_TXC_BCLK   0xd6
         MX8MM_IOMUXC_SAI1_TXD0_SAI1_TX_DATAA0   0xd6
         MX8MM_IOMUXC_SAI1_TXD1_SAI1_TX_Data1   0xd6
         MX8MM_IOMUXC_SAI1_TXD2_SAI1_TX_DATA2   0xd6
         MX8MM_IOMUXC_SAI1_TXD3_SAI1_TX_DATA3   0xd6
         MX8MM_IOMUXC_SAI1_TXD4_SAI1_TX_DATAA4   0xd6
         
         MX8MM_IOMUXC_SAI1_RXD0_SAI1_RX_DATAA0   0xd6
         MX8MM_IOMUXC_SAI1_RXD1_SAI1_RX1_RX_DATA1_RX_Data1   0xd6
         MX8MM_IOMUXC_SAI1_RXD2_SAI1_RX_DATA1_RX_DATA2   0xd6
         MX8MM_IOMUXC_SAI1_RXC_SAI1_RXC_RXC_BCLK      0xd6
         MX8MM_IOMUXC_SAI1_RXFS_SAI1_RX_SYNC   0xd6
      >;
   };  

在 EVK 上加载器件树时、我有:

[2.375321] debugfs:名为"pcm3168a-audio"的目录"3001000.SAI"已存在!
[2.3813] ASOC-simple card sound-pcm3168a:pcm3168a-DAC <-> 3001000.SAI 映射正常
[2.391733] ASOC-simple card sound-pcm3168a:pcm3168a-ADC <->3001000.SAI 映射正常
[2.399624] ASOC-simple-card sound-pcm3168a:ASOC:无 DMI 供应商名称!

[2.552554] ALSA 器件列表:
[2.557548]#0:IMX-SPDIF
[2.5680]#1:IMX-AUDIBLE-MICFIL
[2.571488]#2:pcm3168a-audio
[2.574717]#3:wm8524音频

 

aplay -l
****播放硬件设备列表****
卡0:imxspdif [IMX-SPDIF]、器件0:S/PDIF PCM snd-soc 虚拟-戴0 [S/PDIF PCM snd-soc 虚拟-戴-0]
 子设备:1/1
 子设备#0:子设备#0
卡2:btssoaudio [bt-SCO-AUDIB]、设备0:3002000.SAI-bt-SCO-PCM-WB bt-SCO-PCM-WB-0 []
 子设备:1/1
 子设备#0:子设备#0
卡3:wm8524audio [wm8524-audio]、设备0:30000.si-wm8524-hifi wm8524-hifi-0[]
 子设备:1/1
 子设备#0:子设备#0
卡4:pcm3168aaudio [pcm3168a-audio]、器件0:30010000.si-pcm3168a-dac pcm3168a-dac-0[]
 子设备:1/1
 子设备#0:子设备#0


arecord -l
****捕获硬件设备列表****
卡0:imxspdif [IMX-SPDIF]、器件0:S/PDIF PCM snd-soc 虚拟-戴0 [S/PDIF PCM snd-soc 虚拟-戴-0]
 子设备:1/1
 子设备#0:子设备#0
卡1:imxaudioomicfil [IMX-audio-micfil]、设备0:micfil hifi snd-soc 虚拟 di-0 []
 子设备:1/1
 子设备#0:子设备#0
卡2:btssoaudio [bt-SCO-AUDIB]、设备0:3002000.SAI-bt-SCO-PCM-WB bt-SCO-PCM-WB-0 []
 子设备:1/1
 子设备#0:子设备#0
卡4:pcm3168aaudio [pcm3168a-audio]、设备1:3001000.si-pcm3168a-adc pcm3168a-adc -1 []
 子设备:1/1
 子设备#0:子设备#0

 

尝试录制音频时:

arecord -D HW:4、1 -r 48000 sample.wav
录制波'scame.wav':无符号8位、速率48000Hz、单声道
arecord:SET_params:1339:样本格式 U8不可用
可用格式:
- S24_LE

arecord -D HW:4、1 -f S24_LE -r 48000 sample.wav
录制波'scame.wav':有符号24位小端字节序、速率48000Hz、单声道
arecord:SET_params:1345:channels count 不可用

arecord -D HW:4、1 -f S24_LE -r 48000 -c 2 sample.wav
录制波'scame.wav':[1857.768567]
有符号24位小端序、比率[1857.777720] pcm3168a 2-0044:主模式或使用 DSP 的从模式不支持24位插槽
[1857.789217] pcm3168a 2-0044:ASOC:无法设置 pcm3168a-ADC 硬件参数:-22
 48000Hz、立体声
arecord:set_params:1403:Unable to install HW params:
访问: rw_interleaved
格式: S24_LE
子格式: 标准
SAMPLE_BITS:32
FRAME_BITS:64
通道:2.
比率:48000
PERIOD_TIME:(42666 42667)
Period_size:2048
周期字节:16384
期间:4.
Buffer_Time:(170666 170667)
Buffer_size:8192
Buffer_bytes:65536
tick_time:0

因此、我的问题是:

1-是否可以像我所需要的那样使用 PCM3168A 来获得6个独立的音频?

2-如果是,是否有人成功地将 pcm3168配置为 imx8mm? 有人可以帮助我进行设备树配置? 如何区分 Linux 中的不同渠道? 如何在 pcm3168a 的指定音频输入/输出中录制/播放音频?

如果不是、该解决方案可以通过使用6个简单编解码器(如许多 IMX EVK 上的 wm8960)传递到吗? 还有其他选项(但在该微控制器中易于实现)?

感谢您访问 help.e2e.ti.com/.../imx8mm_2D00_evk.zip

 

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    每个 ADC 或 DAC 只有1组 I2S 总线、因此只要所有输入/输出 路径使用的速率相同、就可以使用该器件。

    2.我不是 Linux 实施方面的专家,请让我询问可能认识的人。

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于第二个问题、请检查代码是否包含以下粗体行。

    #define PCMDEVICE_FORMs (SNDRV_PCM_FMTBIT_S16_LE |\
    SNDRV_PCM_FMTBIT_S24_LE)

    静态结构 snd_soc_da_driver pcmdevice_da_driver[]={

    .name ="pcmdevice-codec"、
    .capture ={
    .stream_name ="捕捉"、
    CHANNES_MIN = 2、
    CHANNES_max = PCMDEVICE_MAX_CHANNELS、
    .RAates = PCMDEVICE_RAates、
    .formats = PCMDEVICE_formats、
    }、
    .ops =&pcmdevice_da_ops、
    .symmetric = 1、

    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我使用的是5.4.70_2.3.0的 NXP 版本

    正如您在 pcm3168a.c 中看到的那样、定义声明为名称 PCM3168A_formats (第22行)、并在第615行上分配。

    Thanks.e2e.ti.com/.../soc_2D00_core.ce2e.ti.com/.../soc_2D00_dai.c

    e2e.ti.com/.../pcm3168a.ce2e.ti.com/.../pcm3168a.he2e.ti.com/.../pcm3168a_2D00_i2c.ce2e.ti.com/.../pcm3168a_2D00_spi.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    让我们等待盛豪的评论、然后再回来。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1-是否可以像我所需要的那样使用 PCM3168A 来获得6个独立的音频?

    您是说同时录制到6个不同的 wav 文件吗? 如果是、答案是

    不是 由于 clk 源是相同的、它可以独立记录多个不同的 wav 文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    至于24位、在 pcm3168a_hw_params 中、代码如下所示。

    案例24:
    IF (MASTER_MODE ||(fmt & PCM3168A_FMT_DSP_MASK)){
    DEV_ERR (component->dev、"24位插槽不支持主模式或使用 DSP\n");
    return -EINVAL;

    音频时钟是否来自主器件的 DSP 模式而不是 I2S?

    请参阅以下粗体行

    sound-bt-SCO{
    兼容="简单音频卡";
    simple-audio-card、name ="bt-sco-audio";
    simple-audio-card,格式="DSP_A"; ????????
    简单音频卡、位时钟反转;
    simple-audio-card、frame-master =<&btcpu>;
    simple-audio-card、bitclock-master =<&btcpu>;

    btcpu:简单音频卡、CPU{
    Sound-Dai =<&SAI2>;
    di-tdm-slot-num =<2>;
    di-tdm-slot-width =<16>;
    };

    简单音频卡、编解码器{
    Sound-Dai =<&bt_SCO_CODEC 1>;
    };
    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、盛豪、

    我能够在所有扬声器上播放音频、并且可以在每个输出通道上播放不同的音频(在最后一种情况下、我必须在.asoundrc 中创建不同的"设备")。

    e2e.ti.com/.../asoundrc.txt

    要播放音频、我需要注释掉粗体的行:

    sound-pcm3168a{
          兼容="简单音频卡";
          simple-audio-card、name ="PCM3168A";

          simple-audio-card、小工具=   "扬声器"、"通道1输出"、"扬声器"、"通道2输出"、"扬声器3输出"、"扬声器"、"通道4输出"、"扬声器"、"通道5输出"、"扬声器"、"通道6输出"、
                   "麦克风"、"信道1英寸"、"麦克风"、"信道2英寸"、"麦克风"、"信道3英寸"、"麦克风"、"信道4英寸"、"麦克风"、"信道5英寸"、"麦克风"、"信道6英寸";
        简单音频卡、路由=   "通道1输出"、"AOUT1L"、"通道2输出"、"AOUT1R"、"通道3输出"、"AOUT2L"、"通道4输出"、"AOUT2R"、"通道5输出"、"AOUT3L"、"AOUT63R"、"通道6输出"
                                                     "Channel1in"、"AIN1L"、"Channel2in"、"AIN1R"、"Channel3in"、"AIN2L"、"Channel4in"、"AINR2"、"Channel5in"、"AIN3L"、"Channel6in"、"AIN3R";
          simple-audio-card、di-link@0{
                      格式="left_j";
                      
                 /*bitclock-master =<&pcm3168a_DAC>;
                 FRAME-MASTER =<&pcm3168a_DAC>;*/
                   CPU{
                         ??Sound-Dai =<?Sa义1>;
                       di-tdm-slot-num =<6>;
                       di-tdm-slot-width =<32>;
                   };
                   pcm3168a_DAC:编解码器{
                       sound-dai =<&pcm3168a 0>;
                       时钟=<&clk IMX8MM_CLK_SAI1_ROOT>;
                   };
        };
             simple-audio-card、di-link@1{
                      格式="left_j";
                      /*bitclock-master =<&pcm3168a_adc>;
                      FRAME-MASTER =<&pcm3168A_ADC>;*/
                      CPU{
                            ??Sound-Dai =<?Sa义1>;
                            di-tdm-slot-num =<8>;
                            di-tdm-slot-width =<32>;
                      };
                      pcm3168a_adc:编解码器{
                            Sound-Dai =<&pcm3168a 1>;
                            时钟=<&clk IMX8MM_CLK_SAI1_ROOT>;
                      };
        };
       };

    现在、我正在努力录制音频。 我可以录制到 wav 文件、但我听到的是无声。

    arecord -D 插头:MIC1 -r 48000 -f S24_LE mic1.wav
    [1107.914919]### pcm3168a_RT_RESUME
    [1107.916124]### pcm3168a_reset
    [1107.945269]### pcm3168a_startup Dae_id 1、fmt 1;tdm_slots 0
    [1107.949856]### pcm3168A_hw_params SYSCLK 12288000;速率48000;比率256
    [1107.956926]### pcm3168a_hw_params master_mode 0;fmt 1;tdm_slots 0;tdm_mask 0;slot_width 0
    [1107.96496]### pcm3168a_hw_params main_mode 0;fmt 1;slot_width 24
    录制波'mic1.wav':有符号24位小端字节序、速率48000Hz、单声道
    ^已通过信号中断中止...
    [1107.974835]### pcm3168a_hw_params tm_slots 6;

    [1121.627309]### pcm3168a_RT_SUSPEND

    e2e.ti.com/.../mic1.wav

    似乎缺少一些配置

    此致、

    Cesário μ A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请在记录期间转储寄存器。

    命令如下所示、不要忘记"&"

    arecord -D 插头:MIC1 -r 48000 -f S24_LE mic1.wav &

    i2cdump -fY 1 i2c_addr

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    i2cdump -fY 2 0x44
    未指定大小(使用字节数据访问)
    警告! 该程序会使您的 I2C 总线混淆、导致数据丢失和更糟糕的情况!
    我将探测文件/dev/i2c-2、地址0x44、模式字节
    继续? [是/否]
    0 1 2 3 4 5 6 7 8 9 A b c d e f 0123456789abcdef
    00:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    10:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    20:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    30:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    40:C0 01 f0 00 00 00 D7关断关断 很棒的酒店
    50:00 07 00 00 00 00 00 00 00 D7 D7 D7 D7 D7 D7 D7 00… ?????? 。
    60:00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00........ ?。
    70:00 90 3f 04 00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2A 2A 00 85 00 00 .?.***** ?。。
    80:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    90:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    A0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    B0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    C0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    D0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    E0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、盛豪、

    我已提取该寄存器转储并在其中添加注释。

     仅供参考、ADC 为24位左对齐 TDM 格式。

    e2e.ti.com/.../config1.xlsx

    此致。