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.

[参考译文] TLV320AIC3254:编解码器中的数据不正确

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/598266/tlv320aic3254-data-from-codec-is-not-right

部件号:TLV320AIC3254

情景:  

硬件: eZdsp5535

软件:使用 CSL_I2S_AudioCodec_DMA项目

播放音乐,数据通过 编解码器/I2S/DMA通过eZdsp传输,然后播放。

问题:数据流进入内存中每个字重复4次。 播放时没有任何噪音问题。 我不知道为什么每个字的数据重复4次。

0x1万 0x1万 0x1万 0x1万 0x2万 0x2万   ....................

调试:

1.我试图降低编解码器的采样频率。 从这一变化中,数据不再重复4次,而是减少到2次。 我不知道发生了什么。 编解码器,I2S甚至DMA是否存在任何配置问题?

根据PLL系数和除法器,系统似乎正在使用PLL_CLKIN =512 KHz。 因此,为了获得8000的采样率,我建议修改以下行:

AudioCodecRegWrite(TI3254_CLK_MDAC_REG, 0x82);// MDAC分配器已通电,MDAC =2  

AudioCodecRegWrite (TI3254_CLK_mAdc_REG,0x84);// mAdc分配器通电,mAdc =  4

e2e.ti.com/.../198.1031万

我们非常感谢您为解决此问题提供任何帮助或帮助!

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

    欢迎使用E2E,感谢您对我们产品的关注!

    这肯定是一个采样率问题。 能否提供PLL系数(P,R,J,D)和时钟分频器(NADC,NDAC,mAdc,MDAC,AOSR, DOSR)? 此外,您能否提供您正在使用的所有时钟频率(MCLK,BCLK,WCLK)?

    谢谢你。

    此致,
    Luis Fernando Rodríguez ñ o S.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的即时响应。
    我正在使用TI CSL_I2S_AudioCodec_DMA的同一个项目。 我没有更改以下任何设置。 它们是默认设置。
    我是此编解码器设置的新用户。 很抱歉,我没有在下面的消息中分享您想要的所有信息。
    如果您需要更多信息来验证我的设置,请告诉我。

    PLL系数和BCLK,WCLK
    结果= AIC3254_Write( 27, 0x00, hi2c ); // BCLK和WCLK被设置为AIC3204 (从属)的I/p
    结果= AIC3254_Write( 4, 0x07, hi2c ); // PLL设置:PLLCLK <- BCLK和CODEC _CLKIN <-PLL CLK
    结果= AIC3254_Write( 6, 0x08, hi2c ); // PLL设置:J = 32
    结果= AIC3254_Write( 7,0, hi2c ); // PLL设置:hi_Byte(D)
    结果= AIC3254_Write( 8,0, hi2c ); // PLL设置:Lo_Byte (D)

    (NADC,NDAC,mAdc,MDAC,AOSR, DOSR)
    结果= AIC3254_Write( 5, 0x92, hi2c ); // PLL设置:打开PLL电源,P=1和R=2
    结果= AIC3254_Write( 13, 0x00, hi2c ); // DOSR的Hi-Byte (DOSR)= 128十进制或0x0080 DAC重采样
    结果= AIC3254_Write( 14, 0x80, hi2c ); // DOSR的LO_Byte (DOSR)= 128十进制或0x0080
    结果= AIC3254_Write( 20, 0x80, hi2c ); // AOSR表示AOSR = 128位十进制数或0x0080表示小数筛选器1到6
    结果= AIC3254_Write( 11, 0x88, hi2c ); //打开NDAC电源并将NDAC值设置为4
    结果= AIC3254_Write( 12, 0x82, hi2c ); //打开MDAC并将MDAC值设置为2
    结果= AIC3254_Write( 18, 0x88, hi2c ); //启动NADC并将NADC值设置为4
    结果= AIC3254_Write( 19, 0x82, hi2c ); //启动mAdc并将mAdc值设置为2
    结果= AIC3254_Write( 0, 0x01, hi2c ); //选择第1页
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    您是否还可以提供BCLK和WCLK值? 在这种情况下,BCLK频率似乎用作编解码器时钟输入。

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

    我无法获得BCLK和WCLK值的值。 它既不是在编码解码器中也不是在C5535中设置的。我看不到BCLK和WCLK主控制器的任何其他选项。

    如果编解码器将这些引脚设置为输入,您是否有为48kHz设置设置这些值的示例。

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

    您好,

    请查看下面的脚本。 它包含具有48kHz设置和BCLK及WCLK作为输入的高性能配置。

    ######################################
    #高性能立体声播放
    ######################################

    ######################################
    #软件重置
    ######################################
    #
    #选择第0页
    W 30 00 00 00
    #
    #通过软件重置初始化设备
    W 30 01 01
    #
    ######################################

    ######################################
    #时钟设置
    #------------------
    编解码器接收的#:MCLK = 12.2880 MHz,
    # BLCK = 3.072 MHz,WCLK = 48 kHz
    ######################################
    #
    #选择第0页
    W 30 00 00 00
    #
    # NDAC = 1,MDAC = 2
    W 30 0b 81 82.
    #
    ######################################

    ######################################
    #信号处理设置
    ######################################
    #
    #选择第0页
    W 30 00 00 00
    #
    #将DAC模式设置为PRB_P8
    宽30 3c 08.
    #
    ######################################

    ######################################
    #初始化编解码器
    ######################################
    #
    #选择第1页
    W 30 00 01
    #
    #在存在外部的情况下禁用弱AVDD
    # AVDD电源
    W 30 01 08
    #
    #启用主模拟电源控制
    W 30 02 00
    #
    #将输入加电时间设置为3.1毫秒(对于ADC)
    # w 30 47 32.
    #
    #将REF充电时间设置为40ms
    W 30 7b 01
    #
    ######################################

    ######################################
    #回放设置
    ######################################
    #
    #选择第1页
    W 30 00 01
    #
    #去弹
    W 30 14 25.
    #
    #将LDAC/RDAC路由至HPL/HPR
    W 30 0c 08
    #
    #将LDAC/RDAC路由至LOL/Lor
    W 30 0e 08 08
    #
    #启动HPL/HPR和LOL/Lor驱动程序
    W 30 09 3C
    #
    #使HPL/HPR驱动程序静音,0dB增益
    W 30 10 00 00 00
    #
    #使LOL/Lor驱动器静音,0dB增益
    W 30 12 00 00 00
    #
    #选择第0页
    W 30 00 00 00
    #
    # DAC => 0dB
    W 30 41 00 00 00
    #
    #加电LDAC/RDAC
    宽30 3f d6
    #
    # Unmute LDAC/RDAC
    宽30 40 00
    #
    ######################################

    此致,
    Luis Fernando Rodríguez ñ o S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当前设置:编码解码器被设置为用于BCLK和WCLK的I/p。
    我尝试将其设置为主服务器,但一切都停止了。
    结果= AIC3254_Write( 27, 0x00, hi2c ); //将BCLK和WCLK设置为I/p,将AIC3204 (从属)更改为
    结果= AIC3254_Write( 27, 0x0C, hi2c ); //在AIC3204 (主)中,BCLK和WCLK设置为o/p

    此配置表示# Clock Settings (时钟设置)
    #------------------
    编解码器接收的#:MCLK = 12.2880 MHz,
    # BLCK = 3.072 MHz,WCLK = 48 kHz

    从何处获取BLCK和WCLK? 在哪里设置这些设置?
    任何细节都将很有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    当将WCLK和BCLK配置为输出时,需要进行附加配置。 WCLK直接配置为采样率。 因此,没有用于WCLK的其他配置。

    但是,BCLK引脚需要其他设置:
    第0页/注册29。 它用于配置BCLK源。 它可以是DAC_CLK,DAC_MOD_CLK,ADC_CLK或ADC_MOD_CLK。 有关详细信息,请参阅位D1-D0。
    -第0页/注册30。 它用于启用BCLK输出。 BCLK放射源被BCLK N分压器取除。

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

    感谢您的更新。

    1.我按照建议进行了更改。 更改后,播放停止工作。  在进行这些更改之前,我现在怀疑它是如何工作的。  

    2.以前它被配置为输入模式。 I2S配置为从属模式。 在这种情况下,它是如何让时钟从编解码器流化数据的。 在这种情况下,BCLK/WCLK设置为输入,因此这些时钟不会发送到I2S。 但I2S以FS速率获取数据。 不确定速率,播放正常。 我想到的基本问题是I2S从何处获得流式传输数据的时钟。

    有关在当前设置下如何工作而不设置这些BCLK/WCLK的任何想法。 我现在正在检查线路上是否有信号可用,我确定I2S上的BCLK/WCLK引脚上有信号,但信号来自何处,是否来自编解码器(在这种情况下,不可能,因为它们被配置为输入)。 它无法在I2S中自行生成,因为I2S已配置为从属设备。  现在很困惑。 任何提示对于进一步调试此问题都非常有用。

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

    您对此应用程序是否有任何示意图? 如您所述,在从属模式下,音频编解码器无法生成I2S时钟。 因此,您需要验证连接到I2S线的设备是否正在生成I2S流。

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

    应用程序是 CSL_I2S_AudioCodec_DMA项目。 它是CSL软件包中的默认应用程序之一。

    硬件: eZdsp5535

    eZdsp5535的技术参考手册: http://support.spectrumdigital.com/boards/ezdsp5535/revc/files/ezdsp5535_TechRef_RevC.pdf</s>5535

    默认情况下:

    编解码器文件 codec_AIC3254.c,BCLK和WCLK被设置为输入模式。

    AudioCodec_DMA.c (验证CSL I2S功能的测试代码),I2S被设置为从属设备。 请参阅这些仅为TI示例中的所有默认设置。 我没有更改或更新任何内容。

    默认情况下运行此应用程序时,我可以听到清晰的回放。 例如:我正在通过eZdsp5535从PC播放音乐。

     播放时肯定有一个有效的流,它正在通过I2S,但不确定是谁在生成时钟或设置速率。

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

    根据原理图,C5535似乎是生成I2S时钟的器件。 时钟在pin p5和n10上生成。 因此,如果音频编解码器配置为主模式,则I2S线路上可能会发生冲突。 此应用程序似乎只能在从属模式下与AIC3204一起使用。

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

    此问题现已解决。 下面是一些共同的观点

    1. 在C5535项目 CSL_I2S_AudioCodec_DMA文件中覆盖了编解码器主/从和时钟配置:codec_AIC3254.c  

    I2S2_SRGR = 0x0015;
    I2S2_ICMR = 0x0028;//启用中断
    I2S2_CR || 0x0012;// 16位字,主控,启用I2C

    需要对代码行的上面进行注释,以便它不会覆盖任何初始配置。

    2. 请参阅以下文档,将编解码器设置为主编解码器,并配置时钟。

    http://www.ti.com/lit/an/slaa413/slaa413.pdf

    注:eZdsp5535 M_CLK为12MHz。

    希望这有所帮助。