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.

[参考译文] TAC5212:帮助使用 teensy 4.1的外部时钟将 TAC5212配置为 TDM 模式

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1497621/tac5212-help-configuring-tac5212-for-tdm-mode-with-external-clocks-from-teensy-4-1

部件号:TAC5212

工具/软件:

主题:帮助使用 teensy 4.1的外部时钟为 TDM 模式配置 TAC5212

尊敬的 TI 团队:

我正在使用 TAC5212编解码器(在 TDM 从模式下)处理一个音频项目、该编解码器由 teensy 4.1微控制器(NXP i.MX RT1062 @ 600 MHz)驱动。 我阅读了数据表和时钟应用手册、但仍然无法获得干净的输出或有效的时钟锁定。

设置摘要:
-编解码器: TAC5212
- MCU: teensy 4.1 (TDM Master)
- MCLK : 11.2896 MHz (从 teensy )
- BCLK:12.288 MHz (32位× 16时隙× 24kHz)
- FSYNC:24kHz、高电平有效
-数据: TDM 流,插槽0和1用于立体声

 行为:
-音频存在,但划伤或错位。
-时钟状态寄存器(0x13)始终读取0x00 -从不锁定。
-调整 PASI_RX_OFFSET 可以稍微提高质量,但绝不会干净。
-启用 PLL 会导致无音频。

 最小配置代码:
下面是我当前用于配置编解码器和发送测试音频的 teensy 草图:

#include <Arduino.h>
#include <Wire.h>
#include <Audio.h>

#define TAC5212_ADDR 0x50

AudioSynthWaveform waveform1;
AudioSynthWaveform waveform2;
AudioOutputI2S i2sOut;
AudioConnection patchCord1(waveform1, 0, i2sOut, 0);
AudioConnection patchCord2(waveform2, 0, i2sOut, 1);
AudioControlSGTL5000 dummyControl;

void writeReg(uint8_t reg, uint8_t val) {
Wire.beginTransmission(TAC5212_ADDR);
Wire.write(reg);
Wire.write(val);
Wire.endTransmission();
}

void setupCodec() {
writeReg(0x01, 0x01); delay(100); // Reset
writeReg(0x02, 0x09); delay(100); // Wakeup

uint8_t PASI_FORMAT = 0b00 << 6; // [7:6] PASI_FORMAT: 00 = TDM
uint8_t PASI_WLEN = 0b11 << 4; // [5:4] PASI_WLEN: 11 = 32-bit
uint8_t PASI_FSYNC_POL = 0 << 3; // [3] FSYNC_POL: 0 = Active Low, 1 = Active High
uint8_t PASI_BCLK_POL = 0 << 2; // [2] BCLK_POL: 0 = Normal (rising edge)
uint8_t PASI_BUS_ERR = 0 << 1; // [1] BUS_ERR: 0 = Disable error detection
uint8_t PASI_BUS_ERR_RCOV = 0 << 0; // [0] BUS_ERR_RCOV: 0 = Disable recovery
uint8_t pasi_cfg0 = PASI_FORMAT | PASI_WLEN | PASI_FSYNC_POL | PASI_BCLK_POL | PASI_BUS_ERR | PASI_BUS_ERR_RCOV;
writeReg(0x1A, pasi_cfg0);

uint8_t PASI_RX_EDGE = 0 << 7; // [7] Half-cycle delay
uint8_t PASI_RX_USE_INT_FSYNC = 0 << 6; // [6] Use external FSYNC
uint8_t PASI_RX_USE_INT_BCLK = 0 << 5; // [5] Use external BCLK
uint8_t PASI_RX_OFFSET = 2; // [4:0] Shift input by 2 BCLKs
uint8_t pasi_rx_cfg0 = PASI_RX_EDGE | PASI_RX_USE_INT_FSYNC | PASI_RX_USE_INT_BCLK | PASI_RX_OFFSET;
writeReg(0x26, pasi_rx_cfg0);

writeReg(0x2A, 0b00100000); // DAC L2 ← Slot 0
writeReg(0x2B, 0b00100001); // DAC R2 ← Slot 1
writeReg(0x6E, 80); // L2 Volume
writeReg(0x70, 80); // R2 Volume
writeReg(0x76, 0x0C); // Enable L2 + R2
writeReg(0x78, 0x40); // Power up
}

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
Wire.begin();
AudioMemory(12);

waveform1.begin(WAVEFORM_SQUARE);
waveform1.frequency(440);
waveform1.amplitude(0.25);

waveform2.begin(WAVEFORM_SQUARE);
waveform2.frequency(660);
waveform2.amplitude(0.25);

delay(1000);
setupCodec();
}

