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.

[参考译文] TLV320AIC3106:Sitara AM437x 架构的 AGC、降噪和回声消除编解码器选择

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1456097/tlv320aic3106-codec-choice-for-agc-noise-cancelling-and-echo-cancellation-for-sitara-am437x-architecture

器件型号:TLV320AIC3106
Thread 中讨论的其他器件: TAC5212

工具与软件:

我们目前在 Sitara AM437x 架构上使用 TLV320AIC3106编解码器、并使用 SDK.05.02.00.10。

我有两个问题。

问题1。 您是否有关于我们可以使用的其他编解码器的建议、该编解码器可以为我们提供更高质量的 AGC 和噪声滤波功能、同时还可以为我们提供额外的回声消除功能? 我们想保持 我们的硬件总体设计基于 AM437x 入门套件、但用最少的软件更改来替换编解码器? 我认为 TLV320AIC32x0系列编解码器可能是一个不错的选择。 我是否可以   在 Sitara AM437x 架构上使用 TLV320AIC32x0系列编解码器代替 TLV320AIC3106编解码器、而无需在硬件和软件设计中进行大量更改?

问题2:  对于我们现有的架构、我编写了一个程序、使用 i2c 接口写入/读取 TLV320AIC3106编解码器寄存器。 例如、我可以进行写入以启用寄存器26位7上的 LAGC、并通过读回寄存器来验证其是否写入。 但是、当使用混叠器来验证是否已发生写入时、我仍然将 AGC 设置为关闭。

~# amixer sget AGC.
简单混频器控制'AGC'、0
功能:pswitch
播放通道:左前-右前
单声道:
左前:播放[关闭]
右前:播放[关闭]

不是更少地回读寄存器? 我还尝试使用 amixer 命令设置音量、麦克风静音/取消静音和其他功能。 同样、当我使用 i2c 接口读回寄存器时、仍然无法获取更新的值。 您能指出为什么 amixer 返回的值和我直接从寄存器读取的值不匹配吗?

此致、

Solan Bongase

