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.

[参考译文] TLV320AIC3120:蜂鸣生成和 PLL 设置验证

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1452495/tlv320aic3120-beep-generation-and-pll-settings-validation

器件型号:TLV320AIC3120

工具与软件:

尊敬的 TI 团队:

我们尝试在  TLV320AIC3120中产生蜂鸣声、但无法获得任何蜂鸣声输出。
您能帮助我们调试这个问题吗? 请检查为生成蜂鸣声而完成的 PLL 配置和寄存器设置。
MCLK:18.518 MHz
TLV320AIC3120处于从模式。
蜂鸣生成寄存器写入脚本

#!/bin/bash

# I2C bus and device address
I2C_BUS=1 # Update this to your specific I2C bus if necessary
I2C_ADDR=0x18

# Helper function to write to a register
write_register() {
    local reg=$1
    local val=$2
    echo "Writing to register 0x$reg: 0x$val"
    i2cset -y $I2C_BUS $I2C_ADDR 0x$reg 0x$val
}

# Helper function to switch page
switch_page() {
    local page=$1
    echo "Switching to page $page"
    write_register 00 $page
}

# Start configuration
echo "Starting I2C configuration for TLV320AIC3120..."

# Page 0: Reset the codec
switch_page 00
write_register 01 01 # Reset
sleep 0.01           # Allow time for reset

# Page 0: Clock configuration
write_register 04 03 # Clock source select
write_register 05 91 # PLL power-up, P=1, R=1
write_register 06 05 # J=5
write_register 07 08 # D=2300 MSB
write_register 08 FC # D=2300 LSB
sleep 0.01           # Allow PLL to stabilize

# Configure NDAC, MDAC, DOSR
write_register 0B 82 # NDAC = 2
write_register 0C 8E # MDAC = 14
write_register 0D 00 # DOSR MSB = 0
write_register 0E 48 # DOSR LSB = 0x48

# Configure NADC, MADC, AOSR
write_register 12 87 # NADC = 7
write_register 13 84 # MADC = 4
write_register 14 48 # AOSR = 72 (0x48)

# Miscellaneous settings
write_register 1B 20 # Codec interface control
write_register 3C 19 # DAC processing block # PRB 25
																														 
# Switch to Page 8 for additional configuration
switch_page 08   
write_register 01 04 # Adaptive filter
											   																			  
# Switch to Page 1 for headphone driver setup
switch_page 01
write_register 1F 04 # Initial headphone driver configuration
write_register 21 4E # Codec secondary interface control
write_register 23 40 # Route DAC to HPOUT via mixer
write_register 28 06 # Enable HPOUT driver
write_register 1F 82 # Power up HPOUT output driver
write_register 24 92 # Set analog volume for HPOUT

# Switch to Page 0 for beep settings
switch_page 00
write_register 40 0C #volume
write_register 0B 02 #Power down NDAC
write_register 47 80 # Enable beep generator
write_register 4A 12 # Beep-Length Middle Bits
write_register 4B C0 # Beep Length LSB
write_register 4C 5A # Beep Sin(x) MSB
write_register 4D 82 # Beep Sin(x) LSB
write_register 4E 5A # Beep Cos(x) MSB
write_register 4F 82 # Beep Cos(x) LSB
write_register 0B 82 # NDAC = 2 for beep #NDAC Power up
write_register 40 00 # DAC Volume Control

write_register 3F B6 # DAC Data-Path Setup		
write_register 41 00 # DAC Volume Control #0dB

echo "I2C configuration complete. Check HPOUT for beep signal."

适用于正弦、余弦和蜂鸣长度的 Python 脚本:

import numpy as np

def calculate_values(Fin, Fs, Cycle):
    sine_value = np.round(np.sin(2 * np.pi * Fin / Fs) * 2**15)
    cosine_value = np.round(np.cos(2 * np.pi * Fin / Fs) * 2**15)
    beep_length = np.floor(Fs * Cycle / Fin)
    print(beep_length);
    sine_hex = hex(int(sine_value))
    cosine_hex = hex(int(cosine_value))
    beep_length_hex = hex(int(beep_length))
    
    return sine_hex, cosine_hex, beep_length_hex

# Example usage
Fin = 1000  # Input frequency
Fs = 48000  # Sampling frequency
Cycle = 100  # Number of cycles

sine_hex, cosine_hex, beep_length_hex = calculate_values(Fin, Fs, Cycle)
print(f"Sine: {sine_hex}")
print(f"Cosine: {cosine_hex}")
print(f"Beep Length: {beep_length_hex}")


