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.

[参考译文] AM625:在 AM6254上设置 TAS5802

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1495843/am625-setting-up-tas5802-on-the-am6254

器件型号:AM625

工具/软件:

大家好!

我将联系 TI 音频专家、为在 AM6254设计上集成 TAS5802提供一些指导。

我们的系统包含一个位于 I2C-0总线上的 TAS5802、其 I2C 地址设置为0x54。 编解码器由配置为主器件的 MCASP2驱动、并通过 AM6254的 EXT_AUDIO_REFCLK0输入馈送外部24.576MHz 时钟。

到目前为止、我能够配置时钟、在 TI 的帮助下、我可以看到 MCASP2通过示波器在 LRCLK 和 BCLK 上驱动48kHz 音频。 有关更多信息、请参阅 该主题

因此、我按如下方式配置了器件树以启动 TAS5802:

/* NOTE: ball names, refer to AM6254ALW */
&main_pmx0 {
	board_pins_codec_control: pp1-pins-codec-control {
		pinctrl-single,pins = <
			AM62X_IOPAD(0xf40b4, PIN_OUTPUT, 7) /* [Speaker_Audio_PDN] (K24) GPMC0_CSn3.GPIO0_44 */
			AM62X_IOPAD(0xf40b0, PIN_INPUT, 7) /* [Speaker_Audio_FAULT] (K22) GPMC0_CSn2.GPIO0_43 */
		>;
	};
};

&main_i2c0 {
	/* On-board audio amp: TAS5802 */
	tas5802: tasdevice@54 {
		compatible = "ti,tas5802";
		status = "okay";

		pinctrl-names = "default";
		pinctrl-0 = <&board_pins_codec_control>;

		reg = <0x54>; // ADR had 4.7k to VDD
		#sound-dai-cells = <0>;
		interrupt-parent = <&main_gpio0>;
		interrupts = <43 IRQ_TYPE_EDGE_FALLING>;
		reset-gpios = <&main_gpio0 44 GPIO_ACTIVE_HIGH>;
	};
};

&mcasp2 {
	status = "okay";
	#sound-dai-cells = <0>;

	/* CLOCKS:
	 * BOARD_AUDIO_EXT_REFCLK0 <192 12> --> AHCLKR IN <192 9>
	 * BOARD_AUDIO_EXT_REFCLK0 <192 18> --> AHCLKX IN <192 15>
	 * from TI E2E:       ???? <192 30> -->      ???? <192 27>
	 * REFCLK runs at 24,576 MHz
	 */
    assigned-clocks        = <&k3_clks 192 9>, <&k3_clks 192 15>, <&k3_clks 192 27>;
    assigned-clock-parents = <&k3_clks 192 12>, <&k3_clks 192 18>, <&k3_clks 192 30>;
    assigned-clock-rates   = <24576000>, <24576000>, <0>;

	pinctrl-names = "default";
	pinctrl-0 = <&pp1_pins_mcasp2>;

	op-mode = <0>;          /* MCASP_IIS_MODE */
	tdm-slots = <2>;

	serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
	       1 0 0 0
	       0 0 0 0
	       0 0 0 0
	       0 0 0 0
	>;
	tx-num-evt = <0>;
	rx-num-evt = <0>;
};


/ {
	board_speakers: sound {
		compatible = "simple-audio-card";
		simple-audio-card,name = "Internal-Speaker";

		simple-audio-card,widgets = "Speaker", "Internal Speaker";
		simple-audio-card,routing = "Internal Speaker", "OUT";

		simple-audio-card,bitclock-master = <&mcasp2>;
		simple-audio-card,frame-master = <&mcasp2>;
		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-inversion;

		simple-audio-card,cpu {
			sound-dai = <&mcasp2>;
			system-clock-frequency = <24576000>;
		};

		simple-audio-card,codec {
			sound-dai = <&tas5802>;
		};
    };
};

此外、我还使用了 tasdevice out-of-tree 驱动程序附带的工具、打开了该工具  TAS5802-1amp-reg.json 、将其另存为  tas5802-1amp-reg.bin  并将其放在目标系统的/usr/lib/firmware 中。

使用此设置时、我遇到了一些需要帮助解决的问题。

引导期间将打印以下消息(仅显示 tasdevice 条目):

