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.

[参考译文] TLV320AIC3268:Nvidia AGX Xavier 的 Linux 驱动程序支持

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1432124/tlv320aic3268-linux-driver-support-for-nvidia-agx-xavier

器件型号:TLV320AIC3268

工具与软件:

您好、我正在尝试使用  带有 Nvidia AGX Xavier 处理器的定制电路板上的 TLV320AIC3268音频编解码器 Linux 驱动程序。 我正在使用 tlv320aic3x.c 驱动程序、但无法进行音频捕获/播放。 下面是我正在运行的捕获命令的输出:

ROOT@Jetson-agx-Xavier-Devkit:~# arecord -Dhw:tegraasndt19xmob、0 -c 1 -r 48000 -f S16_LE -d 5 test.wav
录音波"test.wav":有符号16位小端字节序,速率48000Hz,单声道
ARCORD:PCM_READ:2221:读取错误:输入/输出错误

我希望获得一些有关如何解决这些错误的帮助。

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

    您好!

    查看是否可以使用 tlv320aic326x 驱动程序。 您当前的设置似乎无法识别该编解码器。 可在此处下载:

    .c 文件: https://git.ti.com/cgit/ti-analogue-linux-kernel/dmurphy-analogue/tree/sound/soc 75.cdecs/tlv320aic326x.c?id=07adbd28685347b6dad5c6dd651f8b2bfa0ddaf8

    .h 文件: https://git.ti.com/cgit/ti-analogue-linux-kernel/dmurphy-analogue/tree/sound/soc consc/tlv320aic326x.h?id=07adbd28685347b6dad5c6dd651f8b2bfa0ddaf8

    如果同样失败、请告诉我!

    此致!
    MIR

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

    您好、以下是我使用的驱动程序资源(与您以上建议的不同):
    https://github.com/OE4T/linux-tegra-4.9/blob/oe4t-patches-l4t-r32.7.4/sound/soc codecs/tlv320aic3x.c.

    https://github.com/OE4T/linux-tegra-4.9/blob/oe4t-patches-l4t-r32.7.4/sound/soc codecs/tlv320aic3x.h

    您能不能总结一下与您建议的驱动程序相比有什么不同? 此外、我已经添加了一些调试内容、我可以看到正在调用探针和 I2C 写入、以及看到逻辑分析仪上的 I2C 事务。 您能否告诉我、您是如何确定驱动程序无法被识别的?

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

    您好!

    很抱歉没有说明。 您的现场应用工程师已向我发送了一封包含同样问题的电子邮件、但他们包含了 record -l 命令的输出、我没有看到列出的 TI 编解码器。 这使我相信它不会被 ALSA 识别,但现在我看到编解码器可能被称为"tegrasndt19xmob "。 因此、它得到了识别。 我的道歉。  

    根据您的错误、我会认为时钟配置不正确(PLL 设置可能不支持48K 的采样率)、或者驱动器可能存在其他一些问题。 我想我需要更多的信息来全面诊断。 是否还有更多可以检查错误发生位置的日志?  

    至于该驱动程序之间的差异、aic3x 驱动程序并未明确支持 AIC3268。 不同之处在于为计算机定义器件以及任何特定于器件的命令。 如果可以的话,使用我推荐的驱动程序是个好主意。  

    请告诉我有关日志的信息以及您是否能够使用其他驱动程序。 我们将使其正常工作!

    此致!

    MIR

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

    感谢您的答复。  

    "PLL 设置可能不支持48K 采样率"

    您能告诉我 如何检查时钟是否配置错误吗? 当驱动程序初始化时、它会发送一些 I2C 流量来配置编解码器。 是否有任何寄存器需要更改?

    "是否还有更多日志可供我们检查错误发生的位置?"

    我已经发送给现场应用工程师的 dmesg 输出中包含我拥有的所有日志。 如果您希望我 修改驱动程序的某个部分并添加调试信息、我可以这样做。 除此之外、我没有更多的日志。

    "如果可以、使用我推荐的驱动程序是个好主意。"

    我已经尝试了您在开发过程中提到的驱动器。 正如我向您的 FAE 提到的、tlv320aic326x.c 驱动程序会引发更多问题、因为它会在驱动程序初始化序列的早期出现错误、也会出现错误 不会 发送任何 I2C 流量以配置编解码器。 这就是我建议使用 tlv320aic3x.c 驱动程序并对其进行潜在补丁以使其正常运行的原因。

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

    尊敬的 Konstantinos:

    很遗憾、您的 FAE 未向我提供任何信息、告知您目前存在此问题、因此我不知道您之前遇到的驾驶员问题。 如果可以将使用其他驱动程序时遇到的错误复制到此线程、我可能会帮助您使用该驱动程序进行初始化。

    此外、 您能否附加 DT 文件、能否探测器件的 I2S 引脚以 查看 FSYNC 和 BCLK 时钟是否正在运行?

    谢谢您、对延迟响应表示抱歉。

    此致!
    MIR

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

    sound {
    		iommus = <0x02 0x1e>;
    		dma-mask = <0x00 0x5e000000>;
    		iommu-resv-regions = <0x00 0x00 0x00 0x40000000 0x00 0x60000000 0xffffffff 0xffffffff>;
    		iommu-group-id = <0x02>;
    		status = "okay";
    		nvidia,num-codec-link = <0x0c>;
    		nvidia,num-clk = <0x08>;
    		nvidia,clk-rates = <0x10266000 0xac4400 0x2b11000 0x2b11000 0xea60000 0xbb8000 0x2ee0000 0x2ee0000>;
    		nvidia,xbar = <0x43>;
    		nvidia,audio-routing = "x Headphone Jack\0x HPLOUT\0x Headphone Jack\0x HPROUT\0x LINE1L\0x Mic Jack\0x LINE2L\0x Mic Jack";
    		compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x";
    		nvidia,model = "tegra-snd-t19x-mobile-rt565x";
    		clocks = <0x04 0x5d 0x04 0x68 0x04 0x07>;
    		clock-names = "pll_a\0pll_a_out0\0extern1";
    		assigned-clocks = <0x04 0x68 0x04 0x07>;
    		assigned-clock-parents = <0x04 0x5d 0x04 0x68>;
    		mclk-fs = <0x100>;
    		linux,phandle = <0xf8>;
    		phandle = <0xf8>;
    
    		nvidia,dai-link-1 {
    			link-name = "rt565x-playback";
    			cpu-dai = <0x44>;
    			codec-dai = <0x45>;
    			cpu-dai-name = "I2S1";
    			codec-dai-name = "tlv320aic3x-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			num-channel = <0x02>;
    			ignore_suspend;
    			name-prefix = [78 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-2 {
    			link-name = "spdif-dit-1";
    			cpu-dai = <0x46>;
    			codec-dai = <0x47>;
    			cpu-dai-name = "I2S2";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			num-channel = <0x02>;
    			ignore_suspend;
    			name-prefix = [79 00];
    			status = "okay";
    			linux,phandle = <0xf6>;
    			phandle = <0xf6>;
    		};
    
    		nvidia,dai-link-3 {
    			link-name = "spdif-dit-2";
    			cpu-dai = <0x48>;
    			codec-dai = <0x49>;
    			cpu-dai-name = "I2S3";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			num-channel = <0x02>;
    			ignore_suspend;
    			name-prefix = [7a 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-4 {
    			link-name = "spdif-dit-3";
    			cpu-dai = <0x4a>;
    			codec-dai = <0x4b>;
    			cpu-dai-name = "I2S4";
    			codec-dai-name = "dit-hifi";
    			format = "dsp_a";
    			bit-format = "s16_le";
    			srate = <0x1f40>;
    			num-channel = <0x01>;
    			ignore_suspend;
    			name-prefix = [6d 00];
    			status = "okay";
    			tx-mask = <0xff>;
    			rx-mask = <0xff>;
    			bitclock-inversion;
    		};
    
    		nvidia,dai-link-5 {
    			link-name = "spdif-dit-4";
    			cpu-dai = <0x4c>;
    			codec-dai = <0x4d>;
    			cpu-dai-name = "I2S5";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			num-channel = <0x02>;
    			ignore_suspend;
    			name-prefix = [6e 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-6 {
    			link-name = "spdif-dit-6";
    			cpu-dai = <0x4e>;
    			codec-dai = <0x4f>;
    			cpu-dai-name = "I2S6";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0x1f40>;
    			num-channel = <0x01>;
    			ignore_suspend;
    			name-prefix = [6f 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-7 {
    			link-name = "spdif-dit-7";
    			cpu-dai = <0x50>;
    			codec-dai = <0x51>;
    			cpu-dai-name = "DMIC1";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			ignore_suspend;
    			num-channel = <0x02>;
    			name-prefix = [61 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-8 {
    			link-name = "spdif-dit-8";
    			cpu-dai = <0x52>;
    			codec-dai = <0x53>;
    			cpu-dai-name = "DMIC2";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			ignore_suspend;
    			num-channel = <0x02>;
    			name-prefix = [62 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-9 {
    			link-name = "spdif-dit-9";
    			cpu-dai = <0x54>;
    			codec-dai = <0x55>;
    			cpu-dai-name = "DMIC3";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			ignore_suspend;
    			num-channel = <0x02>;
    			name-prefix = [63 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-10 {
    			link-name = "spdif-dit-10";
    			cpu-dai = <0x56>;
    			codec-dai = <0x57>;
    			cpu-dai-name = "DMIC4";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			ignore_suspend;
    			num-channel = <0x02>;
    			name-prefix = [64 00];
    			status = "okay";
    		};
    
    		nvidia,dai-link-11 {
    			link-name = "dspk1-playback";
    			cpu-dai = <0x58>;
    			codec-dai = <0x59>;
    			cpu-dai-name = "DSPK1";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			num-channel = <0x02>;
    			ignore_suspend;
    			name-prefix = "d1";
    			status = "okay";
    		};
    
    		nvidia,dai-link-12 {
    			link-name = "dspk2-playback";
    			cpu-dai = <0x5a>;
    			codec-dai = <0x5b>;
    			cpu-dai-name = "DSPK2";
    			codec-dai-name = "dit-hifi";
    			format = "i2s";
    			bit-format = "s16_le";
    			srate = <0xbb80>;
    			num-channel = <0x02>;
    			ignore_suspend;
    			name-prefix = "d2";
    			status = "okay";
    		};
    	};

    您好、在上面、您可以在 DTS 文件中找到相关的声音节点。 如果您还需要 DTS 文件中的另一部分、请告诉我、我可以将其发送。 我正在对 I2S 引脚进行检测、将我看到的内容告知您。

    关于其他驱动程序、以下是我遇到的错误:

    [4.714858] Tegra-ASOC:声音:ASOC:CODEC DAI tlv320aic3x-hifi 未注册

    [4.714937] Tegra-ASOC:声音:SND_SoC_REGISTER_CARD 失败(-517)

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

    尊敬的 Konstantinos:

    谢谢您的参与。  从在线搜索看、器件无法注册的问题可能是编解码器的名称定义错误所致、以及可能无法正确设置 I2S 通道。 查看此主题: https://forums.developer.nvidia.com/t/nano-audio-codec-not-detected/123674/14 、它非常好地描述了您与另一个驱动程序的问题。 我还请我们的 Linux 专家看看我是否能更好地理解如何在驱动程序和 dts 文件中定义编解码器的名称。

    由于您所使用的 aic3x 驱动程序出现"arecord:pcm_read:read error:input/output error"(arecord:pcm_read:读取错误:输入/输出错误)错误、这可能是 TI 器件或 Nvidia 器件的路由问题。  https://forums.developer.nvidia.com/t/arecord-fails-with-pcm-read-error/237017/6 本线程介绍了 ADMAIF 设置、我不确定那是什么、但可能有助于快速开始您的测试。

    让我们看看您最终首先开始工作的驱动程序。 显然、 tlv320aic326x 驱动程序可能没有扩展到32Centr 的功能、但它适用于3262和3263。 您想使用3268的哪些功能、或者您是否知道使用3268的一般用例? 如果当前驱动程序无法实现、我们可以让我们的 Linux 专家在必要时为您实施一些新的驱动程序代码。

    此致!
    MIR

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

    嗨、Mir、  

    我可能会研究编解码器名称的错误定义。 同时、我将继续使用 显示 PCM_Read 错误的 aic3x 驱动程序。 您能否指导我确定问题是否与 TI 器件的路由问题有关?  您能解释一下所需的路由以及 我必须配置的寄存器、它们的值是什么吗?

    "您想使用3268的哪些功能、或者您知道使用3268的一般用例吗?"

    我们目前正在尝试从一个麦克风进行音频采集(将来可能会执行第二个麦克风)、并对2个扬声器进行音频播放。 请告诉我这是否解答了您的问题、以及我们如何实现这一目标。

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

    您好!

    这些错误通常是由时钟不正确引起的。 您可以在 MCLK、BCLK 和 FCLK 引脚上测量时钟吗? 时钟由编解码器生成、还是由您的系统提供?  

    此外、我进一步研究了326x 驱动程序的编解码器问题的名称-您可以在 该链接的第233行看到 、ASI1的 DAI 名称是"aic326x-asi"、如果您将"codec-Di-name"替换为 tlv320aic3x-hifi、 它应该会修复您的326x 驱动程序的命名问题。  

    此外、您能否进一步解释您的 DTS 中为什么有12个 Di-link 引用? 从我在网上找到的,Xavier 处理器只有4个 I2S 频道可用,如果你想回放音频到2个扬声器和使用2个麦克风,你应该只需要一个 I2S 线路,因此1 DAI。  

    还有一件事,你可以检查 arecord -l 和 aplay -l 的输出吗? 让我们确保编解码器具有预期的输入和输出数量、并检查器件插槽。

    此致!
    MIR

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

    嗨、Mir、

    系统应该提供时钟、但上次我测量电路板时、我在进行录音或播放(在 Xavier 的 I2C1_CLK 引脚上)时没有看到时钟活动。

    我将尝试使用名称更改建议的326x 驱动程序、并将报告。 同时,这是我看到从 Nvidia 的指南( https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide/text/SD/Communications/AudioSetupAndDevelopment.html#definition-of-a-dai-node)的 DAI 链接。 请注意、这些节点已在默认 dts 文件中定义、但我尚未从 Nvidia 提供的文件修改此 dts 文件。

    " DAI 节点的定义

    I2S 接口的每个 DAI 链路都必须由 DAI 节点定义、该 DAI 节点是声音节点的子节点。  ASOC 机器驱动程序中介绍了 DAI 节点的整体格式

    对于每个 I2S 接口 DAI 链接、必须配置以下属性:

    • bitclock-master 和 FRAME-master :可选布尔值;指定编解码器是从器件还是主器件。 如果这些属性出现、编解码器为 I2S 位时钟和帧主控、或者如果没有这些属性、编解码器为 I2S 从控。
    • 格式:配置 CPU/CODEC 通用音频格式。 该值可以为 I2S、 right_j、 left_j、 dsp_a 或 dsp_b  
    • BCLK 比率:用于配置 I2S 位时钟速率的整数。 I2S 位时钟速率是该值与流采样速率的乘积。 值0产生与1相同的时钟速率。

    其他 DAI 链接属性对于基于 I2S、DMIC 和 DSPK 接口的 DAI 链接常见:

    • sRATE:PCM 数据流采样速率
    • 位格式:数据流样本大小
    • num-channel:数据流通道数"

    除了 I2S5和 I2S6、我不理解它们所指的是什么、因为如您所说、仅有4个 I2S 通道、其余频道与 DMIC 和 DSPK 相关。

    下面您可以根据要求找到 arecord -l 和 aplay -l 的输出。  

    ROOT@Jetson-agx-Xavier-Devkit:~# arecord -l
    ****捕获硬件设备列表****
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件0:ADMAIF1 CIF ADMAIF1-0 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件1:ADMAIF2 CIF ADMAIF2-1 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件2:ADMAIF3 CIF ADMAIF3-2 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件3:ADMAIF4 CIF ADMAIF4-3 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件4:ADMAIF5 CIF ADMAIF5-4 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件5:ADMAIF6 CIF ADMAIF6-5 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件6:ADMAIF7 CIF ADMAIF7-6 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件7:ADMAIF8 CIF ADMAIF8-7 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件8:ADMAIF9 CIF ADMAIF9-8 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件9:ADMAIF10 CIF ADMAIF10-9 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件10:ADMAIF11 CIF ADMAIF11-10 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件11:ADMAIF12 CIF ADMAIF12-11 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件12:ADMAIF13 CIF ADMAIF13-12 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件13:ADMAIF14 CIF ADMAIF14-13 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件14:ADMAIF15 CIF ADMAIF15-14 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件15:ADMAIF16 CIF ADMAIF16-15 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件16:ADMAIF17 CIF ADMAIF17-16 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件17:ADMAIF18 CIF ADMAIF18-17 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件18:ADMAIF19 CIF ADMAIF19-18 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件19:ADMAIF20 CIF ADMAIF20-19 []
    子器件:1/1
    子器件#0:子器件#0

    ROOT@Jetson-agx-Xavier-Devkit:~# aplay -l
    ****播放硬件设备列表****
    卡0:tegahdagalent1 [Tegra-hda-Galen-t194]、器件3:HDMI 0 [HDMI 0]
    子器件:1/1
    子器件#0:子器件#0
    卡0:tegahdagalent1 [Tegra-hda-Galen-t194]、器件7:HDMI 0 [HDMI 0]
    子器件:1/1
    子器件#0:子器件#0
    卡0:tegahdagalent1 [Tegra-hda-Galen-t194]、器件8:HDMI 0 [HDMI 0]
    子器件:1/1
    子器件#0:子器件#0
    卡0:tegahdagalent1 [Tegra-hda-Galen-t194]、器件9:HDMI 0 [HDMI 0]
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件0:ADMAIF1 CIF ADMAIF1-0 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件1:ADMAIF2 CIF ADMAIF2-1 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件2:ADMAIF3 CIF ADMAIF3-2 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件3:ADMAIF4 CIF ADMAIF4-3 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件4:ADMAIF5 CIF ADMAIF5-4 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件5:ADMAIF6 CIF ADMAIF6-5 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件6:ADMAIF7 CIF ADMAIF7-6 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件7:ADMAIF8 CIF ADMAIF8-7 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件8:ADMAIF9 CIF ADMAIF9-8 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件9:ADMAIF10 CIF ADMAIF10-9 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件10:ADMAIF11 CIF ADMAIF11-10 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件11:ADMAIF12 CIF ADMAIF12-11 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件12:ADMAIF13 CIF ADMAIF13-12 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件13:ADMAIF14 CIF ADMAIF14-13 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件14:ADMAIF15 CIF ADMAIF15-14 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件15:ADMAIF16 CIF ADMAIF16-15 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件16:ADMAIF17 CIF ADMAIF17-16 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件17:ADMAIF18 CIF ADMAIF18-17 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件18:ADMAIF19 CIF ADMAIF19-18 []
    子器件:1/1
    子器件#0:子器件#0
    卡1:tegrandt19xmob [tegra-snd-t19x-mobile-rt565x]、器件19:ADMAIF20 CIF ADMAIF20-19 []
    子器件:1/1
    子器件#0:子器件#0

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

    尊敬的 Konstantinos:

    未从您期望的器件获得时钟输出肯定是一个红色标志。 我看到在 DTS 文件中定义了时钟(我假设是输出)、我想知道它们是否不是在 I2S1上输出、而是在其他地方输出? 我们可以用图表或其他内容来跟踪音频树路由、以便更好地了解哪个 DAI 将转到哪个 I2S 输出? 您是否尝试在正确的器件上规避、您是否已将 TI 编解码器分配给您在 arecord 调用中随 HW 指定的正确 DAI?

    此致!
    MIR

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

    嗨、Mir、  

    我同意、看不到时钟是问题的重要组成部分。 我还认为、这是我可能需要解释音频路由应该是什么样子的、因为这方面存在知识差距。 不过、我将尝试回答您的问题。

    根据 Nvidia 的建议、我们在运行 arecord 命令之前执行以下操作:

    amixer -c tegrasndt19xmob cset name="ADMAIF1 Mux" "I2S1"

    我在上面提到了 arecord -l (低基 L)的输出、该输出列出了所有捕获硬件器件。

    arecord 命令如下所示:

    arecord -dhw:tegrasndt19xmob、0 -c 1 -r 48000 -f S16_LE -d 5 test.wav

    我认为是正确的、因为它会尝试从 device 0上的 card tegrasndt19xmob 中捕获(我们在上面通过 amixer 设置)。

    请告诉我、以上任何一项都是不正确的、如果您对如何解决此问题和解决此问题有任何建议、请告诉我。

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

    我也得到了 Nvidia 的回应。 以下是他们提到的内容:

    从您的日志中可以看出、音频未路由到 I2S 接口、 这可能是 "nvidia, audio-routing (nvidia、音频路由)"的配置问题、
       您可能需要尝试修改路由小部件。  
            "x 耳机插孔   x HPLOUT
             x 耳机插孔   x HPROUT
             x LINE1L           X 麦克风插孔
             X LINE2L            X Mic 插孔";
        我之前举过的例子只是为了编译。  
        因为我没有您的编解码器、所以这需要您尝试调整小工具。

    您能否帮助我验证这些路由小工具、因为它们似乎对于编解码器驱动程序来说很特殊?

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

    您好!

    是的、您可以检查驱动程序的"sd_soc_dapm_route"部分、在这里可以为 dts 文件中的路由指定输入和输出。 请告诉我您的想法-我建议您搜索 Github 和 E2E 以获取 DTS 文件的其他示例及路由选择。 请告诉我您想知道什么、以及您最终会做什么。

    此致!
    MIR

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

    嗨、Mir、  

    我已经取得了一些进展、可以在 Xavier 上看到 I2C1_CLK。 我还探测了其他引脚、可以确认 WS 正在切换以及 TX 和 RX、具体取决于音频捕获或播放。 但是、我仍然看不到扬声器的任何音频输出。 您能否确认以下 TI 通过电子邮件提供给我们的设置是否正确? 我们可能已经通过电子邮件发送了原理图、但请注意、编解码器上的 MCLK 引脚没有提供任何时钟信号。

    ##################################################################################################################################################################################################
    #耳机播放、高输出功率、48kHz 采样率
    # AVDDx_18、HVDD_18、CPVDD_18 = 1.8V;IOVDDx_33、RECVDD_33 = 3.3V;
    #SVDD、MICBIAS_VDD (JP37 1-2 + JP44 2-3)、SPK_V
    = 5V、DVDD_18 = 1.8V # MCLK = 12.288MHz #
    已禁用、DOSR = 128、PRB_P1
    #音频串行接口#1与 WCLK 和 BCLK 一起用作器件的输入######################################################################################
    
    
    ##################################################################################################################################################################################################
    #软件重置
    ########################################################################################################################################################################################
    w 30 00 00 #初始化为第0页
    w 30 7f 00 #初始化为第0页
    w 30 01 01 01 #通过软件复位
    d 1来初始化器件 延迟1毫秒############################################################################################################################
    
    
    FIFO 配置##################################################################################################################################################################
    
    w 30 00 00
    #选择第0页
    w 30 7f 78 #选择第120页 w 30 32 80 #启用 DAC FIFO
    
    w 30 7f 64 #选择第100页 w 30 32 80 #启用 ADC FIFO w 30
    7f 00 #选择第0页##############################################################################################################
    
    
    电源和模拟配置##################################################################################################################################
    
    w 30 00 04 #选择页4
    w 30 77 c0 #禁用 miniDSP 与 ASI 的加电同步
    
    w 30 00 00 #选择页0 w 30 0d 00 80
    #程序 DOSR = 128 w 30 14 80 #程序 AOSR = 128
    
    w 30 00 01 #选择页1 w 30 01 00 #禁用弱 AVDD 至 DVDD 连接、
    使用30 4D 01提供模拟电源# HP OCP 配置
    w 30 08 00 #全芯片 CM =0.9V
    w 30 03
    00 # PTM_P3/P4 w 30 04 00 # PTM_P3/P4 ##############################################################################################################################################################
    
    
    #有关双二阶配置、请参阅脚本"0.1.txt"##############################################################################################################
    
    
    b "设备已初始化并处于待机状态"##############################################################################################################################################################
    
    
    #时钟配置
    # MCLK = 12.288 MHz、BCLK = 3.072 MHz、WCLK = 48kHz (从器件)########################################################################################
    
    w 30 00 00 #选择第0页
    w 30 04 00 #将 DAC_CLKIN 设置为 MCLK --默认值不是必需编程
    
    w 30 0b 81 # NDAC = 1 w 30 0c 82 # MDAC = 2 w
    30 0d 00
    #将 DAC 的 OSR 编程为128以获得 w 30 0e 80 # DAC_FS = DAC_MOD_CLK / DOSR ##################################################################################################_CLK_AT_AT_CLK 6.144MHz
    
    
    音频串行接口路由配置-音频串行接口
    #1 #ASI #1播放##############################################################################################
    
    w 30 00 04
    #选择第4页 w 30 01 00 # I2S 模式、16位
    w 30 0A 00 #将 ASI#1 WCLK 和 BCLK 路由至 WCLK1引脚和 BCLK1引脚
    w 30 08 50 #左声道 DAC 和主要 ASI 的右声道数据路由至
    右信道 DAC ##################################################################################################################################################################
    
    
    #信号处理设置####################################################################################################################################################################################
    
    w 30 00 00
    #选择第0页 w 30 3c 01 #将 DAC 模式设置为 PRB_P1 ##########################################################################################################################################################################################################################
    
    
    #输出信道配置####################################################################################################################################################################################################
    
    w 30 00 00
    #选择第0页 w 30 3f c0 #通过主路由为左右 DAC 通道上电
    # ASI 的左声道数据到左声道和右
    声道到右声道 DAC w
    
    30 40 00 #取消 DAC 数字音量控制的静音
    w 30 00 01 #选择页1 w 30 09 00 # HP 尺寸= 100%
    
    w 30 1f 80 #处于接地中心模式的耳机、HPL 增益=0dB w 30 20 80 # HPR 具有与 HPL 相同的增益、设置为0dB w 30 1b 331b/R 功率使能 DAC 和启用 HPL 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Konstantinos:

    很高兴您有时钟在运行。 如果您可以将原理图发送到此处以确认所使用的输出、这将非常有用! 此示例代码用于耳机输出、并且我能够在我所拥有的 EVM 上运行它、从而让数字音频通过耳机输出。 此脚本来自以下示例: https://www.ti.com/tool/download/SLAC654

     我建议查看 D 类扬声器输出脚本的脚本"4.1.txt"。 该脚本还有助于确保在 DTS 文件中正确路由音频路径、4.1脚本中显示为"LOL to SPK"。 但是、我发现、我们用于该项目的两个 Linux 驱动程序都没有内置到扬声器输出的 DAPM 小工具连接... :(. 我认为这可能是驱动程序缺失的链接、我可以询问我们的 Linux 驱动程序专家如何实现它。 但是、您应该能够直接在3268上运行 I2C 脚本、并且无需使用正确的 DTS 文件执行 dapm 路由。 I2C 命令将设置音频信号路径路由、而不是 dts 文件。 如果从 Linux 计算机输出时钟和数字音频、您应该可以使用发送的脚本在耳机中或使用脚本4.1扬声器中获得模拟输出。 您可以从示例脚本中检查脚本6.1.txt、以获取使用 I2C 的 ADC 路径的示例。  

    另一个可用于为器件布线生成 I2C 的工具是此 CodecControl 软件: https://www.ti.com/tool/download/SLAC522 这个特定版本适用于 AIC3262、但它也应该能够为3268生成 I2C。 您可以使用 GUI 将信号路由到所需的位置、并使用 View->Command->Record 框记录 I2C。

    请告诉我您能取得哪些进展。

    此致!
    MIR

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

    嗨、Mir、

    我尝试了您推荐的脚本、但它仍然不会在线路输出上显示任何模拟信号。 我相信您已收到原理图的相关部分。 您能否告知我们需要在脚本基础上更改哪些寄存器? 仅供参考、我们不在 MCLK 引脚上提供时钟信号!

    此致、

    Konstantinos

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

    您好!

    是的,我回复了这封电子邮件,在你发送这件事之前,有趣的时间,让我附上我 在这里更改的脚本。 希望你的 FAE 能够在明天把它转发给你。 这仅适用于输入 I2S 时的线路输出、使用3.072MHz 分频为 FS = 48K。 我还对 Linux 驱动程序和扬声器路由有了一些新的了解。 您是否仍在使用旧的 aic3x 驱动程序、或者您是否能够开始使用我在本线程开始时发送的326x 驱动程序?

    #########################################################################################
    # DAC to Differential Lineout Playback, 48kHz Sampling Rate
    # AVDDx_18, HVDD_18, CPVDD_18, RECVDD_33 (JP38 1-2) = 1.8V; IOVDDx_33 = 3.3V
    # SVDD, MICBIAS_VDD (JP37 1-2 + JP44 2-3), SPK_V = 5V, DVdd_18 = 1.8V
    # MCLK = not connected
    # PLL Disabled, DOSR = 64, PRB_P1
    # Audio Serial Interface #1 used with WCLK & BCLK as inputs to the device
    #########################################################################################
    
    #########################################################################################
    # Software Reset
    #########################################################################################
    w 30 00 00 # Initialize to Page 0
    w 30 7f 00 # Initialize to Book 0
    w 30 01 01 # Initialize the device through software reset
    d 1        # Delay 1 millisecond
    
    #########################################################################################
    # FIFO Configuration
    #########################################################################################
    w 30 00 00 # Select Page 0
    w 30 7f 78 # Select Book 120
    w 30 32 80 # Enable DAC FIFO
    w 30 7f 64 # Select Book 100
    w 30 32 80 # Enable ADC FIFO
    w 30 7f 00 # Select Book 0
    
    #########################################################################################
    # Power and Analog Configuration
    #########################################################################################
    w 30 00 04 # Select Page 4
    w 30 77 c0 # Disable miniDSP power-up sync with ASI
    w 30 00 00 # Select Page 0
    w 30 0d 00 40 # Program DOSR = 64
    w 30 14 40 # Program AOSR = 64
    w 30 00 01 # Select Page 1
    w 30 01 00 # Disable weak AVDD to DVDD connection, make analog supplies available
    
    #########################################################################################
    # For BiQuad Configuration see Script '0.1.txt'
    #########################################################################################
    
    b "Device Initialized and in Standby"
    
    #########################################################################################
    # Clock configuration
    # MCLK = not connected, BCLK = 3.072 MHz, WCLK = 48 kHz (slave)
    #########################################################################################
    w 30 00 00 # Select Page 0
    
    w 30 04 11 # Set DAC_CLKIN and ADC_CLKIN as BCLK1, we can assume 3.072 for now
    w 30 0b 81 # NDAC = 1
    w 30 0c 81 # MDAC = 1
    w 30 0d 00 # Program the OSR of DAC to 64, 00 as MSB for 00 0100 0000
    w 30 0e 40 # DAC_FS = DAC_MOD_CLK / DOSR = 3.072MHz / 64 = 48kHz
    
    #########################################################################################
    # Audio Serial Interface Routing Configuration - Audio Serial Interface #1
    # ASI #1 playback
    #########################################################################################
    w 30 00 04 # Select Page 4
    w 30 01 00 # Audio Serial Interface #1 is set to I2S mode, 16-bit
    w 30 0a 00 # Route ASI#1 WCLK and BCLK to WCLK1 pin and BCLK1 pin
    
    #########################################################################################
    # Signal Processing Settings
    #########################################################################################
    w 30 00 00 # Select Page 0
    w 30 3c 01 # Set the DAC PRB Mode to PRB_P1
    
    #########################################################################################
    # Output Channel Configuration
    #########################################################################################
    w 30 00 00 # Select Page 0
    w 30 3f c0 # Power up the Left and Right DAC Channels
    w 30 40 00 # Unmute the DAC digital volume control
    w 30 00 01 # Select Page 1
    w 30 03 00 # Set PTM mode for Left DAC to PTM_P3/P4 (default, writing here optional)
    w 30 04 00 # Set PTM mode for Right DAC to PTM_P3/P4 (default, writing here optional)
    w 30 16 63 # Enable DAC to LOL/R routing and power-up LOL/R
    w 30 2a 68 # LDAC to REC and offset calibration enable
    w 30 28 c0 # RECP/M powered up and 0dB gain mode
    d 40       # Wait for reference to power up
    
    
    b "Device in Operational Mode"
    
    #########################################################################################
    # For Power Down Sequence see Script '0.2.txt'
    #########################################################################################

    此致!
    MIR

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

    嗨米尔,我试过这个脚本,它不起作用。 我在示波器上测量了 BCLK、实际上它是~1.5MHz。 为了澄清一点、我们使用的是16位带符号小端字节序格式。 我继续并编辑 DOSR 寄存器(0x0d 和0x0E)、将编程值更改为0x20 (除以32而不是64)、但仍然没有声音。 请就您认为可能是问题的原因提供建议。

    Re Linux 驱动程序、由于我没有花太多时间使用326x 驱动程序、我仍在使用 aic3x 驱动程序。

    提前感谢您的帮助!

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

    尊敬的 Konstantinos:

    很抱歉它无法正常工作... 我将测试脚本、并在周一进行任何可以帮助的更改。 周二我们将有一个电话会议、以便继续进行、我希望届时能够展示更多内容。 本周、我收到了很多支持请求、因此对于延迟表示抱歉。  

    如果您可以尝试使用326x 驱动器、这将有利于您未来使用扬声器输出、或其他用途、但如果您不需要超过2个通道的输入和输出通道、如果它能够正常工作、那么它将起作用。 它完全可以正常工作、我只是感到惊讶、因为它是一组不同的器件、所以它可能具有不同的寄存器、在设置过程中会自动初始化和设置这些寄存器。

    此致!
    MIR