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/TLV320AIC3204EVM-K:I2C TLV320AIC3204评估模块问题。

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/650362/linux-tlv320aic3204evm-k-i2c-tlv320aic3204-evaluation-module-problem

部件号:TLV320AIC3204EVM-K

工具/软件:Linux

大家好,

我尝试通过I2C2总线与BeagleBone Black通信,如下所示:

+ SCL (P12_16)-> BBB上的P9_19

+ SDA (P12_20)-> BBB上的P9_20

SW1的位置为"I22",SW2为"低"。 虽然结果似乎不好,但我可以向micro_chip_24LC64发送和接收数据,从属地址为0x50:

根部@BeagleBone:~# i2cset -y 2 0x50 0x00 0x00
根部@BeagleBone:~#
根部@BeagleBone:~# i2ctget -y 2 0x50 0x00
0x12

当我向TLV320AIC304发送数据时,从属地址为0x30 (或0x18,我不知道确切的地址),这是错误。 终端是:

根部@BeagleBone:~# i2cset -y 2 0x30 0x00 0x00
错误:写入失败
根部@BeagleBone:~# i2cset -y 2 0x18 0x00 0x00
错误:无法将地址设置为0x18:设备或资源正忙
根部@BeagleBone:~#

大家能帮我检查一下吗?