[   5.102786] TASDEVICE-CODEC 3-0054:主器件= 0x54
[   5.112888] TASDEVICE-CODEC 3-0054:tasdevice_i2c_probe:GPIO 305请求错误
[5.627002]   tasdevice-codec 3-0054:tasdev:regbin_ready start
[   5.633031] TASDEVICE-CODEC 3-0054:nConfig = 4.
[   5.641577] tasdevice-codec 3-0054:IMG_SZ = 884 TOTAL_CONFIG_SZ = 592偏移量= 292
[   5.649742] tasdevice-codec 3-0054:select_cfg_blk:profile_conf_id = 0
[   5.656463] TASDEVICE-CODEC 3-0054:select_cfg_blk:CONF 0、块类型:pre_power_up  器件 idx = 0x00
[5.677230]   tasdevice-codec 3-0054:init id = 0!
[   5.684789] tasdevice-codec 3-0054:固件初始化完成

运行 avplay 或 speaker-test 时、我会在控制台上看到以下输出:

[45.300126]  tasdevice-codec 3-0054:tasdevice_hw_params:播放
[45.306717]  tasdevice-codec 3-0054:tasdevice_hw_params:BCLK 速率= 1536000通道= 2采样率= 48000时隙宽度= 16
[45.347272]  tasdevice-codec 3-0054:PowerControl_routy:1310:enter
[45.353665]  tasdevice-codec 3-0054:select_cfg_blk:profile_conf_id = 0
[  45.360287] TASDEVICE-CODEC 3-0054:select_cfg_blk:CONF 0、Block type:pre_power_up  device idx = 0x00
[45.378850]  tasdevice-codec 3-0054:PowerControl_routy:1319:离开

引脚12 (nPDN)为高电平、  LRCLK 和 BCLK 分别具有48kHz 和1.536MHz 频率。 我没有通过发言者的声音、但我还不相信这是一个硬件问题。

我尝试删除了中断说明符和复位 GPIO (将引脚设为高电平)。 这些都不会产生效果。

我可以采取哪些步骤来了解此设置中缺少哪些内容?

谢谢!