void loop() {}

MCLK 连接到 GPI1 (根据文档而定)。

 示波器图像显示:
- MCLK
- BCLK
- FSYNC
-在时隙0和1上有可见过渡的 TDM 数据流

 请求:
请您帮助确认:
1.此模式下 PASI_CFG0 (0x1A)和 PASI_RX_CFG0 (0x26)的正确设置
2.即使外部时钟稳定、也是否需要 PLL
3.是否需要无文档设置或对齐时隙/延迟时间

非常感谢任何建议、我已经坚持使用了几周。

此致、
Jay Shoemaker
https://t-dsp.com/

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

    尊敬的 Jay:

    由于您在目标模式下运行器件、因此不需要外部 MCLK、并且器件可以在24kHz FSYNC 和12.288MHz BCLK 下运行。  

    如果有音频但听起来很刺眼、这可能是 ASI 格式问题。 主机是否足够灵活、可以提供没有2-BCLK 延迟的时钟?

    此外、您可以通过设置(0x32、64)强制 IC 预测24kHz 采样

    我明天可以更深入地查看你的脚本,并修改这条评论

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

    您好、Daveon、  

    如果你想,我会给你一个 teensy 试一下。 :-)

    因此、我尝试按照 teensy 论坛上的建议、提供没有2-BCLK 延迟的时钟:

    https://forum.pjrc.com/index.php?threads/introducing-the-t-dsp-tac5212-pro-audio-module-%E2%80%93-help-needed-getting-clock-sync-on-teensy-4-1.76784/#post-357106

    结果是一个可怕的高调的声音。 我不知道这是否是正确的设置。 我尝试了一堆不同的组合。  

    我认为正确的偏移是1位、因为如果看一下时钟、当 SD 为时隙0启动时、FSYNC 和 BCLK 会同时下降。 但没有运气仍然得到的时钟锁定,或音频听起来任何好.  

    如果你知道其他任何地方去看,我是所有的耳朵。  

    Jay

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

    您好、  

    对不起延迟,我将在一天内更新线程

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

    您好、

    请尝试使用以下两个脚本、以分别在 EVM 上验证记录和播放。

    ##### Record AC-Couple Differential IN1-IN2 path ######
    # Target Mode, TDM, 32-bit
    # Primary ASI only, multiple of 48KHz Sampling
    #
    w a0 00 00	# Set page 0
    w a0 01 01	# Software Reset
    w a0 02 09	# Wake up with AVDD > 2v and all VDDIO level
    w a0 10 50 	# Configure DOUT as Primary ASI (PASI) DOUT
    w a0 19 00	# 1 data input and 1 data output for PASI
    w a0 1a 30	# PASI TDM, 32 bit format
    w a0 1c 02	# Data output offset by 2 BCLKs
    w a0 1e 20	# PASI Ch1 on slot 0
    w a0 1f 21	# PASI Ch2 on slot 1
    w a0 50 00	# ADC Ch1 diff input, 5KOhm, 2Vrms ac-coupled, audio band
    w a0 55 00	# ADC Ch2 diff input, 5KOhm, 2Vrms ac-coupled, audio band
    w a0 76 c0	# Enable Input Ch1 and Ch2, disable output channels
    w a0 78 a0	# Power up ADC and MICBIAS

    ##### Playback Differential LINEOUT Path ######
    # Target Mode, TDM, 32-bit
    # Primary ASI only, multiple of 48KHz Sampling
    #
    w a0 00 00	# Set page 0
    w a0 01 01	# Software Reset
    w a0 02 09	# Wake up with AVDD > 2v and all VDDIO level
    w a0 11 80 	# Enable PASI DIN
    w a0 19 00	# 1 data inputs and 1 data outputs for PASI
    w a0 1a 30	# PASI TDM, 32 bit format
    w a0 26 02	# Offset Data input by 2 BCLKs
    w a0 28 20	# PASI DIN Ch1 on TDM slot 0
    w a0 29 21	# PASI DIN Ch2 on TDM slot 1
    w a0 64 20	# Configure OUT1P/M as differential from DAC1
    w a0 65 20	# Configure OUT1P LINEOUT 0dB audio band
    w a0 66 20	# Configure OUT1M LINEOUT 0dB 2Vrms Differential 
    w a0 6b 20	# Configure OUT2P/M as differential from DAC2
    w a0 6c 20	# Configure OUT2P LINEOUT 0dB audio band
    w a0 6d 20	# Configure OUT2M LINEOUT 0dB 2Vrms Differential 
    w a0 76 0c	# Disable all input channels and enable output channel 1 and 2
    w a0 78 40	# Power up all DAC channel