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.

[参考译文] Linux/AM3354:TLV320AIC3254编解码器问题

Guru**** 2589275 points
Other Parts Discussed in Thread: AM3354, TLV320AIC3254, TPS65910

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/590301/linux-am3354-tlv320aic3254-codec-issue

器件型号:AM3354
主题中讨论的其他器件: TLV320AIC3254TPS65910

工具/软件:Linux

您好:

    我们正在开发基于 AM3354的定制板。

   我们的 BSP 是 ti-processor-sdk-linux-am335x-evm-03.02.00.05

    我们使用 TLV320AIC3254作为编解码器芯片、并将其连接到 McASP0上的 AM3354。

I2S 总线的硬件连接如下所示:

       AM3354                                                                     TLV320AIC3254     
     McASP0_ACLKX                                               <- BCLK McASP 发送位时钟。
     McASP0_FSX                                                   <- WCLK McASP 发送帧同步或左/右时钟(LRCLK)
     McASP0_AXR0                                                 -> DIN
     McASP0_AXR1                                                 <- DOUT

对于 TLV320AIC3254。我们将麦克风连接到 IN1L 和 IN1R。 我们有一个耳机连接到 TLV320AIC3254的 HPL 和 HPR

下面是我的 DTS 文件配置:

 听起来{
  兼容="简单音频卡";
  simple-audio-card、name ="tlv320aic32x4";
  simple-audio-card、小工具=
   "耳机"、"耳机插孔"、
   "线路"、"线路输入";
  简单音频卡,路由=
   "耳机插孔"、 "HPL"、
   "耳机插孔"、 "HPR"、
   "IN1_L"、  "线路输入"、
   "IN1_R"、  "线路输入";
  simple-audio-card、format ="I2S";
  simple-audio-card、bitclock-master =<&sound_master>;
  simple-audio-card、frame-master =<&sound_master>;
  简单音频卡、位时钟反转;

  简单音频卡、CPU{
   Sound-Dai =<&McASP0>;
  };

  sound_master:simple-audio-card、codec{
   sound-dai =<&tlv320aic32x4>;
   系统时钟频率=<12000000>;
  };
 };

 i2c1_pins:pinmux_i2c1_pins{
  pinctrl-single、pins =<
   0x168 (PIN_INPUT_PULLUP | MUX_MODE3) /* uart0_CTSN.i2c1_sda AM335X_I2C1_SDA *
   0x16C (PIN_INPUT_PULLUP | MUX_MODE3) /* uart0_rtsn.i2c1_SCL AM335X_I2C1_SCL *
  >;
 };

(笑声)

 McASP0_Pins:McASP0_Pins{
  pinctrl-single、pins =<
   AM33XX_IOPAD (0x9A8、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0_axr1.McASP0_axr1 AM335X_McASP0_AXR1 *
   AM33XX_IOPAD (0x998、PIN_INPUT 下拉| MUX_MODE0)/* McASP0_axr0.McASP0_axr0 AM335X_McASP0_AXR0 *
   AM33XX_IOPAD (0x994、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0_FSX.McASP0_FSX AM335X_McASP0_FSX *
   AM33XX_IOPAD (0x990、PIN_INPUT_PULLDOWN | MUX_MODE0)/* McASP0_aclkx.McASP0_aclkx AM335X_McASP0_ACLKX *
  >;
 };

i2c1{(&I)
 pinctrl-names ="default";
 pinctrl-0 =<&i2c1_PINs>;

 状态="正常";
 时钟频率=<100000 >;

 tlv320aic32x4:tlv320aic32x4@18{
  #sound-di-cells =<0>;
  兼容="ti、tlv320aic32x4";
  reg =<0x18>;
 };
};

(笑声)

&McASP0 {
 #sound-di-cells =<0>;
 pinctrl-names ="default";
 pinctrl-0 =<&McASP0_PINs>;
 状态="正常";
 OP-MODE =<0>; /* MCASP_IIS_MODE */
 TDM-SLOTS =<2>; /*表示通过一个串行器发送或接收的通道数。 *
 serial-dir =< /* 0:非活动、1:TX、2:Rx *
   1 2 0 0
  >;
 tx-num-evt =<32>;
 Rx-num-evt =<32>;
};

所以。

启动 Linux 后、我们可以看到如下内核日志:

    ASOC-simple-card sound:tlv320aic32x4-hifi <->48038000.McASP 映射正常
    ALSA 设备列表:
     0:AM335x-EVM

因为我发现 alsa-lib 和 alsa-utils 已经在 ti SDK rootfs 中就位。

在 asound.conf 上没有任何配置

我刚才这么做了:

root@AM335x-EVM:/home# aplay -vv s.wav
播放波形's.wav':有符号16位小端序、速率44100Hz、立体声
插入 PCM:硬件 PCM 卡0 "tlv320aic32x4"设备0子设备0
其设置为:
 流:      播放
 访问      :rw_interleaved
 格式      :S16_LE
 子格式   :标准
 频道    :2.
 价格        :44100
 确切价格  : 44100(44100/1)
 msbits      :16.
 Buffer_size :22052
 Period_size :5513
 Period_Time :125011
 tstamp_mode :无
 tstamp_type :单调
 Period_step :1.
 AVAIL_MIN   :5513
 Period_event:0
 START_THRESHOLD :22052
 STOP_THRESHOLD  :22052
 Silence_threshold:0
 Silence_size:0
 边界    :1445199872
 appl_ptr    :0
 HW_PTR      :0
最大峰值(11026个样本):0x00000000 #0%                    
最大峰值(11026个样本):0x00000002 #                   0%
最大峰值(11026个样本):0x00000004 #                   0%
最大峰值(11026个样本):0x00000005 #                   0%
最大峰值(64个样本):0x00000004 #                   0%
aplay:PCM_WRITE:1940:写入错误:输入/输出错误

耳机发出声音...一段时间后、不会发出声音。aplay 刚刚停止、出现以下错误 "aplay:PCM_WRITE:1940:WRITE ERROR:input/output error"(aplay:PCM_WRITE:1940:写入错误:输入/输出错误)

下面是我获得的一些附加信息:

root@AM335x-EVM:/home# ls -l /dev/snd
drwxr-xr-x   2 root               用户60 Feb. 1008:57 by-path
crw-rw--   1根    音频    116,  2月10日08:57 controlC0
crw-rw--   1根    音频    116,  2月4日1008:57pcmC0D0c
crw-rw--   1根    音频    116,  2月3日1008:57pcmC0D0p
crw-rw--   1根    音频    116, 2月33日1008:57计时器

root@AM335x-EVM:/home# aplay -l
****播放硬件设备列表****
卡0:tlv320aic32x4 [tlv320aic32x4],设备0:davinci-mcasp.0-tlv320aic32x4-htlifi v320aic32x4-hife-0 []
 子设备:1/1
 子设备#0:子设备#0

root@AM335x-EVM:/home# aplay -L
null
   丢弃所有样本(回放)或生成零样本(捕获)
脉冲
   PulseAudio Sound 服务器
默认:card=tlv320aic32x4
   tlv320aic32x4、
   默认音频设备
sysdefault:card=tlv320aic32x4
   tlv320aic32x4、
   默认音频设备


根目录@AM335x-EVM:/home# arecord -l
****捕获硬件设备列表****
卡0:tlv320aic32x4 [tlv320aic32x4],设备0:davinci-mcasp.0-tlv320aic32x4-htlifi v320aic32x4-hife-0 []
 子设备:1/1
 子设备#0:子设备#0

root@AM335x-EVM:/home# cat /proc/asound/card0/pcm0c/info
卡:0
器件:0
子设备:0
流:捕获
ID:Davinci-McASP/0-tlv320aic32x4-hifi tlv320aic32x4-hifi-0
姓名:
子名称:子设备#0
类:0
子类:0
subdevices_count:1.
子设备_可用:1.
root@AM335x-EVM:/home# cat /proc/asound/card0
ID    pcm0c/pcm0p/
root@AM335x-EVM:/home# cat /proc/asound/card0/pcm0p
信息 子0/
root@AM335x-EVM:/home# cat /proc/asound/card0/pcm0p/info
卡:0
器件:0
子设备:0
流:播放
ID:Davinci-McASP/0-tlv320aic32x4-hifi tlv320aic32x4-hifi-0
姓名:
子名称:子设备#0
类:0
子类:0
subdevices_count:1.
子设备_可用:1.
根目录@AM335x-EVM:/home# AMI
amidi  amixer
root@AM335x-EVM:/home# amixer
简单混频器控制'PCM'、0
 功能:pvolume
 播放频道:左前-右前
 限制:回放0 - 175
 单声道:
 左前:回放87 [50%][-20.00dB]
 右前:回放87 [50%][-20.00dB]
简单混频器控制'IC PGA'、0
 功能:psswitch
 播放频道:左前-右前
 单声道:
 左前:回放[关闭]
 右前:回放[关闭]
简单混频器控制'ADC 电平'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 64
 左前:24 [38%][0.00dB]
 右前:24 [38%][0.00dB]
简单混频器控制'ADCFGA Left Mute '、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[ON]
简单混频器控制'ADCFGA 右静音'0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[ON]
简单混频器控制'AGC 攻击时间'0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 31
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'AGC 衰减时间'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 31
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制"AGC 增益迟滞"、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 3
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'AGC 滞后'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 3
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'AGC LEFT'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'AGC Max PGA'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 127
 左前:127 [100%]
 右前:127 [100%]
简单混频器控制"AGC 噪声去抖"、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 31
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'AGC 噪声阈值'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 31
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'AGC right'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'AGC 信号去抖'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 15
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'AGC 目标电平'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 7
 左前:0 [0%]
 右前:0 [0%]
简单混频器控制'HP DAC'、0
 功能:psswitch
 播放频道:左前-右前
 单声道:
 左前:回放[关闭]
 右前:回放[关闭]
简单混频器控制'HP Driver Gain'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 35
 左前:6 [17%][0.00dB]
 右前:6 [17%][0.00dB]
简单混频器控制'HPL 输出混频器 IN1_L'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'HPL 输出混频器 L_DAC'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'HPR 输出混频器 IN1_R'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'HPR 输出混频器 R_DAC'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'LO DAC'、0
 功能:psswitch
 播放频道:左前-右前
 单声道:
 左前:回放[关闭]
 右前:回放[关闭]
简单混频器控制'LO 驱动器增益'0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 35
 左前:6 [17%][0.00dB]
 右前:6 [17%][0.00dB]
简单混频器控制'LOL 输出混频器 L_DAC'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制"LOR 输出混频器 R_DAC"、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'Left Input Mixer IN1_L P'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制"左输入混频器 IN2_L P"、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'Left Input Mixer in3_L P'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'PGA 电平'、0
 功能:卷
 播放频道:左前-右前
 捕获信道:左前-右前
 限值:0 - 95
 左前:0 [0%][0.00dB]
 右前:0 [0%][0.00dB]
简单混频器控制"右输入混频器 IN1_R P"、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制"右输入混频器 IN2_R P"、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]
简单混频器控制'Right Input Mixer in3_R P'、0
 功能:pswitch psswitch 已连接
 回放频道:单声道
 单声道:回放[关闭]

我对 ALSA 或内核的音频驱动程序部分并不熟悉、因此我不知道从何处开始处理此错误。

大家可以帮助吗?

提前非常感谢!!

信标

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还在此处附上原理图供您参考

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

    您是否在 DTS 中的任何位置定义了 tlv320aic32x4的电源? 有关详细信息、请参阅 Documentation/devicetree/bindings/sound/tlv320aic32x4。

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

    Yordan 您好:

        由于 AIC3254的电源未连接到我们的 PMIC tps65910。它连接到固定的 LDO。一旦主电源打开、电源就无法关闭。

        因此,我删除了具有 regulator_enable()和 regulator_disable() API 的 tlv320aic32x4.c 中的 aic32x4_setup_regulators()和 aic32x4_disable_regulators()中的所有内容。

        否则、tlv320aic32x4.c wil 会检查我是否已在 DTS 中定义了有关电源的内容、并在初始化时弹出错误、如"缺少电源"dv"或"ldoin"

      

        当驱动程序在初始化时报告此错误时也会发生同样的情况:

    "tlv320aic32x4 1-0018:获取 MCLK 失败。 如果没有 MCLK、当前的执行不支持使用这个编解码器"

    正如前面附加原理图的消息所示、我们的 MCLK 直接连接到12.288MHz 的示波器、因此 AM3354也不会生成。

    因此,基于这个原因,我还删除了 tlv320aic32x4.c 中的所有 clk_prepare_enable() API

    感谢您的建议!

    信标

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan 您好:
    我今天还有另一个发现。
    我尝试检查了 i2c 通信。看起来不错:
    root@AM437X-EVM:~# i2cset -f -y -r 1 0x18 0x22 0x20
    写入值0x20、回读匹配
    root@AM437X-EVM:~# i2cget -f -y 1 0x18 0x22
    0x20
    我还使用 oscilloscope.it 检查了 i2c 波形、看起来不错。
    当我尝试"aplay xxx.wav"时。 我还可以看到正在发送一组 i2c 命令/数据。

    但是、当我检查 I2S 波形时、我什么也没有。
    当我尝试"aplay xxx.wav"时、4个 McASP 引脚中的任何一个都没有波形出现。(BCLK WCLK DIN DOUT)

    有什么想法,这里有什么问题?


    谢谢

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

    我将查看这个并更新该线程。

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

    您好!

    是否可以附加您的引导日志?
    您的 DTS 和硬件连接看起来正确。 您能否查看此 wiki 中列出的要点:
    processors.wiki.ti.com/.../Sitara_Linux_Audio_DAC_Example 

    特别注意 ALSA 机器层设置。  

    此致、
    Yordan

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

    e2e.ti.com/.../kernel-start-log.txt

    Yordan 您好:

         感谢您帮助确认硬件和 DTS 是否正确。

          内核日志已附在上面。请检查。 在内核启动日志中似乎找不到任何奇怪的东西。请帮我检查一下。

         有关详细信息、我将查看"Sitara Linux 音频 DAC 示例"。谢谢。

         我怀疑有问题、但如果我错了、请纠正问题:

         因为 BCLK 和 WCLK 都是 AIC3254生成的时钟信号。 然后馈送到 AM3354。对吧?

         因此,由于播放音乐时 I2S 总线上根本看不到任何信号, AIC3254是否配置不正确,无法正常工作?

          因此、可能需要在代码中更改某些内容(tlv320aic32x4.c 或 simple-card.c?)?

         感谢你的帮助。

    此致

    信标

         

         

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

    启动日志似乎正常。 这应该是与 alsa 机器层或在 Linux 文件系统中的 alsa 集成在一起的东西。
    请首先根据 wiki 检查您的代码。

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

    你(们)好

       谢谢。

      我会深入研究并返回!