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.

[参考译文] TLV320ADC6140:增益校准寄存器有时未正确设置。

Guru**** 2629905 points

Other Parts Discussed in Thread: TLV320ADC6140

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1580838/tlv320adc6140-gain-calibration-register-sometimes-not-set-correctly

器件型号: TLV320ADC6140

大家好、E2E 专家:

你好。

I 通过 SPI 控制 TLV320ADC6140((2MHz 时钟)。 会不时加载不同的配置、其中涉及更新 IC 的以下寄存器。 让我们命名:

配置 A (PGA 增益 8dB):

SpiWrite2 (0xd6、0x00);//AudioSetDecimatorFilter
SpiWrite2 (0x28、0xdd);//AudioSetSampleRate
SpiWrite2 (0x7c、0xc9);//AudioSetDvol
SpiWrite2 (0x90、0xc9);//AudioSetDvol
SpiWrite2 (0x7a、0x20);//AudioSetGain
SpiWrite2 (0x8e、0x20);//AudioSetGain
SpiWrite2 (0x7E、0x80);//AudioSetCal
SpiWrite2 (0x92、0x80);//AudioSetCal
SpiWrite2 (0x80、0x00);//AudioSetPhase
SpiWrite2 (0x94、0x00);//AudioSetPhase

 

配置 B (PGA 增益 9dB):

SpiWrite2 (0xd6、0x00);//AudioSetDecimatorFilter
SpiWrite2 (0x28、0xdd);//AudioSetSampleRate
SpiWrite2 (0x7c、0xc9);//AudioSetDvol
SpiWrite2 (0x90、0xc9);//AudioSetDvol
SpiWrite2 (0x7a、0x24);//AudioSetGain
SpiWrite2 (0x8e、0x24);//AudioSetGain
SpiWrite2 (0x7E、0x80);//AudioSetCal
SpiWrite2 (0x92、0x80);//AudioSetCal
SpiWrite2 (0x80、0x00);//AudioSetPhase
SpiWrite2 (0x94、0x00);//AudioSetPhase

两者之间的差异仅存在于 PGA 值中。

传输按照列出的顺序发送、不修改其他寄存器、ADC 完全正常运行且不会停止、禁用 DRE 和 AGC。

我注意到的是、当当前配置为 A 并发送更新到 B 时、在许多情况下、第一个通道电平大约降低 0.5dB。 此问题可追溯到通道增益校准寄存器 (0x39 = 0x72>>1)。 如果稍后仅更新该寄存器、则问题消失。

在不太可能的情况下、另一个通道有时会降低 0.5dB、或同时提供正确的电平。

从 B->A、A->A 或 B->B 更新时从未出现问题

使用示波器记录 SPI 信号、并进行检查以确保匹配所需的数据。

此致、

公务员制度委员会

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

    我在说明中犯了一个错误:受影响的校准寄存器是:0x3F = 0x7E>>1

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

    尊敬的 Svilen:

    几个评论:

    问题可追溯到通道增益校准寄存器 (0x39 = 0x72>>1)。

    您在寄存器 0x3f 中看到所述问题的值是多少? 不是写入的值吗?

    你能否说明下述写的意图?

    • SpiWrite2 (0x28、0xdd);//AudioSetSampleRate

    这将配置主模式时钟、但器件未设置为主模式、0xdd 表示保留位 值。 除非我遗漏了某些内容、否则我会删除这一行。 我不确定它是否导致了错误、但为了正确实现、我们应在此处阐明目标。

    以下行设置为其默认值或复位值:

    • SpiWrite2 (0x7c、0xc9);//AudioSetDvol
    • SpiWrite2 (0x90、0xc9);//AudioSetDvol
    • SpiWrite2 (0x7E、0x80);//AudioSetCal
    • SpiWrite2 (0x92、0x80);//AudioSetCal
    • SpiWrite2 (0x80、0x00);//AudioSetPhase
    • SpiWrite2 (0x94、0x00);//AudioSetPhase

    如所示、这些寄存器在启动时将具有这些值、无需重新写入。  不过、如果写入成功执行、这些不应导致错误。

    是否要配置通道 1 和通道 3? 默认情况下、该器件希望这些通道之间有 32 位的间隙、除非进行了额外的配置以将通道 3 移动到时隙 1。

    我期待听到您的答复、如果您需要任何澄清、请告诉我。

    此致、

    Garret

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

    您好、 Garret。

    关于 SpiWrite2 (0x28、0xdd); 由于我手动将值从十进制复制到十六进制、因此出现了计算错误。 测试的实际值为 0x44 (48KHz)。

    目前没有读回这些值的函数。 无法将它们可视化。 无论如何、将添加该函数并使用示波器读取值。

      在 本示例中、其他参数使用默认值、但 在实际产品中保留了一个函数、其中可以有许多预设、并且它们是非默认值。

      TLV320ADC6140 的所有 4 个通道都被使用、但它们路由至立体声左对齐信号。 目前正在使用第 1 章和第 3 章。

    我附加 SPI 转储、之后左侧通道会获得较低的值。

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

    再次大家好。

    我制作了一个工具来手动读取和设置寄存器。 我将器件置于 0.5dB 错误并读回寄存器 — 所有外观都正确,结果如下:

    >audiocmd 0xd7 0
    读回:0x0

    >audiocmd 0x29 0
    回读:0x44

    >audiocmd 0x7d 0
    读回:0xc9

    >audiocmd 0x91 0
    读回:0xc9

    >audiocmd 0x7B 0
    回读:0x24

    >audiocmd 0x8F 0
    回读:0x24

    >audiocmd 0x7f 0
    回读:0x80

    >audiocmd 0x93 0
    回读:0x80

    >audiocmd 0x81 0
    读回:0x0

    >audiocmd 0x95 0
    读回:0x0

    #此命令后,级别设置为预期值。 读取值无效、因为这是一个写入操作。
    >audiocmd 0x7E 0x80
    回读:0xFF

    >audiocmd 0x7f 0x80
    回读:0x80

    测得的电平 误差相当于校准寄存器的值为 0x40。 但如果设置了 0x40、则读回 0x40、而上面的读数为 0x80。

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

    尊敬的 Svilen:

    为了确认、SPI 是否成功写入除 0x7E (0x3f) 之外的每个寄存器? 如果您不写入该寄存器、您从该寄存器读回什么值(即默认值)?

    此致、

    Garret

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

    你(们)好

    在从不写入  0x7E (0x3f) 的版本中、读取操作会返回 0x80。

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

    尊敬的 Svilen:

    如果该版本 还解决了输出端的问题、我建议删除此写入、以便 0x3f 寄存器始终为默认值 0x80。

    此致、

    Garret

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

    这正是我的权变措施。

    无论如何、写入其他寄存器时可能会遇到类似问题。

    也许有内部的 TLV320ADC6140 复制、以及从模拟增益、数字、增益 和校正寄存器到一些内部寄存器、将 dB 转换为 系数、并快速更新一行中的寄存器会影响该计算?

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

    尊敬的 Svilen:

    很抱歉我误读了之前的帖子 — 该寄存器在设置为 0x80 后正在正确读回、似乎是这样吗? 我不确定问题出在这里。 您是否能够发送完整的寄存器转储和/或原理图以进一步调试?

    此致、

    Garret

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

    你(们)好

    以下是 器件处于增益差异时的寄存器转储:

    Read reg: 0x00: Read back: 0x0
    Read reg: 0x01: Read back: 0x0
    Read reg: 0x02: Read back: 0x81
    Read reg: 0x03: Read back: 0x0
    Read reg: 0x04: Read back: 0x0
    Read reg: 0x05: Read back: 0x5
    Read reg: 0x06: Read back: 0x0
    Read reg: 0x07: Read back: 0xbe
    Read reg: 0x08: Read back: 0x0
    Read reg: 0x09: Read back: 0x0
    Read reg: 0x0a: Read back: 0x0
    Read reg: 0x0b: Read back: 0x0
    Read reg: 0x0c: Read back: 0x1
    Read reg: 0x0d: Read back: 0x20
    Read reg: 0x0e: Read back: 0x3
    Read reg: 0x0f: Read back: 0x4
    Read reg: 0x10: Read back: 0x5
    Read reg: 0x11: Read back: 0x6
    Read reg: 0x12: Read back: 0x7
    Read reg: 0x13: Read back: 0x80
    Read reg: 0x14: Read back: 0x44
    Read reg: 0x15: Read back: 0x44
    Read reg: 0x16: Read back: 0x10
    Read reg: 0x17: Read back: 0x10
    Read reg: 0x18: Read back: 0x4
    Read reg: 0x19: Read back: 0x20
    Read reg: 0x1a: Read back: 0x2
    Read reg: 0x1b: Read back: 0x8
    Read reg: 0x1c: Read back: 0x0
    Read reg: 0x1d: Read back: 0x0
    Read reg: 0x1e: Read back: 0x2
    Read reg: 0x1f: Read back: 0x40
    Read reg: 0x20: Read back: 0x0
    Read reg: 0x21: Read back: 0xa0
    Read reg: 0x22: Read back: 0x0
    Read reg: 0x23: Read back: 0x0
    Read reg: 0x24: Read back: 0x0
    Read reg: 0x25: Read back: 0x0
    Read reg: 0x26: Read back: 0x0
    Read reg: 0x27: Read back: 0x0
    Read reg: 0x28: Read back: 0x0
    Read reg: 0x29: Read back: 0x0
    Read reg: 0x2a: Read back: 0x0
    Read reg: 0x2b: Read back: 0x0
    Read reg: 0x2c: Read back: 0x0
    Read reg: 0x2d: Read back: 0x0
    Read reg: 0x2e: Read back: 0x0
    Read reg: 0x2f: Read back: 0x0
    Read reg: 0x30: Read back: 0x0
    Read reg: 0x31: Read back: 0x0
    Read reg: 0x32: Read back: 0x0
    Read reg: 0x33: Read back: 0xff
    Read reg: 0x34: Read back: 0x0
    Read reg: 0x35: Read back: 0x0
    Read reg: 0x36: Read back: 0x0
    Read reg: 0x37: Read back: 0x0
    Read reg: 0x38: Read back: 0x40
    Read reg: 0x39: Read back: 0x0
    Read reg: 0x3a: Read back: 0x0
    Read reg: 0x3b: Read back: 0x0
    Read reg: 0x3c: Read back: 0x8
    Read reg: 0x3d: Read back: 0x24
    Read reg: 0x3e: Read back: 0xc9
    Read reg: 0x3f: Read back: 0x80
    Read reg: 0x40: Read back: 0x0
    Read reg: 0x41: Read back: 0x8
    Read reg: 0x42: Read back: 0x0
    Read reg: 0x43: Read back: 0xc9
    Read reg: 0x44: Read back: 0x80
    Read reg: 0x45: Read back: 0x0
    Read reg: 0x46: Read back: 0x8
    Read reg: 0x47: Read back: 0x24
    Read reg: 0x48: Read back: 0xc9
    Read reg: 0x49: Read back: 0x80
    Read reg: 0x4a: Read back: 0x0
    Read reg: 0x4b: Read back: 0x8
    Read reg: 0x4c: Read back: 0x0
    Read reg: 0x4d: Read back: 0xc9
    Read reg: 0x4e: Read back: 0x80
    Read reg: 0x4f: Read back: 0x0
    Read reg: 0x50: Read back: 0x0
    Read reg: 0x51: Read back: 0x0
    Read reg: 0x52: Read back: 0xc9
    Read reg: 0x53: Read back: 0x80
    Read reg: 0x54: Read back: 0x0
    Read reg: 0x55: Read back: 0x0
    Read reg: 0x56: Read back: 0x0
    Read reg: 0x57: Read back: 0xc9
    Read reg: 0x58: Read back: 0x80
    Read reg: 0x59: Read back: 0x0
    Read reg: 0x5a: Read back: 0x0
    Read reg: 0x5b: Read back: 0x0
    Read reg: 0x5c: Read back: 0xc9
    Read reg: 0x5d: Read back: 0x80
    Read reg: 0x5e: Read back: 0x0
    Read reg: 0x5f: Read back: 0x0
    Read reg: 0x60: Read back: 0x0
    Read reg: 0x61: Read back: 0xc9
    Read reg: 0x62: Read back: 0x80
    Read reg: 0x63: Read back: 0x0
    Read reg: 0x64: Read back: 0x0
    Read reg: 0x65: Read back: 0x0
    Read reg: 0x66: Read back: 0x0
    Read reg: 0x67: Read back: 0x0
    Read reg: 0x68: Read back: 0x0
    Read reg: 0x69: Read back: 0x0
    Read reg: 0x6a: Read back: 0x0
    Read reg: 0x6b: Read back: 0x0
    Read reg: 0x6c: Read back: 0x40
    Read reg: 0x6d: Read back: 0x7b
    Read reg: 0x6e: Read back: 0x0
    Read reg: 0x6f: Read back: 0x0
    Read reg: 0x70: Read back: 0xe7
    Read reg: 0x71: Read back: 0x0
    Read reg: 0x72: Read back: 0x0
    Read reg: 0x73: Read back: 0xf0
    Read reg: 0x74: Read back: 0xf0
    Read reg: 0x75: Read back: 0x60
    Read reg: 0x76: Read back: 0xf0
    Read reg: 0x77: Read back: 0xe0
    Read reg: 0x78: Read back: 0x0
    Read reg: 0x79: Read back: 0x0
    Read reg: 0x7a: Read back: 0xff
    Read reg: 0x7b: Read back: 0x0
    Read reg: 0x7c: Read back: 0xff
    Read reg: 0x7d: Read back: 0x8c
    Read reg: 0x7e: Read back: 0xc
    Read reg: 0x7f: Read back: 0x0

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

    谢谢 Svilen、

    我将在今天回顾并发表评论。

    此致、

    Garret

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

    尊敬的 Svilen:

    我看到一个问题可能会导致您看到的问题。 寄存器 0x74 读回为 0xf0、这表明输出通道 1、2、3 和 4 已启用。 若要仅启用通道 1 和 3、应将 0xa0 写入此寄存器 (SpiWrite2 (0xe8、0xa0))。 如果这样可以解决问题、请告诉我。

    此致、

    Garret

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

    你(们)好

    将通道使能寄存器设置为  0xa0 不会改变不稳定的行为。

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

    尊敬的 Svilen:

    我将研究尝试在工作台上确认这个问题。 输入电平会略有不同、并且每次都可能不完全匹配、通道增益会放大微小的差异。 您发送的输入是什么? 您能分享一个原理图吗?

    此致、

    Garret

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

    您好、Garret。

    这是原理图。 源 是一个信号发生器、所有输入都连接到该发生器。

    输入电平相差 0.4dB 至 0.5dB、因为增益校准寄存器设置为 0x40、但它是 读回的、并具有 0x80。

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

    尊敬的 Svilen:

    我能够在实验中重现问题、并发现对器件进行下电上电可以修复增益差异。 将增益校准保留为默认值 0x80、并在初始脚本之后发送以下命令、同时仍提供输入:

    • SpiWrite2 (0x00、0x00);//设置第 0 页
    • SpiWrite2 (0xEA、0x00);//关闭 ADC 电源
    • SpiWrite2 (0x04、0x80);//进入睡眠模式
    • SpiWrite2 (0x04、0x81);//退出睡眠模式
    • SpiWrite2 (0xEA、0x60);//为 ADC 上电

    我建议在进入和退出睡眠模式后添加延迟(可能 10ms)。

    此致、

    Garret

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

    感谢您的支持、我将使用它。

    您是否认为除增益校准之外的其他寄存器可能会受到此类行为的影响?

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

    尊敬的 Svilen:

    我认为不应再有其他问题。

    此致、

    Garret