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.

[参考译文] TAS2770:无法设置功率寄存器来激活 TAS2770放大器

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/883333/tas2770-cannot-set-the-power-register-to-activate-the-tas2770-amplifier

器件型号:TAS2770

尊敬的支持:

我们已经完成了 TAS2770放大器与 EVM 板的评估、目前正在将其集成到我们的音频模块设计中。 我们面临两个问题

1) 1)为其创建 devicetree

TAS 2770放大器的 i2c 部分如下所示:

i2c0{(&I)
       状态="正常";
       时钟频率=<400000>;

       tas2770:tas2770@41{
               #address-cells =<1>;
               #sound-di-cells =<0>;
               #size-cells =<0>;
               兼容="ti、tas2770";
               reg =<0x41>;
               TI、ASI-format =<0>;
               TI、imon-slot-no =<0>;
               TI、VMON-SLOT-NO =<2>;
       };
};

在这种情况下、Linux 内核出现"no pinctrl hande"错误:

[1.760000]   总线:"I2C_PROBE:使用器件0-0041探测驱动程序 tas2770                                                 
[1.761000]   tas2770 0-0041:无 pinctrl 句柄                                                                                   
[1.763000]   8<--剪切此处----                                                                                                  
[1.764000]   无法在虚拟地址00000044处处理内核 NULL 指针解除引用                                        
[1.765000]   PgD =(ptrval)                                                                                                      
[1.766000]   [00000044]* PgD=00000000                                                                                            
[1.767000]   内部错误:Oops:5 [#1]抢占 SMP Thumb2                                                                     
[1.767000]   链接的模块:                                                                                                  
[1.767000]   CPU:0 PID:1 Comm:swapper/0未被污染5.5.0-rc5 #1                                                              
[1.767000]   硬件名称:All赢家 sun8i 系列                                                                               
[1.767000]   PC 处于 Snd_soc_component_write+0x0/0x20                                                                           
[1.767000]   LR 位于 tas2770_i2c_probe+0xd7/0x190                                                                               
[1.767000]   PC:[<8048c050>]   LR:[<804de08f>]   PSR:00000033                                                             
[1.767000]   sp:8e82dde8 IP:8e048c00 FP:00000000                                                                         
[1.767000]   R10:80ed8524 R9:00000000 R8:00000000                                                                         
[1.767000]   r7:8e035820 R6:8e035800 R5:8e149bc0 R4:00000000                                                          
[1.767000]   r3:f03e5b2d r2:00000001 r1:00000001 r0:00000000                                                          
[1.767000]   标志:   在模式 SVC_32 ISA Thumb 段无时、FIQ 上的 nzcv IRQ                                                 
[1.767000]   控制:50c5387d 表:4000406a DAC:00000051                                                                   
[1.767000]   进程 swapper/0 (pid:1、栈限制= 0x (ptrval))                                                                
[1.767000]   堆栈:(0x8e82dde8至0x8e82e000)                                                                                   
[1.767000]   dde0:                  00000000 8e035820 804ddfb9 80e7720c 8e035800 804017b1                                       
[1.767000]   de00:80ed8520 00000000 8e035820 00000000 80e7720c 8036933d 8e031940 00000000                                       
[1.767000]   de20:8e035820 80e7720c 80c375e4 80e03e88 00000000 000000d9 00000007 803695f5                                       
[1.767000]   de40:80c375e4 8043c2f5 80e3df2c 8e035820 00000000 80e7720c 80e03e88 00000000

我们是否错过了 devictree 中的某个条目? 我们使用的是内核5.5-rc5的 tas2770驱动程序。 论坛中有一个线程指向 TI 提供的另一个驱动程序-哪一个是首选使用的驱动程序? 您能否提供一些有关如何编译它并为其配置 devicetree 的提示?

2) 2)通过 i2c 手动控制 TAS2770

为了继续软件开发直到1)问题解决、我们创建了一些脚本、以使用用户空间中的 T2C-tools 初始化和控制 TAS2770放大器。 这种方法运行良好、但有一个例外:我们无法在最后为放大器加电

我们进行复位、然后寄存器0x02出现0xE 值。 如果我们尝试将位0和位1设置为0 (放大器处于活动状态)、运算结果始终为0x2 (SW 关断)。 无论我们是否尝试、该值都不会改变。 我们使用的 EVM 板通过 I2C 线路连接到我们的音频模块。 这些是我们尝试执行的命令:

设置页0:

i2cset -y 0 0x41 0x0 0x0

 

设置功率寄存器

i2cset -y 0 0x41 0x02 0x0 b

检查设置值:

i2cget -y 0 0x41 0x02                                             
0x02

您是否有任何想法、这里会出现什么问题? 将跳线设置为使用外部 i2c 时、我是否应断开 USB 电缆与 EVM 板的连接?

非常感谢您的参与、

Alex

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

    尊敬的 Alex:

    由于保护、器件可能会关断。 您是否已从第0页读回寄存器0x24、0x25和0x26、以检查是否触发了任何保护?

    此致、
    -Ivan Salazar
    应用工程师-低功耗音频和传动器

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

    您好、Ivan、

    谢谢提示、明天早上我将检查这些寄存器。 同时、我看到只有在 I2S 总线上有信号时才能设置该寄存器。 在 我开始播放音频时、有任何方法可以使放大器"始终就绪"、而无需初始化它?

    谢谢、

    Alex

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

    您好、Ivan、

    这些是我通过 i2cget 读取的值:

    # i2cget -y 0 0x41 0x24
    0x04
    # i2cget -y 0 0x41 0x25
    0x00
    # i2cget -y 0 0x41 0x26
    0xdb

    0x24报告 TDM 错误、该错误在您停止回放后立即发生、并且没有 I2S 信号传出。 我可以理解。

    但是,0x26的内容让我有点惊讶,特别是第6位(由于 DMA 请求 DSP 丢失标志而产生的中断),它来自哪里? 可以屏蔽这些内容吗?

    谢谢、

    Alex

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

    Alex、

    寄存器0x26中的位6也可能与丢失的时钟相关。 内部 DSP 使用 SBCLK 时钟信号来推导内部时钟。

    您应该在移除时钟之前禁用器件、并在时钟出现后再次启用器件。
    当回放停止正常使用时、此功能是否缺少时钟?

    您能否尝试以下操作:

    • 当 I2S 信号消失后、再次返回时、读取标志以清除 TDM 错误标志。 这是否会使器件恢复正常运行?
    • 此外、尝试将寄存器0x02位1-0写入0x00

    此致、
    -Ivan Salazar
    应用工程师-低功耗音频和传动器