António μ s

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

    尊敬的 Antonio:

    能否 只需在 DTS 文件中的以下部分添加"system-clock-direction-out;":

    简单音频卡、CPU{
    sound-dai =<&mcasp2>;
    系统时钟频率=<24576000>;
    };

    如果有帮助、请告诉我

    此致、

    Suren

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

    您好、Suren、

    感谢您的建议。  我怀疑这 可能无法解决问题、因为示波器已经显示 LRCLK 为48kHz、BCLK 为1.536MHz、这似乎是此设置的正确频率。

    同时、我们发现了一个 PCB 错误、该错误可能导致输出级根本无法切换、并且与 I 测量的电压电平一致。 我们将很快对两块电路板进行返工、并返回到该页面。

    我会告诉您这是否能解决问题。

    此致、

    António μ s

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

    谢谢 Antonio。 我将等待您在重新处理电路板后更新它的运行方式。

    此致、

    Suren

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

    您好、Suren、

    很抱歉耽误你的时间。 我有一个更新,最后,一些进展!

    放大器电路的返工(在一个通道上交换了升压和输出连接)解决了我们的硬件问题。 我们现在可以使用 TAS5802 (两个通道)。

    不过、仍有一些待解决的问题:

    1.无法为器件树节点配置中断

    如果我在编解码器器器件树节点中有此器件:

    interrupt-parent = <&main_gpio0>;
    interrupts = <43 IRQ_TYPE_EDGE_FALLING>;

    在内核模块在探测期间输出以下错误:

    [   5.148278] tasdevice-codec3-0054:tasdevice_i2c_probe:GPIO 304请求错误

    不过、这似乎不会影响音频输出(有关其他问题、请参阅前面的部分)。

    我当前正在运行具有 Linux-6.12 (SDK 11.00.10)的 tasdevice SHA:810b651d7d349638f80e0a96e81889388e55dff2、并进行了细微更改以处理  ASM/unaligned.h 的新位置

    我将此追溯到 tasdriver 代码中的以下代码(tasdevice-core.c、第1466行):

    dev_dbg(tas_dev->dev, "irq-gpio = %d", tas_dev->irqinfo.irq_gpio);
    INIT_DELAYED_WORK(&tas_dev->irqinfo.irq_work, irq_work_routine);
    
    ret = gpio_request(tas_dev->irqinfo.irq_gpio, "TASDEV-IRQ");
    //-----> NOTE: ret is assigned -517 which I believe is -EPROBE_DEFER
    if (!ret) {
    	gpio_direction_input(tas_dev->irqinfo.irq_gpio);
    
    	tas_dev->irqinfo.irq = gpio_to_irq(tas_dev->irqinfo.irq_gpio);
    	dev_info(tas_dev->dev, "irq = %d\n", tas_dev->irqinfo.irq);
    
    	ret = request_threaded_irq(tas_dev->irqinfo.irq,
    		tasdevice_irq_handler, NULL, IRQF_TRIGGER_FALLING |
    		IRQF_ONESHOT, tas_dev->client->name, tas_dev);
    	if (!ret)
    		disable_irq_nosync(tas_dev->irqinfo.irq);
    	else
    		dev_err(tas_dev->dev, "request_irq failed, %d\n", ret);
    } else {
    	dev_err(tas_dev->dev, "%s: GPIO %d request error\n", __func__,
    		tas_dev->irqinfo.irq_gpio);
    }

    作为内核用户(非开发人员)、我不知道报告此错误的原因(它也出现在 SDK10的 Linux-6.6上)。 是否有任何关于这可能是什么以及它对放大器运行造成的任何潜在不良影响的提示?

    2.播放时放大器不会进入播放模式

    在 McASP 输出了正确的音频帧之后、我重点关注 TAS5802并使用调试指令来获取其 regdump:

    # echo 0 0x00 0x00 > regdump
    # cat regdump
    i2c-addr: 0x54
    DeviceID: 0x0d
    Chn0B0x00P0x00R0x00:0x00
    Chn0B0x00P0x00R0x01:0x11
    Chn0B0x00P0x00R0x02:0x01
    Chn0B0x00P0x00R0x03:0x02 <<------- HiZ mode while playing??
    Chn0B0x00P0x00R0x04:0x00
    Chn0B0x00P0x00R0x05:0x00
    Chn0B0x00P0x00R0x06:0x00
    Chn0B0x00P0x00R0x07:0x00
    Chn0B0x00P0x00R0x08:0x00
    Chn0B0x00P0x00R0x09:0x00
    Chn0B0x00P0x00R0x0a:0x00
    Chn0B0x00P0x00R0x0b:0x00
    Chn0B0x00P0x00R0x0c:0x00
    Chn0B0x00P0x00R0x0d:0x00
    Chn0B0x00P0x00R0x0e:0x00
    Chn0B0x00P0x00R0x0f:0x00
    Chn0B0x00P0x00R0x10:0x01
    Chn0B0x00P0x00R0x11:0x00
    Chn0B0x00P0x00R0x12:0x00
    Chn0B0x00P0x00R0x13:0x00
    Chn0B0x00P0x00R0x14:0x11
    Chn0B0x00P0x00R0x15:0x00
    Chn0B0x00P0x00R0x16:0x00
    Chn0B0x00P0x00R0x17:0x00
    Chn0B0x00P0x00R0x18:0x00
    Chn0B0x00P0x00R0x19:0x00
    Chn0B0x00P0x00R0x1a:0x00
    Chn0B0x00P0x00R0x1b:0x00
    Chn0B0x00P0x00R0x1c:0x00
    Chn0B0x00P0x00R0x1d:0x00
    Chn0B0x00P0x00R0x1e:0x00
    Chn0B0x00P0x00R0x1f:0x00
    Chn0B0x00P0x00R0x20:0x01
    Chn0B0x00P0x00R0x21:0x07
    Chn0B0x00P0x00R0x22:0x09
    Chn0B0x00P0x00R0x23:0x01
    Chn0B0x00P0x00R0x24:0x00
    Chn0B0x00P0x00R0x25:0x40
    Chn0B0x00P0x00R0x26:0x02
    Chn0B0x00P0x00R0x27:0x00
    Chn0B0x00P0x00R0x28:0x00
    Chn0B0x00P0x00R0x29:0x00
    Chn0B0x00P0x00R0x2a:0x00
    Chn0B0x00P0x00R0x2b:0x00
    Chn0B0x00P0x00R0x2c:0x00
    Chn0B0x00P0x00R0x2d:0x00
    Chn0B0x00P0x00R0x2e:0x00
    Chn0B0x00P0x00R0x2f:0x00
    Chn0B0x00P0x00R0x30:0x00
    Chn0B0x00P0x00R0x31:0x00
    Chn0B0x00P0x00R0x32:0x00
    Chn0B0x00P0x00R0x33:0x02
    Chn0B0x00P0x00R0x34:0x00
    Chn0B0x00P0x00R0x35:0x11
    Chn0B0x00P0x00R0x36:0x00
    Chn0B0x00P0x00R0x37:0x00
    Chn0B0x00P0x00R0x38:0x40
    Chn0B0x00P0x00R0x39:0x00
    Chn0B0x00P0x00R0x3a:0xf9
    Chn0B0x00P0x00R0x3b:0x04
    Chn0B0x00P0x00R0x3c:0x60
    Chn0B0x00P0x00R0x3d:0x20
    Chn0B0x00P0x00R0x3e:0x80
    Chn0B0x00P0x00R0x3f:0x00
    Chn0B0x00P0x00R0x40:0x01
    Chn0B0x00P0x00R0x41:0x00
    Chn0B0x00P0x00R0x42:0x00
    Chn0B0x00P0x00R0x43:0x00
    Chn0B0x00P0x00R0x44:0x00
    Chn0B0x00P0x00R0x45:0x00
    Chn0B0x00P0x00R0x46:0x11
    Chn0B0x00P0x00R0x47:0x00
    Chn0B0x00P0x00R0x48:0x00
    Chn0B0x00P0x00R0x49:0x00
    Chn0B0x00P0x00R0x4a:0x00
    Chn0B0x00P0x00R0x4b:0x00
    Chn0B0x00P0x00R0x4c:0x30
    Chn0B0x00P0x00R0x4d:0x30
    Chn0B0x00P0x00R0x4e:0x33
    Chn0B0x00P0x00R0x4f:0x30
    Chn0B0x00P0x00R0x50:0x00
    Chn0B0x00P0x00R0x51:0x55
    Chn0B0x00P0x00R0x52:0x00
    Chn0B0x00P0x00R0x53:0x01
    Chn0B0x00P0x00R0x54:0x00
    Chn0B0x00P0x00R0x55:0x00
    Chn0B0x00P0x00R0x56:0x00
    Chn0B0x00P0x00R0x57:0x00
    Chn0B0x00P0x00R0x58:0x00
    Chn0B0x00P0x00R0x59:0x00
    Chn0B0x00P0x00R0x5a:0x00
    Chn0B0x00P0x00R0x5b:0x00
    Chn0B0x00P0x00R0x5c:0x00
    Chn0B0x00P0x00R0x5d:0xf8
    Chn0B0x00P0x00R0x5e:0x00
    Chn0B0x00P0x00R0x5f:0x00
    Chn0B0x00P0x00R0x60:0x01
    Chn0B0x00P0x00R0x61:0x0b
    Chn0B0x00P0x00R0x62:0x00
    Chn0B0x00P0x00R0x63:0x00
    Chn0B0x00P0x00R0x64:0x00
    Chn0B0x00P0x00R0x65:0x00
    Chn0B0x00P0x00R0x66:0x03
    Chn0B0x00P0x00R0x67:0xa8
    Chn0B0x00P0x00R0x68:0x00
    Chn0B0x00P0x00R0x69:0x00
    Chn0B0x00P0x00R0x6a:0x00
    Chn0B0x00P0x00R0x6b:0x00
    Chn0B0x00P0x00R0x6c:0x00
    Chn0B0x00P0x00R0x6d:0x50
    Chn0B0x00P0x00R0x6e:0x11
    Chn0B0x00P0x00R0x6f:0x24
    Chn0B0x00P0x00R0x70:0x00
    Chn0B0x00P0x00R0x71:0x00
    Chn0B0x00P0x00R0x72:0x00
    Chn0B0x00P0x00R0x73:0x00
    Chn0B0x00P0x00R0x74:0x00
    Chn0B0x00P0x00R0x75:0x38
    Chn0B0x00P0x00R0x76:0x00
    Chn0B0x00P0x00R0x77:0xff
    Chn0B0x00P0x00R0x78:0x80
    Chn0B0x00P0x00R0x79:0x00
    Chn0B0x00P0x00R0x7a:0x09
    Chn0B0x00P0x00R0x7b:0x03
    Chn0B0x00P0x00R0x7c:0x00
    Chn0B0x00P0x00R0x7d:0x00
    Chn0B0x00P0x00R0x7e:0xe0
    Chn0B0x00P0x00R0x7f:0x00
    ======caught smartpa reg end ======

    通过使用 TAS5802数据表检查寄存器可以看到这一点  STATE_CTL  中导出  DEVICE_CTRL2  寄存器( 3h )设置为  Hi-Z 。  

    我尝试手动将其设置为  播放  其中:
    回波0 0x00 0x00 0x03 >寄存器

    放大器立即开始驱动扬声器。

    这是驱动器的输出、以防万一:

    [1174.561113] tasdevice-codec 3-0054:tasdevice_hw_params:播放
    [1174.569234] TASDEVICE-CODEC 3-0054:TASDEVICE_HW_PARAMS:BCLK 速率= 1536000通道= 2采样速率= 48000时隙宽度= 16
    [1174.608625] tasdevice-codec 3-0054:PowerControl_routy:1276:enter
    [1174.615036] tasdevice-codec 3-0054:select_cfg_blk:profile_conf_id = 0
    [ 1174.621664] tasdevice-codec 3-0054:select_cfg_blk:CONF 0、块类型:pre_power_up  器件 idx = 0x00
    [1174.640313] tasdevice-codec 3-0054:PowerControl_routy:1285:离开

    我不确定是否可以附加由生成的.bin 文件  TAS5802-1amp-reg.json  与驱动程序相同的存储库中执行指令。 如果有办法、请告诉我。

    我期望放大器在不敲门的情况下播放。 对此有何想法?

    3、混音器控制不起作用

    ALSA 报告的混合器控件有:

    # amixer scontrols.
    简单的混频器控制'TASDEVICE 配置文件 ID'、0

    如果我在播放过程中使用控件、则没有任何变化。 我可以用 alsa 插件和 softvol 来解决这个问题,但是,仍然,最好是有混音器控制实际控制输出电平。 此外、不这样做可能是某些软件问题的迹象。 请告知如何使混合器控制正常工作。

    尽管有这些奇怪的地方、但我很高兴我终于能够从 AM62中播放一些内容、因为这意味着时钟正确(我对此主题有其他问题)、并且声卡和编解码器(大多数情况下)是正确的。 这也意味着硬件可以正常工作!

    希望我们非常接近全面运作的解决方案。

    此致、

    António μ s

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

    Antonio、

    我很高兴修改电路板后能够正常工作。 您是否仍需要这方面的支持? 如果没有、我将继续并关闭主题。

    如有任何问题、请随时打开更新的主题。

    此致、

    Suren

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

    您好、Suren、我仍然有上述问题、即除非我手动写入寄存器、否则放大器无法播放  0x03。

    请参阅 第二个问题在我上面的职位 并告诉我我们可以做些什么来解决这个问题。 问题1和问题3似乎不会阻止任何事情、我们可以忍受这些问题、但问题2对我们来说是一个亮点、我相信必须有一些事情可以做(我可能会错过)、让放大器在没有用户干预的情况下运行、而不是打电话  Aplay。

    此致、

    António μ s

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

    您好、Suren、

    对于我们尝试通过放大器播放音频时放大器无法唤醒的问题、您是否有任何建议?

    如果这是一个单独问题的主题、请告诉我、我将打开它。 实际上、放大器开箱即用但尚未正常工作。

    谢谢、

    António μ s

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

    尊敬的 Antonio:

    对拖延表示歉意、最近几天没有上班。

    请创建一个单独的主题作为其放大器问题、我在此无法提供很多帮助。

    一旦创建线程以路由至合适的专家、请告诉我。

    此致、

    Suren

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

    您好、Suren、感谢您圈回话题。

    我从这个主题中选择了相关部分、然后 在这里打开了一个新问题

    非常感谢您在本主题方面的帮助、

    António μ s

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

    谢谢 Antonio。 我看到已为较新的主题分配了专家。 我将关闭此主题。

    此致、

    Suren