Alertus Technologies

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

    尊敬的 Solan:

    q1) AIC320x (我想有一个拼写错误)是从 AIC310x 直接升级。 因此您可以更换为 AIC3206。  https://www.ti.com/product/TLV320AIC3206。在引脚和软件方面它们非常相似。

    但是、所有 TLV320AIC 编解码器中的 AGC 架构都是相同的。 直到我们发布了一些较新的 ADC、并且不久将发布的 TAC5212及其编解码器系列才会更改 AGC、但您可以立即购买样片。

    我们本身也不支持编解码器回声消除。 DSP 的强大功能加快了我们当前的 DSP 编解码器能够实现的功能。 我们鼓励客户在其他一些 SoC 或 DSP 上托管算法、以获得最佳性能和体验。

    Q2)这将需要发送给我们团队的其他成员。 我已转发该 TT。

    此致、
    Jeff McPherson

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

    尊敬的 Solan:

    只是为了确保您安装了 PulseAudio-alsa 吗? 此外、您是否已将自己添加到 Linux 设备上的音频用户组? 听起来您的 ALSA 没有与编解码器通信。

    请告诉我这方面的信息以及您是否可以运行:

    aplay -lL
    amixer -c1
    pactl list cards
    pactl list sinks
    pactl list sink-inputs

    我知道会发生什么情况。  

    此致!
    MIR

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

    Jeff、非常感谢假日季的快速响应。 我有一个后续问题。 我想说的是、在 AGC 支持方面、AIC310x 和 AIC320x 表现类似。 不过、如果我们仍用 AIC320x 替换 AIC310x、我们是否期望获得更好的性能并支持噪声滤波和动态范围压缩?
    此致、

    Solan

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

    嗨、Mir、

    非常感谢本周的快速响应。

    是的、我们在电路板上安装了 pulsequido-alsa。 此外、正如此处所做的、root 是音频组的一部分、并进行了验证。

    root@board:~# usermod -A -G audio root
    root@board:~# id -G root
    029.
    根@:~# id
    UID=0 (root) GID=0 (root) groups=0 (root)、29 (audio)

    以下也是您列出的命令的响应:

    ROOT@BOARD:~# aplay -ll
    null
    丢弃所有样本(播放)或生成零样本(采集)
    电流
    PulseAudio Sound 服务器
    默认:CARD=SNDCANDAME
    SNDCARD 名称、
    默认音频设备
    sysdefault:CARD=SNDCANDAME
    SNDCARD 名称、
    默认音频设备
    ****播放硬件设备列表****
    卡0:SNDCARDNAME [SNDCARD-NAME]、器件0:Davinci-McASP.0-tlv320aic3x-hifi tlv320aic3x-hif-0 []
    子器件:1/1
    子器件#0:子器件#0


    ROOT@BOARD:~# amixer -C1.
    卡号无效。
    用途:amixer [命令]

    提供的选项:
    -h,--help 此帮助
    -c、--card N 选择卡
    -D、--device N 选择设备、默认"默认"默认"
    -d、--debug 模式
    -n,--noscheck 不执行范围检查
    此程序的-v,--version 打印版本
    -q,--quiet 要安静
    -i、--inactive 也显示未激活的控件
    -a、--abstract L 选择抽象级别(无或基本)
    -s、--stdin 从 stdin 顺序读取和执行命令
    -R、--raw 卷使用原始值(默认值)
    -M、--mapped-volume 使用映射的卷

    可用命令:
    控件显示所有混频器简单控件
    scontents 显示所有混频器简单控件(默认命令)的内容
    SSET SID P 设置一个混频器简单控制的内容
    sget SID 获取一个混频器简单控件的内容
    控件显示给定卡的所有控件
    目录显示给定卡的所有控件的内容
    CSET CID P 为一个控件设置控件内容
    获取 CID 获取一个控件的控件内容


    root@board:~# pactl list cards.
    卡#0
    名称:alsa_card.platform-sound
    驱动程序:module-alsa-card.c
    所有者模块:1.
    属性:
    alsa.card ="0"
    alsa.card_name ="SNDCARD-NAME"
    alsa.long_card_name ="SNDCARD-name"
    alsa.driver_name ="snd_soc_simple_card"
    device.bus_path ="platform-sound"
    sysfs.path ="/devices/platform/sound/sound/card0 "
    device.form_FACTOR ="内部"
    device.string ="0"
    device.description ="内置音频"
    module-udev 检测.discovered ="1"
    device.icon_name ="音频卡"
    配置文件:
    输入:模拟-立体声:模拟立体声输入(灌电流:0、源:1、优先级:60、可用:是)
    输出:模拟-立体声:模拟立体声输出(灌电流:1、源:0、优先级:6000、可用:是)
    输出:模拟-立体声+输入:模拟-立体声:模拟立体声双工(灌电流:1、源:1、优先级:6060、可用:是)
    关:关(灌电流:0、拉电流:0、优先级:0、可用:是)
    活动配置文件:输出:模拟立体声+输入:模拟立体声
    端口:
    模拟输入:模拟输入(优先级:10000、延迟偏移:0usec)
    部分配置文件:输入:模拟立体声、输出:模拟立体声+输入:模拟立体声
    模拟输出:模拟输出(优先级:9900、延迟偏移:0usec)
    部分配置文件:输出:模拟立体声、输出:模拟立体声+输入:模拟立体声


    root@board:~# pactl list sinks.
    受电方#0
    状态:已暂停
    名称:alsa_output.platform-sound.analogue-stereo
    说明:内置音频模拟立体声
    驱动程序:module-alsa-card.c
    样片技术规格:s16le 2ch 44100Hz
    通道映射:左前、右前
    所有者模块:1.
    静音:否
    音量:左前:65536 / 100%/ 0.00 dB、右前:65536 / 100%/ 0.00 dB
    余额0.00
    基本体积:65536 / 100%/ 0.00 dB
    监控资料来源:alsa_output.platform-sound.analogue-stereo.monitor
    延迟:0usec、配置为0usec
    flags:硬件 HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
    属性:
    alsa.resolution bits ="16"
    device.api ="alsa"
    device.class ="声音"
    alsa.class ="通用"
    alsa.subclass ="generic-mix"
    alsa.name =""
    alsa.id ="davinci-McASP.0-tlv320aic3x-hifi tlv320aic3x-hif-0"
    alsa.subdevice ="0"
    alsa.subdevice_name ="子器件#0"
    alsa.device ="0"
    alsa.card ="0"
    alsa.card_name ="SNDCARD-NAME"
    alsa.long_card_name ="SNDCARD-name"
    alsa.driver_name ="snd_soc_simple_card"
    device.bus_path ="platform-sound"
    sysfs.path ="/devices/platform/sound/sound/card0 "
    device.form_FACTOR ="内部"
    device.string ="HW:0"
    device.buffing.buffer_size ="131072"
    device.buffering.fragment_size ="65536"
    device.access_mode ="mmap+timer"
    device.profile.name ="模拟立体声"
    device.profile.description ="模拟立体声"
    device.description ="内置音频模拟立体声"
    module-udev 检测.discovered ="1"
    device.icon_name ="音频卡"
    端口:
    模拟输出:模拟输出(优先级:9900)
    有源端口:模拟输出
    格式:
    PCM


    root@board:~# pactl list sink-input

    根@板:~#

    再次感谢您的观看、Mir。

    此致、

    Solan

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

    尊敬的 Solan:

    看起来您没有使用器件的驱动程序、而只是一个示例驱动程序。 SND_SoC_Simple 卡。 所以、器件未正确连接到 ALSA。 确保下载 tlv320aic3x 驱动程序并将其用于该实现。 您可能需要在 DTS 文件中指定。 以下是驱动程序及其文档:

    https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/sound/soc codecs/tlv320aic3x.c.
    https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/sound/soc codecs/tlv320aic3x.h
    https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml

    请告诉我安装此驱动程序后、这些命令会发生什么情况。

    此致!
    MIR

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

    嗨、Mir、

    这就是我从 dmesg 中得到的东西。 如您所见、SND_SoC_tlv320aic3x 驱动程序已胜出。

    [8.193212] of_get_named_gpiod_flags:无法解析节点"/opcp@44000000/i2c@4802a000/tlv320aic3106@1b[0]的"GPIO-RESET"属性
    [8.300444] spidev spidev 1.0: Buggy DT: spidev directly listed in DT
    [8.300452]--- [剪切于此处]--------
    [ 8.300479]警告:CPU:0 PID:140 at drivers/spi/spidev.c:730 spidev_prob+0x1a4/0x1d4 [spidev]
    [ 8.300483]已链接的模块:spidev (+) snd_soc_tlv320aic3x wkup_m3_IPC at24 phy_OMAP_USB2 rtc_OMAP OMAP_WDT wkup_m3_rproc remoteproc_fq_codel uio_module_drv (O) uio FTDI_SIO usbserial usbcore USB_common cryptodev (O)



    [9.171970] of_get_named_gpiod_flags:不能解析节点'/sound[0]'的'imple-audi-Card,hp-det-gpio'属性
    [9.171980] of_get_named_gpiod_flags:不能解析节点'/sound[0]'的'imple-audi-Card,mic-det-gpio'属性
    [9.201967] ASOC-simple-card sound: tlv320aic3x-hifi <->4803c000.McASP 映射正常

    使用 lsmod、也会加载以下驱动程序:


    root@alertus-tts2:~# lsmod | grep snd.
    SND_SoC_simple_card 16384 2.
    SND_SoC_simple_card_utils 16384 1 SND_SoC_simple_card
    SND_SoC_tlv320aic3x 57344 1.

    我们使用的 dts 还指定了 tlv320aic3x 模块、如下所示:

    声音{
          Compatible ="简单音频卡";
          simple-audio-card、name ="Alertus-TTS2";
          simple-audio-card、widget =
          "耳机"、"耳机插孔"、
          "microcon"、"Mic Jack";//经过编辑以启用模拟 MIC
          简单音频卡、路由=
          "耳机插孔"、"HPLOUT"、
          "耳机插孔"、"HPROUT"、
          "MIC3L"、"MIC 插孔"、//经过编辑以启用模拟 MIC
          "MIC3R"、"MIC 插孔"、//经过编辑以启用模拟 MIC
          "MIC 插孔"、"MIC 偏置";//添加以启用模拟 MIC
          simple-audio-card、format ="Dsp_b";
          simple-audio-card、bitclock-master =<&sound_master>;
          simple-audio-card、frame-master =<&sound_master>;
          简单音频卡、位时钟反转;

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

          sound_master:simple-audio-card、codec{
          Sound-Dai =(&tlv320aic3106>;
          系统时钟频率=<24000000>;
          };
    };

    &i2c1{//codec
          状态="正常";
          pinctrl-names ="默认值";
          pinctrl-0 =<&i2c1_pins>;
          时钟频率=<400000>;

          tlv320aic3106:tlv320aic3106@1b{//音频编解码器
                #sound-Di-cells =<0>;
                Compatible ="ti、tlv320aic3106";
                REG =<0x1b>;
                状态="正常";

                ai3x-micbis-vg =<1>;//AVDD 被选为 MIC 偏置电压(1 = 2.0V、2 = 2.5V、3 = 3.3V)

                /*稳压器*/
                AVDD-SUPPLY =<&dcdc4>;
                IOVdd-supply =<&dcdc4>;
                DRVDD-supply =<&dcdc4>;
                DVDD-SUPPLY =<&ldo1>;
          };
    };

    root@alertus-tts2:~# cat /sys/module/snd_soc_tlv320aic3x/drivers/i2c \:tlv320aic3x-codec/1-001b/name
    tlv320aic3106

    从我看到的内容中、该板正在使用编解码器 tlv320aic3106的驱动程序。

    我在这里遗漏了什么吗?
    再次感谢您的观看。

    此致、

    Solan

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

    您好!

    您的问题可能来自错误的路由术语? 看着司机,我没有看到术语"耳机"完全写在任何地方的路由设置。 您可以检查驱动程序的"sd_soc_dapm_route"部分、以查看路由连接的可能选项。 您是否可以 在路由和小部件部分尝试"HPLOUT"、"Left HP Out"和类似的语言?

    此 YAML 文件还说明了哪些名称可以在路由属性中使用: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml

    如果这不是问题,我道歉。 是否确定静音和取消静音以及音量更改不起作用? 或者它是否只是不更新 i2c?

    此致!
    MIR

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

    嗨、Mir、

    我会按照您的建议检查布线。 同时,我想让你知道,使用 amixer 命令的静音,取消静音和 AGC 命令实际上对我有用,所以,它肯定能够做出更改。 但是、当我使用 i2c 读取 TLV320AIC3106编解码器的相应寄存器时、仍会看到寄存器未进行相应设置。 这是我的问题。

    此致、

    Solan

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

    很有趣、 我可以咨询我们的 Linux 驱动程序专家。 可能 amixer 命令不会影响实际 i2c、而是计算机上的另一层音频控制、而不是编解码器本身。 这只是一个理论。 我会在下周四处询问、看看我会发现什么。

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

    嗨、Mir、

    我希望你度过一个美好的周末。 我想跟你看看,你是否听说过你的 Linux 驱动程序专家有关的问题,我们设置 amixer 不会相应地从 i2c 寄存器读取。

    此致、

    Solan

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

    尊敬的 Solan:

    我听到了,是的, amixer 通常设置 i2c 命令对应的操作,至少对于 AGC 和路由设置。 静音可能不会更改 i2c... 但是、如果即使在更改路由之后 i2c 中没有任何变化、则 i2c 寄存器缓存可能出现问题。 您可能需要在 tlv320aic3x.c 驱动程序中进行更改:

    cache_type = REGCACHE_NONE、//最初为"REGCACHE_RBTREE"、  

    这在驱动器中。  

    我有这个想法是从这个论坛帖子修复它: https://forums.developer.nvidia.com/t/i2c-read-problem/274668 这不是你的确切问题,但我希望它有所帮助。 请告诉我这是否可以解决此问题!

    此致!
    MIR