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:将编解码器驱动程序集成到 Linux 中

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1341717/pcm3168a-codec-driver-integration-into-linux

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

集成 pcm3168a 编解码器驱动程序时我们会面临的问题。

目标器件和版本详细信息如下:

内核版本:- 4.19.35

CPU :- I. MX6Q

 

根据 https://bootlin.com/blog/eight-channels-audio-on-i-mx7-with-pcm3168/、我们按如下方式配置了器件树

 

   sound-pcm3168a{

             兼容="简单音频卡";

             simple-audio-card、name ="pcm3168a-audio ";

             simple-audio-card、小工具="扬声器"、"信道1out"、

                                                                       "扬声器"、"通道2out"、

                                                                       "扬声器"、"通道3out"、

                                                                       "扬声器"、"通道4out"、

                                                                       "扬声器"、"通道5out"、

                                                                       "扬声器"、"Channel6out"、

                                                                       "麦克风"、"通道1输入"、    

                                                                       "麦克风"、"通道2in"、

                                                                       "麦克风"、"通道3输入"、

                                                                       "麦克风"、"Channel4in"、

                                                                       "麦克风"、"通道5in"、

                                                                       "麦克风"、"信道6in";

                                                         

             simple-audio-card、路由="通道1out"、"AOUT1L"、

                                                                       "通道2out"、"AOUT1R"、

                                                                       "通道3out"、"AOUT2L"、

                                                                       "通道4out"、"AOUT2R"、

                                                                       "通道5out"、"AOUT3L"、

                                                                       "通道6out"、"AOUT3R"、

                                                                       "通道1IN"、"AIN1L"、

                                                                       "通道2in"、"AIN1R"、

                                                                       "通道3输入"、"AIN2L"、

                                                                       "Channel4in"、"AIN2R"、

                                                                       "通道5in"、"AIN3L"、

                                                                       "Channel6in"、"AIN3R";

               simple-audio-card、da-link@0 {

                       格式="left_j";

                       bitclock-master =<&pcm3168a_dac>;

                       FRAME-MASTER =<&pcm3168a_dac>;

 

                       SAI_DAI:CPU{

                               Sound-Dai =<和 esai>;

                               dia-tdm-slot-num =<8>;

                               da-tdm-slot-width =<32>;

                       };

 

                       pcm3168a_dac:编解码器{

                               sound-Dai =<&pcm3168a 0>;

                               Clocks =<&CODEC_osc>;

                       };

               };

               simple-audio-card、di-link@1 {

                       格式="left_j";

                       bitclock-master =<&pcm3168a_adc>;

                       FRAME-MASTER =<&pcm3168a_adc>;

 

                        CPU{

                               Sound-Dai =<和 esai>;

                               dia-tdm-slot-num =<8>;

                               da-tdm-slot-width =<32>;

                       };

 

                       pcm3168a_adc:编解码器{

                               sound-dai =<&pcm3168a 1>;

                              Clocks =<&CODEC_osc>;

                       };

               };                                                     

       };    

 

 

// I2C

             pcm3168a:音频编解码器@44 {

                            兼容="ti,pcm3168a";

                            寄存器=<0x44>;

                            #sound-Da-cells =<1>;

                            Clocks =<&CODEC_osc>;

                            时钟名称="scki";

                            VDD1-SUPPLY =<Registered_AUDIO>;

                            VDD2-SUPPLY =<Registered_AUDIO>;

                            VCCAD1-SUPPLY =<Registered_AUDIO_5v0>;

                            VCCAD2-SUPPLY =<Registered_AUDIO_5v0>;

                            VCCDA1-SUPPLY =<Registered_AUDIO_5v0>;

                            VCCDA2-SUPPLY =<Registered_AUDIO_5v0>;

             };

 

//时钟

             时钟{

                            codec_osc:anaclk2{

                                          兼容="固定时钟";

                                          #clock-cells =<0>;

                                          时钟频率=<24576000>;

                            };

             };

 

 

  • 外部24.58MHz 振荡器连接到 SCKI/MCLK。
  • 编解码器器件列表

       

  • 当我以48000采样率播放采用"S24_LE"格式的声音时、会出现以下错误。

       

  • 根据上述错误、我将模式更改为从模式和右对齐格式。 之后、我得到以下错误。

       

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

    您好、Malakala:

    我们的司机专家盛豪将尽快发表评论。

    此致、

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

    嗨、

    操作简单。 对于第一个问题、播放  S24_LE 和48000Hz、 在我看来、音频框架将在音频原始位流上有预分频、并将数据转换为 S32_LE。 请确认 aplay S32_LE 48kHz 是否可以工作?

    对于第二个问题、在将 PCM3168A 设置为从站之后、您是否已将平台设置为主站? 文龙的语气里露出了一丝软弱 。 它报告说这是 clk 问题。

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

    您好!

    在 S32_LE 中、48kHz 也首次不起作用。


    [110.089913] FSL-esai-dai 2024000.esai:无法得出所需的 sckt 速率
    [ 110.098556] FSL-esai-Dai 2024000.esai: ASOC:不能设置2024000.esai 硬件参数:-22

    对于第二种情况:  

    我将格式更改为右对齐。 (format ="right_j"-->在 DTS 中)并添加了 bitclock-master 和 帧主属性注释。

    例如:  

    simple-audio-card、di-link@1 {
    格式="right_j";
    // bitclock-master =<&pcm3168a_dac>;
    // FRAME-MASTER =<&pcm3168a_dac>;

    SAI_DAI:CPU{
    Sound-Dai =<和 esai>;
    dia-tdm-slot-num =<8>;
    da-tdm-slot-width =<32>;
    };

    pcm3168a_dac:编解码器{
    sound-Dai =<&pcm3168a 0>;
    Clocks =<&CODEC_osc>;
    };
    };

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

    对于第一种情况、您是否为 pcm3168设置了 MCLK? 请在 pcm3168a_set_dai_SysClk 中添加 log、让我们检查返回值以及 clk 的大小。

    在第二种情况下、您必须保留 bitclock-master 和 frame-master、为主器件分配一个

    //bitclock-master =<&pcm3168a_dac>;
    // FRAME-MASTER =<&pcm3168a_dac>;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否为 pcm3168设置了 MCLK? 它由外部晶振生成。  


    以下是 clk 的日志。

      

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

    请在播放期间使用示波器测量 MCLK、WS 时钟和位时钟。 然后上传这些时钟的波形、并在这里转储寄存器。

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

    是的、我同意盛豪的建议、原理图看起来不错、因此请验证时钟频率。