谢谢

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

    你好,Nguyen,

    AIC3254的7位地址是1.1万,使用R/W位可以被视为0x30或0x31。 它取决于主机系统的语法,如何编写I²C命令。 您是否正在使用AIC3254 EVM进行此测试?您是否已验证该部件的配置是否正确?

    此致,

    -Diego Mel é ndez López ñ a
    音频应用工程师

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

    您好,Diego,

    我在Linux中使用i2c-tool来写入和读取数据。 我只使用AIC3254EVM进行此测试,不要连接到USB主板,因为我要在I2S模式下配置此编解码器:

    产品链接在  
     
    硬件连接:
     + BCLK (WFP 22.3)-> MSASP0_ACLKX (P9_31) ON BBB
     + WCLK (WFP 22.7)-> MsASP0_FSX (P9_29)
     + DIN (WFP 22.11) -> MsASP0_AXR0 (P9_30)
     + DOUT (WFP 22.13)-> MsASP0_AXR2 (P9_28)
    启动后,TLV320AIC模块似乎可以检测到:
    根部@BeagleBone:~# aplay -l
    ****播放硬件设备列表****
    卡0:TLV320AIC32X4 [TI TLV320AIC32X4],设备0:AIC32X tlv320aic32x4-hifi-0[]
     子设备:0/1
     子设备#0:子设备#0

    但我不能通过I2C进行配置。 我还通过电压表检查一些TLV320芯片引脚。 SPISELECT为0V,SW1为"SCL"。  

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

    您好,Diego,

    我发现了这个问题。 在DTS文件中,当我评论reg=<0x18>时,我可以在地址0x18处读写TLV320AIC从属设备,但驱动程序失败。 日志如下:

    [ 2.6.2893万 ] wkup_m3_ipc 44e1.1324万.wkup_m3_ipc:无法获取rproc句柄
    [ ASOC] DaVinci 2.24.6009万 声音:编码解码器tlv320aic32x4-hifi未注册
    [ Sndic_EVM声音:2.25.3573万 SOC_REGISTER_CARD故障(-517)
    [ 2.26.7636万 OMAP-VOLT_BLATE_INIT:未添加电压驱动器支持
    [ IPC] PM:无法获取2.27.5375万 句柄
    [ 2.34.8455万 ] i2c i2c-2:of_i2c:/OCP/i2c@4819c000/tlv320aic32x4@18上的reg无效

    我的DTS文件是:

    i2c2{
    pinctrl-names ="default";
    pinctrl-0 =<&i2c2_pins>;

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

    tlv320aic32x4:tlv320aic32x4@18{
    兼容="ti,tlv320aic32x4";
    REG =<0x18>;
    状态="正常";
    };
    };

    希望听到您的反馈,

    此致,

    Hiep Nguyen

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

    你好 ,Nguyen,

    感谢您的补充意见。 遗憾的是,我们不提供驱动程序支持,我们可以帮助进行常规设备配置和注册设置,但我们不支持驱动程序调试或配置。

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

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

    您好,Diego,

    我通过在i2cset或i2cget命令中添加选项-f来修复此问题。 如下所示:

    根部@BeagleBone:~# i2cset -y -f 2 0x18 0x00 0x01
    根部@BeagleBone:~# i2ctget -y -f 2 0x18 0x00
    0x01
    根部@BeagleBone:~#

    现在,我想将硬件通过I2C2总线连接到BeagleBone上,配置为I2S模式。 我面临一些问题:

    1,DTS文件中的Routing and Widget。 它似乎是错误的。  

    [ ASOC] tlv320aic32x4 2-0018:2.55.8577万 :找不到CM_R的源小部件
    [ ASOC] tlv320aic32x4 2-0018:2.56.527万 :无法将路由CM_R -> 10 kOhm -> CM_R添加到右侧混合器负极电阻器
    [ ASOC] tlv320aic32x4 2-0018:2.57.5861万 :找不到CM_R的源小部件
    [ ASOC] tlv320aic32x4 2-0018:2.58.2523万 :无法将路由CM_R -> 20千欧-> CM_R添加到右侧混合器负极电阻器
    [ ASOC] tlv320aic32x4 2-0018:2.59.3108万 :找不到CM_R的源小部件
    [ ASOC] tlv320aic32x4 2-0018:2.59.9767万 :无法将路由CM_R -> 40千欧-> CM_R添加到右侧混合器负极电阻器
    [ ASOC] tlv320aic32x4 2-0018:2.62.7347万 :找不到CM_L的源小部件
    [ ASOC] tlv320aic32x4 2-0018:2.63.4017万 :无法将路由CM_L -> 10千欧-> CM_L添加到左混音器负电阻器
    [ ASOC] tlv320aic32x4 2-0018:2.64.4519万 :找不到CM_L的源小部件
    [ ASOC] tlv320aic32x4 2-0018:2.65.118万 :无法将路由CM_L -> 20千欧-> CM_L添加到左混音器负电阻器
    [ ASOC] tlv320aic32x4 2-0018:2.66.1677万 :找不到CM_L的源小部件
    [ ASOC] tlv320aic32x4 2-0018:2.66.8336万 :无法将路由CM_L -> 40千欧-> CM_L添加到左混音器负电阻器

    2,您能否给我一些示例或文档,说明如何在I2S模式下使用TLV320AIC。使用音频引脚输入:WCLK,BCLK和DIN。

    非常感谢,

    Hiep Nguyen

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

    你好,Nguyen,

    您应该能够通过插头P22连接I²S Ω 信号,请参阅 用户指南中提供的子板EVM原理图。 默认情况下,AIC3254被配置为在16位I²S从属模式下运行,因此只需要配置内部时钟分隔器以接受主机设备时钟。 如果您提供MCLK和I²S Ω 时钟频率,我可以帮助您配置分频器。

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

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

    您好,Diego,

    我现在可以听到设备发出的声音。 但声音似乎不清楚。 我想,原因是MCLK,BCLK,WCLK频率,就像你说的那样。

    当编解码器在USB模式下工作时,我测量了MCLK频率。 它是112898兆赫。 因此,我必须设置此值,或者我可以使用其他值,因为我要使用BeagleBone的24MHz时钟。

    我的设置是16位立体声,2个通道,WCLK =44.1 KHz,BCLK=14112 MHz,MCLK=24 MHz,来自BeagleBone提供给编解码器的McASP0。

    目前,我正在使用外部MCLK时钟(频率 为112898 MHz)。 我不知道如何将内部时钟配置为24 MHz。  内部时钟的配置仅取决于MCLK频率或MCLK,BCLK和WCLK频率。 下面是我在I2S mode.e2e.ti.com/.../codec_5F00_setup.txt中设置编码解码器的脚本

    您能给我一些有关MCLK为24 MHz的建议吗?

    谢谢,此致,

    Hiep Nguyen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Diego,
    我尝试将MCLK配置为24 MHz。 如下所示:
    ######################################
    #时钟设置
    #------------------
    编解码器接收的#:MCLK = 24 MHz,
    # BLCK = 14112 MHz,WCLK = 44,1 kHz
    ######################################
    #
    #选择第0页
    i2cset -y -f 2 0x18 0x00 0x00
    #
    #使用值1打开NDAC分配器的电源
    i2cset -y -f 2 0x18 0x0B 0x81
    #使用值4打开MDAC分隔器的电源
    i2cset -y -f 2 0x18 0x0c 0x84
    #
    #将DAC的OSR编程为136
    i2cset -y -f 2 0x18 0x0d 0x00
    i2cset -y -f 2 0x18 0x0E 0x88

    此设置可在MCLK引脚为24 MHz时使用。 但声音就是噪音。 希望听到您对该案例的意见。
    此致,
    Hiep Nguyen
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Nguyen,

    感谢您的反馈。 正如您在上一篇文章中提到的,时钟的配置似乎是问题所在。 对于您当前的应用,PLL需要从24MHz时钟生成内部音频系统时钟。 请尝试以下PLL和时钟分配器配置:

    • PLL模式= 0
    • PLL参数:
      • P = 2
      • R = 1
      • J = 7
      • d = 560
    • 除法器:CODIC_CLKIN = PLL_CLK
      • mAdc/MDAC =3
      • NADC/NDAC = 3
      • AOSR/DOSR = 128

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

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

    您好,Diego,

     根据您的上述建议,我尝试如下配置:

    ######################################
    #时钟设置
    #------------------
    编解码器接收的#:MCLK = 24 MHz,
    # BLCK = 14112 MHz,WCLK = 44,1 kHz
    ######################################
    #
    #选择第0页
    i2cset -y -f 2 0x18 0x00 0x00
    #
    # MCLK作为PLL_INPUT;PLL_CLK作为CODEC _CLKIN
    i2cset -y -f 2 0x18 0x04 0x03
    #
    # P = 2;R = 1;J = 7;D = 560;PLL已启用
    i2cset -y -f 2 0x18 0x05 0xa1
    i2cset -y -f 2 0x18 0x06 0x07
    i2cset -y -f 2 0x18 0x07 0x02
    i2cset -y -f 2 0x18 0x08 0x30
    #
    # NDAC = 3,MDAC = 3;分隔器已通电
    i2cset -y -f 2 0x18 0x0B 0x83
    i2cset -y -f 2 0x18 0x0c 0x83

    #将DAC的OSR编程为128
    i2cset -y -f 2 0x18 0x0d 0x00
    i2cset -y -f 2 0x18 0x0E 0x80

    但当我播放.mp3音乐时,声音也会听到噪音。 我在编解码器上测量MCLK,BCLK,MCLK的频率。 值是正确的。

    我将再次确认:

    + BeagleBone的设置为16位,WCLK=45.1 KHz,BCLK=14112 MHz,MCLK=24 MHz。 所以,我试了两个案例:MCLK (ON BBB)->编解码器中的PLL分配器,然后直接插入MCLK。

    +我在TLV320AIC应用示例中找到。 BCLK的频率为2822 MHz。 这意味着编解码器在32位立体声上工作。 我不能将BCLK时钟从BeagleBone划分为2822 MHz。 所以,我使用14112 MHz来获得16位立体声。 我不知道这就是为什么声音会听到噪音的原因。 我正在 使用AM335x-EVM-Linux-Linux-Linux.Linux 00.06 (04.01 标题4.9 .41)。 以下是我的tlv320aic32x4硬件参数:

    静态int tlv320aic32x4_hw_params(struct snd_pcm_Substream *Substream,
    结构snd_pcm_hw_params *params)

    struct snd_soc_pcm_runtime *RTD =子流->专用数据;
    struct snd_soc_dai *codec_dai = RTD->codec_dai;
    结构snd_soc_dai *cpu_dai = RTD->cpu_dai;
    struct snd_soc_card *so_card = RTD->card;
    Int ret =0;
    struct platform_device *pdev = to_platform_device (soc_card->dev);
    unsigned int BCLK_freq = EVM_GET_BCLK (参数);
    unsigned SYSCLK =((struct snd_soc_card_drvdata_dDaVinci *)
    Snd_SOC_CARD_GET_DRVDATA (SOC_CARD)->SYSCLK;

    RET = snd_so_da_set_clkdiv (CPU_dai,1,SYSCLK/BCLK_freq);
    如果(ret < 0){
    dev_err(&PDEV->dev,"Can't set CPU DAI clock diver别%d\n",
    RET);
    返回台;
    }

    printk ("TLV320AIC32X4硬件参数\n");
    printk ("SYSCLK=%d\n",SYSCLK);
    printk ("BCLK_freq=%d\n",BCLK_freq);/*设置CPU系统时钟*/

    RET = snd_so_da_set_SYSCLK (CPU_dai,0,SYSCLK,snd_so_clock_out);
    如果(ret < 0)
    返回台;


    /*设置编解码器系统时钟*/
    RET = snd_so_da_set_SYSCLK (codec_dai,0,SYSCLK,snd_so_clock_out);
    如果(ret < 0)
    返回台;

    返回台;
    }

    附件中有两个脚本,它们在两种情况下配置了编解码器,正如我所说的那样。

    e2e.ti.com/.../24HMz_5F00_PLL.txt

    e2e.ti.com/.../24MHz_5F00_direct_5F00_to_5F00_MCLK.txt

    希望很快能收到您的反馈,

    此致,

    Hiep Nguyen