##Sine = dec2hex(round(sin(2*π*Fin/Fs)*2^15))
##Cosine = dec2hex(round(cos(2*π*Fin/Fs)*2^15))
##Beep Length = dec2hex(floor(Fs*Cycle/Fin))

PLL 配置:

e2e.ti.com/.../TLV320AIC3120_5F00_PLL_5F00_Cal_5F00_v1.xlsx

原理图:

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

    尊敬的 TI 团队:
    我们有关于该问题的最新信息


    我们观察到、当编解码器配置为具有12MHz MCLK 的主器件时、蜂鸣生成功能正常。 但是、当我们将 TLV320AIC3120切换为 MCLK 为18.518MHz 的从器件时、不会产生蜂鸣音。

    蜂鸣生成寄存器值(配置为主器件、MCLK 为12MHz):

    #!/bin/bash
    
    # I2C bus and device address
    I2C_BUS=1 # Update this to your specific I2C bus if necessary
    I2C_ADDR=0x18
    
    # Helper function to write to a register
    write_register() {
        local reg=$1
        local val=$2
        echo "Writing to register 0x$reg: 0x$val"
        i2cset -y $I2C_BUS $I2C_ADDR 0x$reg 0x$val
    }
    
    # Helper function to switch page
    switch_page() {
        local page=$1
        echo "Switching to page $page"
        write_register 00 $page
    }
    
    # Start configuration
    echo "Starting I2C configuration for TLV320AIC3120..."
    
    # Page 0: Reset the codec
    switch_page 00
    write_register 01 01 # Reset
    sleep 0.01           # Allow time for reset
    
    # Page 0: Clock configuration
    write_register 04 03 # Clock source select
    write_register 05 91 # PLL power-up, P=1, R=1
    write_register 06 06 # J=5
    write_register 07 23 # D=2300 MSB
    write_register 08 A0 # D=2300 LSB
    sleep 0.01           # Allow PLL to stabilize
    
    # Configure NDAC, MDAC, DOSR
    write_register 0B 83 # NDAC = 2
    write_register 0C 9B # MDAC = 14
    write_register 0D 00 # DOSR MSB = 0
    write_register 0E 80 # DOSR LSB = 0x48
    
    # Configure NADC, MADC, AOSR
    write_register 12 83 # NADC = 7
    write_register 13 9B # MADC = 4
    write_register 14 80 # AOSR = 72 (0x48)
    
    # Miscellaneous settings
    write_register 1B 4C # Codec interface control
    write_register 1C 01 # Data-Slot Offset Programmability
    write_register 1D 03 #Codec Interface Control 2
    write_register 1E 83 #BCLK N Divider Value
    write_register 1F 00 #
    write_register 20 00 #
    write_register 21 10 #
    write_register 3C 19 # DAC processing block # PRB_P25
    
    write_register 74 00 #(0x74): VOL/MICDET-Pin SAR ADC — Volume Control PAGE 0
    write_register 44 00
    write_register 41 30
    
    
    # Switch to Page 1 for headphone driver setup
    switch_page 01
    write_register 1F 04 # Initial headphone driver configuration
    write_register 21 4E # Codec secondary interface control
    write_register 23 40 # Route DAC to HPOUT via mixer
    write_register 28 06 # Enable HPOUT driver
    write_register 1F 84 # Power up HPOUT output driver
    write_register 24 80 # Set analog volume for HPOUT
    
    # Switch to Page 8 for additional configuration
    switch_page 08
    write_register 01 04 # Adaptive filter
    
    # Switch to Page 0 for beep settings
    switch_page 00
    write_register 3F 96 # DAC Data-Path Setup    
    write_register 40 0C #volume
    write_register 0B 03 #Power down NDAC
    write_register 47 80 # Enable beep generator
    #write_register 48 00
    write_register 49 12 # Beep-Length MSB
    write_register 4A 4F # Beep-Length Middle Bits
    write_register 4B 80 # Beep Length LSB
    write_register 4C 06 # Beep Sin(x) MSB
    write_register 4D B3 # Beep Sin(x) LSB
    write_register 4E 7F # Beep Cos(x) MSB
    write_register 4F D3 # Beep Cos(x) LSB
    write_register 0B 83 # NDAC = 2 for beep #NDAC Power up
    write_register 40 04 # DAC Volume Control
    
    
    
    echo "I2C configuration complete. Check HPOUT for beep signal."
    

    (MCLK 作为18.518MHz、 TLV320AIC3120 作为从器件)
    我们无法听到哔声:

    #!/bin/bash
    
    # I2C bus and device address
    I2C_BUS=1 # Update this to your specific I2C bus if necessary
    I2C_ADDR=0x18
    
    # Helper function to write to a register
    write_register() {
        local reg=$1
        local val=$2
        echo "Writing to register 0x$reg: 0x$val"
        i2cset -y $I2C_BUS $I2C_ADDR 0x$reg 0x$val
    }
    
    # Helper function to switch page
    switch_page() {
        local page=$1
        echo "Switching to page $page"
        write_register 00 $page
    }
    
    # Start configuration
    echo "Starting I2C configuration for TLV320AIC3120..."
    
    # Page 0: Reset the codec
    switch_page 00
    write_register 01 01 # Reset
    sleep 0.01           # Allow time for reset
    
    # Page 0: Clock configuration
    write_register 04 03 # Clock source select
    write_register 05 91 # PLL power-up, P=1, R=1
    write_register 06 05 # J=5
    write_register 07 08 # D=2300 MSB
    write_register 08 FC # D=2300 LSB
    sleep 0.01           # Allow PLL to stabilize
    
    # Configure NDAC, MDAC, DOSR
    write_register 0B 82 # NDAC = 2
    write_register 0C 8E # MDAC = 14
    write_register 0D 00 # DOSR MSB = 0
    write_register 0E 48 # DOSR LSB = 0x48
    
    # Configure NADC, MADC, AOSR
    write_register 12 87 # NADC = 7
    write_register 13 84 # MADC = 4
    write_register 14 48 # AOSR = 72 (0x48)
    
    # Miscellaneous settings
    write_register 1B 40 # Codec interface control
    write_register 1C 01 #
    #write_register 1D 03 #
    #write_register 1E 83 #
    #write_register 1F 00 #
    #write_register 20 00 #
    #write_register 21 10 #
    write_register 3C 19 # DAC processing block # PRB_P25
    
    write_register 74 00 #(0x74): VOL/MICDET-Pin SAR ADC — Volume Control PAGE 0
    write_register 44 00
    write_register 41 30
    
    
    # Switch to Page 1 for headphone driver setup
    switch_page 01
    write_register 1F 04 # Initial headphone driver configuration
    write_register 21 4E # Codec secondary interface control
    write_register 23 40 # Route DAC to HPOUT via mixer
    write_register 28 06 # Enable HPOUT driver
    write_register 1F 84 # Power up HPOUT output driver
    write_register 24 80 # Set analog volume for HPOUT
    
    # Switch to Page 8 for additional configuration
    switch_page 08
    write_register 01 04 # Adaptive filter
    
    # Switch to Page 0 for beep settings
    switch_page 00
    write_register 3F 96 # DAC Data-Path Setup    
    write_register 40 0C #volume
    write_register 0B 02 #Power down NDAC
    write_register 47 80 # Enable beep generator
    write_register 48 00
    write_register 49 12 # Beep-Length MSB
    write_register 4A 4F # Beep-Length Middle Bits
    write_register 4B 80 # Beep Length LSB
    write_register 4C 06 # Beep Sin(x) MSB
    write_register 4D B3 # Beep Sin(x) LSB
    write_register 4E 7F # Beep Cos(x) MSB
    write_register 4F D3 # Beep Cos(x) LSB
    write_register 0B 82 # NDAC = 2 for beep #NDAC Power up
    write_register 40 04 # DAC Volume Control
    
    
    
    echo "I2C configuration complete. Check HPOUT for beep signal."
    

     TLV320AIC3120中只能在主模式下生成蜂鸣声、是否存在任何限制?

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

    您好!

    我认为生成蜂鸣声的主模式没有限制。 我想知道它是否与所选的时钟有关。 您能解释一下您的 输入 BCLK 和 WCLK 频率是多少吗? 在启用蜂鸣频率之前、您是否能够从 DAC 获得音频?

    此外、将 PLL 用于从模式或将 MCLK 用于从模式是没有意义的-如果您使用从模式、BCLK 和 WCLK 是输入、因此不需要另一个 MCLK 形式的时钟。 通常情况下、MCLK 用作外部时钟、可以由 PLL 进行分频/倍频以创建 BCLK 和 WCLK。 请告诉我您的 ASI 时钟意图是什么,我们可以使这一工作!

    此致!
    MIR

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

    你好、 Mir Jeffres、

    由于处理器中的限制、我们使用了 MCLK 而不是 BCLK。 我们在48kHz 采样频率(12MHz MCLK)下成功发出了蜂鸣声。 此外、我们使用 PLL 和 MCLK 在主从模式下测试了环回。 按照数据表中的样本配置、同样在18.513MHz MCLK 处测试了播放和录制。

    感谢您的答复、为我们提供了宝贵的见解。

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

    尊敬的 Abhijith:

    您是否需要有关此方面的更多帮助、或者您是否按您的要求使其正常工作?

    此致!
    MIR