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.

[参考译文] TLV320AIC3204:无法从16位更改 ADC 字长

Guru**** 2548280 points
Other Parts Discussed in Thread: TLV320AIC3204

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/976303/tlv320aic3204-cannot-change-adc-word-length-from-16-bit

器件型号:TLV320AIC3204

我无法将 ADC 字长更改为20、24或32位(卡在16位)。  使用8MHz MCLK、48kHz/立体声 SR。  使用此配置成功计时数据。

我已将第0页寄存器27 (0x1B)值更改为0x1C (20位 WL、生成 BCLK、WCLK)。  但这没有影响。

是否缺少其他配置设置?

谢谢、

杰克逊

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

    您好、Jackson、

    很遗憾听到您遇到一些问题。  

    P0、R27应该是对字长度进行编程所需的全部。 要进一步调试过程、您能否共享具有不同字长的 WCLK、BCLK 和 DOUT 示波器截图? 理想情况下、所有信号都可以在一个图像中捕获。

    我目前没有 AIC3204 EVM、因此我已订购几天内即可收到一个 EVM、以帮助进行任何必要的调试。   

    此致、

    Aaron

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

    亚伦:

    随附的是 P0 R27设置为20位字长度并生成 BCLK 和 WCLK (0x1C)的屏幕截图。  设置0x0C、0x2C 和0x3C (16位、24位和32位)的输出相同。

    下面也是用于配置编解码器的 I2C 事务的日志。

    10. 0.104572 I2C 设置写入[0 (0x30)]+ ACK 103.411. TLV 首先在 TLV320AIC3204_init()、"conf_data_pll"寄存器中写入
    0.104597 I2C "0"(0x00)+ ACK 0.024. PAGE 0、寄存器0
    0.104619 I2C "0"(0x00)+ ACK 0.022. 选择 PAGE 0
    11. 0.104662 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.104687 I2C "1"(0x01)+ ACK 0.024. 通过软件复位来初始化器件
    0.104709 I2C "1"(0x01)+ ACK 0.022.
    12. 0.104752 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.104777 I2C '4'(0x04)+ ACK 0.024. PLL 时钟高电平、MCLK、PLL
    0.104799 I2C C (0x43)+ ACK 0.023.
    13. 0.104842 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.104867 I2C '5'(0x05)+ ACK 0.024. 为 PLL 加电、P=1、R=1
    0.104889 I2C '145'(0x91)+ ACK 0.022.
    14. 0.104932 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.104956 I2C "6"(0x06)+ ACK 0.024. J=10.
    0.104979 I2C n (0x0A)+ ACK 0.023.
    15. 0.105022 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105046 I2C "7"(0x07)+ ACK 0.024. D=7520 =(29<8)+ 96 (PLL D 值(MSB))
    0.105069 I2C '29'(0x1D)+ ACK 0.023.
    16. 0.105112 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105136 I2C "8"(0x08)+ ACK 0.024. (PLL D 值(LSB))
    0.105159 I2C `(0x60)+ ACK 0.022.
    17. 0.105202 I2C 设置写入[0 (0x30)]+ ACK 0.043 其次是 TLV320AIC3204_init()、"conf_data_clk"寄存器中的 TLV 写入
    0.105226 I2C '11'(0x0B)+ ACK 0.024.
    0.105249 I2C '130'(0x82)+ ACK 0.023.
    18 0.105292 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105316 I2C '12'(0x0C)+ ACK 0.024.
    0.105339 I2C '135'(0x87)+ ACK 0.023.
    19. 0.105382 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105406. I2C \r (0x0D)+ ACK 0.024.
    0.105429 I2C "0"(0x00)+ ACK 0.023.
    20. 0.105472 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105496 I2C '14'(0x0E)+ ACK 0.024.
    0.105519 I2C '128'(0x80)+ ACK 0.022.
    21. 0.105562 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105586 I2C <(0x3C)+ ACK 0.024.
    0.105609 I2C "8"(0x08)+ ACK 0.023.
    22. 0.1056552 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105676 I2C "27"(0x1B)+ ACK 0.024.
    0.105699 I2C '12'(0x0C)+ ACK 0.022.
    23 0.105742 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105766 I2C '30'(0x1E)+ ACK 0.024.
    0.105788 I2C '156'(0x9C)+ ACK 0.022.
    24 0.105832 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105856 I2C %(0x25)+ ACK 0.024.
    0.105878 I2C '238'(0xEE)+ ACK 0.023.
    25 0.105922 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.105946 I2C '18'(0x12)+ ACK 0.024.
    0.105968 I2C '130'(0x82)+ ACK 0.022.
    26 0.106012 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106036 I2C '19'(0x13)+ ACK 0.024.
    0.106058 I2C '135'(0x87)+ ACK 0.023.
    27. 0.106101 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106126 I2C '20'(0x14)+ ACK 0.024.
    0.106148 I2C '128'(0x80)+ ACK 0.022.
    28. 0.106191 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106216 I2C =(0x3D)+ ACK 0.024. 选择 ADC PRB_R1
    0.106238 I2C "1"(0x01)+ ACK 0.022.
    29. 0.106281 I2C 设置写入[0 (0x30)]+ ACK 0.043 TLV 在 TLV320AIC3204_init()、"conf_data_routing"寄存器中写入第三个
    0.106306 I2C "0"(0x00)+ ACK 0.024.
    0.106328 I2C "1"(0x01)+ ACK 0.023. 第1页
    30 0.106371 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106396 I2C "1"(0x01)+ ACK 0.024.
    0.106418 I2C "8"(0x08)+ ACK 0.022.
    31. 0.106461 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106486 I2C "2"(0x02)+ ACK 0.024.
    0.106508 I2C "1"(0x01)+ ACK 0.023.
    32 0.106551 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106575 I2C {(0x7B)+ ACK 0.024.
    0.106598 I2C "1"(0x01)+ ACK 0.023.
    33. 0.106641 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106665 I2C '20'(0x14)+ ACK 0.024.
    0.106688 I2C %(0x25)+ ACK 0.022.
    34 0.106731 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106755 I2C n (0x0A)+ ACK 0.024.
    0.106778 I2C 3 (0x33)+ ACK 0.023.
    35. 0.106821 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106845 I2C =(0x3D)+ ACK 0.024.
    0.106868 I2C "0"(0x00)+ ACK 0.022.
    36. 0.106911 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.106935 I2C G (0x47)+ ACK 0.024.
    0.106958 I2C 2 (0x32)+ ACK 0.023.
    0.107001 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107025 I2C {(0x7B)+ ACK 0.024.
    0.107048 I2C "1"(0x01)+ ACK 0.022.
    0.107091 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107115 I2C 4 (0x34)+ ACK 0.024.
    0.107138 I2C '16'(0x10)+ ACK 0.022.
    0.107181 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107205 I2C 6 (0x36)+ ACK 0.024.
    0.107228 I2C '16'(0x10)+ ACK 0.022.
    0.107271 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107295 I2C 7 (0x37)+ ACK 0.024.
    0.107318 I2C '4'(0x04)+ ACK 0.022.
    0.107361 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107385 I2C 9 (0x39)+ ACK 0.024.
    0.107408 I2C '4'(0x04)+ ACK 0.023.
    0.107451 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107475 I2C ;(0x3B)+ ACK 0.024. 撤消对左 MICPGA 的静音、增益选择为32dB、使通道增益为0dB
    0.107497 I2C "0"(0x00)+ ACK 0.022.
    0.107541 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.107565 I2C <(0x3C)+ ACK 0.024. 撤消对正确 MICPGA 的静音、增益选择为32dB、使通道增益为0dB
    0.107587 I2C "0"(0x00)+ ACK 0.022.
    0.147649 I2C 设置写入[0 (0x30)]+ ACK 40.061 "TLV320AIC3204_CONFIG (CONF_DATA_DE静 音)"
    0.147673 I2C "0"(0x00)+ ACK 0.024.
    0.147695 I2C "0"(0x00)+ ACK 0.023.
    0.147739 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.147763 I2C Q (0x51)+ ACK 0.024.
    0.147785 I2C '192'(0xC0)+ ACK 0.023.
    0.147828 I2C 设置写入[0 (0x30)]+ ACK 0.043
    0.147853 I2C R (0x52)+ ACK 0.024.
    0.147875 I2C "0"(0x00)+ ACK 0.023.

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

    您好、Jackson、

    感谢您的分享。  

    上面的寄存器信息显示了写入命令、对吧? 作为完整性检查、您能否在配置器件后执行寄存器转储以查看寄存器0x1B 是否正在读取0x0C? 我不认为这是一个问题、因为器件能够同时输出 BCLK 和 WCLK、但最好确保寄存器已配置。  

    我目前没有可用的 AIC3204 EVM、但有一个正在订购中。 一旦我在一天或两天内收到它、我就可以自行进行一些测试、并帮助更好地调试这种行为。

    此致、
    Aaron Estrada

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

    亚伦:

    请告诉我您发现了什么、因为我仍然注意到这个问题。  

    我将读取 P0 R27并确认它已写入预期值(例如、20位字长为0x1C)、并将结果发布在此处。

    谢谢、

    杰克逊

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

    亚伦:

    我尝试在写入之前和之后读取寄存器0x1B、并得到意外结果。  我知道我正在写入寄存器、因为我试验了 P0 R6 (时钟设置寄存器3、PLL J 值)、并且我可以在示波器上看到字时钟的变化、但 I2C 流量不显示正确的读取结果(请参阅下面的内容)。  您能否调查此 I2C 输出并告诉我我是否错误地执行了读取指令?

    时间[s]  分析器名称  解码的协议结果 注释
    1.508E-05 I2C 设置写入[0 (0x30)]+ ACK 将 PAGE 设置为0x00
    0.0001153 I2C "0"(0x00)+ ACK  
    0.0002153 I2C "0"(0x00)+ ACK  
    0.0003782 I2C 设置写入[0 (0x30)]+ ACK 将地址设置为0x1B
    0.0004783 I2C "27"(0x1B)+ ACK  
    0.000641 I2C 设置读取到['193'(0xC1)]+ ACK 读取1个字节
    0.0007312 I2C "0"(0x00)+ NAK (? 应该已经是0x0c)
    0.0009067 I2C 设置写入[0 (0x30)]+ ACK 将0x2C 写入0x1B
    0.0010068 I2C "27"(0x1B)+ ACK  
    0.0011069 I2C 逗号(0x2C)+ ACK  
    0.0012704. I2C 设置写入[0 (0x30)]+ ACK 将 PAGE 设置为0x00
    0.0013705 I2C "0"(0x00)+ ACK  
    0.0014706 I2C "0"(0x00)+ ACK  
    0.0016336 I2C 设置写入[0 (0x30)]+ ACK 将地址设置为0x1B
    0.0017338 I2C "27"(0x1B)+ ACK  
    0.0018963 I2C 设置读取到['193'(0xC1)]+ ACK 读取1个字节
    0.0019864 I2C '255'(0xFF)+ NAK (? 与之前的读数不同)

    谢谢、

    杰克逊

     

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

    您好、Jackson、

    如果我对 I2C 输出进行正确解释、我看到您通过发送器件地址+写入(0)来发出写入命令、即0x30。 读取时、读取操作应为0x31。  

    此致、
    Aaron Estrada

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

    亚伦:

    好消息、坏消息:

    好消息:我在代码中发现了阻止我读取寄存器的错误:

    上面的第6行中有一个错误:"Setup read to ['193'(0xC1)]+ ACK"。  这应该是0x31、而不是0xC1。   

    (我的错误、来自另一个器件的读取例程的快速剪切和粘贴!)

    更正此错误后、我可以读取/写入/读取0x1B 寄存器并通过 I2C 获取预期结果:

    时间[s]  分析器名称  解码的协议结果 注释
    1.51667E-05 I2C 设置写入[0 (0x30)]+ ACK 读取0x1B
    0.000115333 I2C "0"(0x00)+ ACK
    0.000215583 I2C "0"(0x00)+ ACK
    0.000479917 I2C 设置写入[0 (0x30)]+ ACK
    0.000580083 I2C "27"(0x1B)+ ACK
    0.000844083 I2C 设置读取到[1 (0x31)]+ ACK
    0.000934333 I2C '12'(0x0C)+ NAK 读取结果:0x0C (预期在之前的设置中)
    0.001211333 I2C 设置写入[0 (0x30)]+ ACK 向寄存器0x1B 写入新值(0x1C)
    0.0013115 I2C "27"(0x1B)+ ACK
    0.001411667 I2C '28'(0x1C)+ ACK
    0.0016765 I2C 设置写入[0 (0x30)]+ ACK 读取0x1B
    0.00177675 I2C "0"(0x00)+ ACK
    0.001877 I2C "0"(0x00)+ ACK
    0.002141333 I2C 设置写入[0 (0x30)]+ ACK
    0.002241583 I2C "27"(0x1B)+ ACK
    0.0025055 I2C 设置读取到[1 (0x31)]+ ACK
    0.00259575 I2C '28'(0x1C)+ NAK 读取结果:0x1C (如预期!)

    坏消息:

    这就确认了我已经用0x1B 寄存器写入了0x1C、该寄存器应该将器件配置为一个20位字、但范围没有变化。  似乎还有其他一些寄存器也需要进行更改以启用此功能。

    您是否有任何示例脚本用于配置器件的20位或更长字

    —杰克逊

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

    您好、Jackson、

    我手头上没有脚本、但一旦我进入 EVM (预计今天会出现但尚未到达)、我就可以在主模式下运行它并通过脚本发送。  

    查看其他选项、您是否尝试在从模式下运行器件?

    此致、

    Aaron Estrada

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

    亚伦:

    我们没有尝试过这种方法。  这将是我们系统架构的一个很大变化、因此我们希望继续将该 TLV320作为 I2S 主器件运行。  我们可以把它作为最后的手段来尝试。  为什么这会对字长产生影响?

    我期待看到您的此配置脚本。

    谢谢、

    杰克逊

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

    您好、Jackson、

    在此对拖延表示歉意。

    我认为我发现了为什么您的输入/输出数据速率低至16位的原因。 您的 BCLK 设置为~1.56MHz。 在48kHz 的 WCLK 上、最多只允许发送32位数据(左侧和右侧为16位)。

    要增加 BCLK 频率、您需要减小 P0、R30中的 BLCK 分频器设置、以发送至少为2*bit_length*FS 的 BCLK。 例如、如果您希望发送32位数据、则需要至少2.822MHz 的 BCLK 频率。 请告诉我这是否有帮助。  

    此致、

    Aaron Estrada

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

    亚伦:

    好的、对我来说是有意义的:

    P0 R30设置实际的位时钟频率(相对于字时钟)--所以我可以将 R30设置为不同的值,并在 BCLK/WCLK 之间获得任意(偶数)比率:16、32、28 (!)等

    P0 R27似乎只是告诉 ADC 要馈入 DATA_OUT 的位数、其余位用零填充。  它与实际的位时钟频率无关。

    是这样吗?

    —杰克逊

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

    您好、Jackson、

    您回答正确! 如果对此有任何混淆、请道歉。 我希望这能解决您的问题。

    此致、

    Aaron Estrada