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.
工具与软件:
尊敬的论坛用户:
我想使用 TLV320AIC3104 IC 进行音乐播放和录音。
我通过 I2S 将 Feasincom 蓝牙模块连接到编解码器。 编解码器的时钟源是来自蓝牙模块的 BCLK。 我使用内部 PLL 为 ADC 和 DAC 获取正确的时钟。
音频数据配置为48kHz 32位立体声。
玩似乎工作的很好,玩正弦波的工作。
I 已将正弦波(手机的线路电平输出)连接至 MIC2L/LINE2L 输入。
问题1:蓝牙模块仅在进行录制或播放时生成时钟。 配置 PGA 似乎需要时钟。 我可以在没有时钟的情况下配置 DAC、输出驱动器、I2S 参数、但如果没有时钟、PGA 增益不会改变。 我希望在启动器件之后、在进行任何蓝牙连接之前进行配置。 我做了什么错了,或者这是正常的行为? 我在数据表中找不到此信息。 (我检查了 PGA 运行情况、并将 PGA 输出路由到线路输出)
问题2:在录制过程中、我听到咯吱声和模糊不清的声音、而不是清晰的正弦波。 我在激活蓝牙连接期间配置寄存器、以确保 TLV320具有时钟。 我也尝试将相同的信号路由到左右 ADC、但没有帮助。
以下是用于检查 PGA 的配置:
0:0
2:0
3:0b10000001
4:32 << 2
7:0b00001010
9:0b00110000
10:1
11:1
86:0b00001001
93:0b10011001
101:0
102:0b10100010
81:0b10000000
17:0b00001111
15:0b01000001
以下是检查录制的配置:
0:0
2:0
3:0b10000001
4:32 << 2
7:0b00001010
9:0b00110000
10:1
11:1
101:0
102:0b10100010
17:0b00001111
19:0b11111111
15:0b01000001
正弦波现在连接到"MIC"标签以进行测试。
尊敬的 Balint:
首先、您是否启用了 PGA 软步进? 默认情况下启用该功能。 此功能锁定 ADC/DAC 输出采样的增益变化、这意味着增益变化需要时钟才能生效:
"PGA 增益的变化由内部软步进算法实现、根据寄存器的编程情况、每一个或两个 ADC 输出样本仅改变一个0.5dB 阶跃的实际音量水平(见第0页的寄存器19和22)。 这种软步进可确保音量控制平稳变化、而不会出现任何声音伪影。"
对于爬虫问题、我不会在测试期间将您的手机用作发电机。 我会使用您在实验中可能发现的函数发生器、以确保信号源非常干净。 您是如何聆听声音的?
此致、
J·麦克弗森
您好!
感谢您的回复。
我曾尝试通过写入 R19-D1D0和 R22-D1D0到11来禁用左右软步进、但没有帮助。
问题2已解决:音频串行数据字偏移控制值不正确。
尊敬的 Balint:
您能解释一下蓝牙模块提供了哪些时钟吗?
谢谢。
J·麦克弗森
蓝牙模块提供了 BCLK。
编解码器的 MCLK 输入未连接。
尊敬的 Balint:
我在 EVM 上进行了这项尝试、现在看到 PGA 更改了增益、即使删除了所有 I2S 时钟(包括 BCLK)也是如此。
您能否与我分享您的完整器件配置步骤、以便我尝试重现问题?
谢谢。
J·麦克弗森
尊敬的 Jeff:
请查看该链接: https://e2e.ti.com/support/audio-group/audio/f/audio-forum/185817/tlv320aic3104---adc-pga-gain-in-analogue-bypass-mode
由于没有 MCLK、用户无法设置 PGA 增益。
以下是我的器件配置:
#define PAGE_SELECT 0
#define software_reset 1
#define CODEC_SAMPLE_RATE_SELECT 2
#define PLL_programming_A 3
#define PLL_programming_B 4
#define CODEC_DATA_PATH_SETUP 7
#define AUDIO_SERIAL_DATA_INTERFACT_CONTROL_B 9
#define AUDIO_SERIAL_DATA_INTERFACT_CONTROL_C 10
#define AUDIO_CODEC_OVERFLOAD_FLAG 11
#define LEFT_ADC_PGA_GAIN_CONTROL 15
#define right_ADC_PGA_gain_control 16
#define MIC2LR_TO_LEFT_ADC_CONTROL 17
#define MIC2LINE2_TO_RIGHT_ADC_CONTROL 18
#define MIC1LPLINE1LP_TO_LEFT_ADC_CONTROL 19
#define MIC1RPLINE1RP_TO_RIGHT_ADC_CONTROL 22
#define MICBIAS_CONTROL 25
#define LEFT_AGC_CONTROL_A 26
#define LEFT_AGC_CONTROL_B 27
#define LEFT_AGC_CONTROL_C 28
#define right_AGC_CONTROL_A 29
#define right_AGC_CONTROL_B 30
#define right_AGC_CONTROL_C 31
#define LEFT_AGC_NOISE_GATE_DEBUNSE 34
#define right_AGC_noise_gate_debunce 35
#define DAC_POWER_and_output_driver_control 37
#define DAC_OUTPUT_SWITCHING_CONTROL 41
#define output_driver_POP_reduction 42
#define LEFT_DAC_DIGITAL_VOLUME_CONTROL 43
#define right_DAC_digital_volume_control 44
#define DAC1_L1_TO_LEFT_LOPM_VOLUME_CONTROL 82
#define LEFT_LOPM_OUTPUT_LEVEL_CONTROL 86
#define DAC_R1_TO_RIGHT_LOPM_VOLUME_CONTROL 92
#define right_LOPM_output_level_control 93
#define clock 101
#define clock_generation_control 102
#define passive_analog_signal_bypass 108
writeByteCodec (page_select、0);
writeByteCodec (CODEC_SAMPLE_RATE_SELECT、0);// ADC 和 DAC 的采样速率为48kHz
writeByteCodec (PLL_programming_A、0b10000001);//PLLEN=1|PLLQ=0000|PLLP=001
writeByteCodec (PLL_programming_B、32<<2);//PLLJ=32
writeByteCodec (codec_data_path_Setup、0b00001010);
writeByteCodec (AUDIO_SERIAL_DATA_INTERFACT_CONTROL_B、0b00110000);//MODE=I2S|字长度=32位
writeByteCodec (audio_serial_data_interface_control_C、0);//data offset=0时钟
writeByteCodec (audio_codec_overflow_flag、1);//PLL R = 1
writeByteCodec (left_LOPM_output_level_control、0b00001001);//左侧 LOP 增益0dB|取消静音|完全通电
writeByteCodec (clock、0);//codec_CLKIN 使用 PLLDIV_OUT
writeByteCodec (clock_generation_control、0b10100010);//CLKDIV_IN 使用 MCLK|PLLCLK_IN 使用 BCLK|保留
writeByteCodec (81、0b10000000);//PGA_L 路由到 LEFT_LOP/M
writeByteCodec (MIC2LR_TO_LEFT_ADC_CONTROL、0b00001111);//MIC2L 连接至 PGA
writeByteCodec (MIC1LPLINE1LP_TO_LEFT_ADC_CONTROL、0b11111111);//左 PGA 软步进禁用
writeByteCodec (left_ADC_PGA_gain_control、0b00110001);左侧 PGA 启用且增益设置
尊敬的 Balint:
我在 EVM 上设置您的代码并重新创建了问题。 我发现、如果在启动时未应用时钟、增益会像您描述的那样卡在0dB。 一旦应用时钟、增益就会更新到正确值。 此外、一旦取消时钟、PGA 将继续更新。
因此、器件中存在一个限制、即 PGA 增益将一直锁定、直到应用时钟为止、这可能是因为器件开启后会默认启用软步进。 如果在启动时没有时钟、软步进逻辑可能会被锁定、直到应用时钟、从而阻止增益变化。 通常、这不是问题、因为 ADC 将无法工作、但对于旁路路径、它将成为一个限制。 然而、一旦给定 I2S 时钟、增益就会更新、即使再次移除时钟、也会继续正确更新(禁用软步进)。
此致、
J·麦克弗森