TAD5212: 90kHz bandwidth mode + 768kHz FS + linear interpolation is not as flat as it should be

Part Number: TAD5212

Tool/software:

I am doing testing on the frequency response, and things are not looking as flat as they should be according to the datasheet.

My samplerate is 744kHz, and I am using the linear-phase interpolation filters.

According to the datasheet, that would be -0.2dB @ 0.15xFS = 111kHz.

I am measuring around -0.6dB @ 90kHz.

Test methodology: DAC is being fed 16 bit I2S from DSP generating a sine wave.

Just wondering if there is something wrong with my expectations, testing methods, or settings used to initialize the DAC (included below).

    // SW reset
    data = 0x00;
    i2c_write_reg(kDacBus, kDacAddress, 0x00, &data, 1);
    data = 0x01;
    i2c_write_reg(kDacBus, kDacAddress, 0x01, &data, 1);
    std::this_thread::sleep_for(std::chrono::milliseconds(2));
    data = 0x00;
    i2c_write_reg(kDacBus, kDacAddress, 0x00, &data, 1);
    // Bring out of sleep mode
    data = 0x09;
    i2c_write_reg(kDacBus, kDacAddress, 0x02, &data, 1);
    std::this_thread::sleep_for(std::chrono::milliseconds(2));
    // Disable GPIO1
    data = 0;
    i2c_write_reg(kDacBus, kDacAddress, 0x0a, &data, 1);
    // Primary ASI: I2S, 16 bit data
    data = 0x40;
    i2c_write_reg(kDacBus, kDacAddress, 0x1a, &data, 1);
    // Primary ASI RX Channel 2: I2S right slot 0
    data = 0x30;
    i2c_write_reg(kDacBus, kDacAddress, 0x29, &data, 1);
    // DAC demod rate override
    data = (1 << 4);
    i2c_write_reg(kDacBus, kDacAddress, 0x4f, &data, 1);
    // DAC: wide bandwidth
    data = 0xe1;
    i2c_write_reg(kDacBus, kDacAddress, 0x65, &data, 1);  // Channel 1p
    i2c_write_reg(kDacBus, kDacAddress, 0x6c, &data, 1);  // Channel 2p
    data = 0xe0;
    i2c_write_reg(kDacBus, kDacAddress, 0x66, &data, 1);  // Channel 1m
    i2c_write_reg(kDacBus, kDacAddress, 0x6d, &data, 1);  // Channel 2m
    // Disable DAC biquads
    data = (1 << 4);
    i2c_write_reg(kDacBus, kDacAddress, 0x73, &data, 1);
    // Disable inputs, enable outputs
    data = 0x0c;
    i2c_write_reg(kDacBus, kDacAddress, 0x76, &data, 1);
    // Power up DAC
    data = 0x40;
    i2c_write_reg(kDacBus, kDacAddress, 0x78, &data, 1);

  • Hi Josh,

    Are you referencing this section of the datasheet?

    These specs are for standard audio sampling rates, and may not apply exactly to your 744kHz rate. There is a CLK_CFG0 register that configures the primary ASI sample rate, and I suggest you write a 1 to PASI_FS_RATE_NO_LIM to be able to better support 744kHz.

    data = 0x02;
    i2c_write_reg(kDacBus, kDacAddress, 0x32, &data, 1); // Allow 5% tolerance of audio sampling rates

    Also, your code does not enable ASI channel 1 input data (Register 0x28), and I'm curious if this was intentional or an oversight.

    Best,

    Garret

  • Garret,

    Yes, that filter plot is what I am referencing.

    I will try specifying 5% tolerance.

    For register 0x28 the default value was the correct value for my purposes (normal I2S).

    Here is a question: is it possible to get the filter coefficients for the 768kHz linear phase filter?

    Then I could determine the response exactly (props to scipy.signal!) for my sample rate, and design a corresponding FIR filter to apply in the DSP to compensate for the roll off.

  • Hi Josh,

    I am looking into your question with our system engineers, but it may take some time to get an answer there. Did changing the clock tolerance help at all? As I said, your measurements is not necessarily going to meet datasheet spec at your unique sample rate.

    Also, what is the frequency of the BCLK you are using?

    Best,

    Garret

  • Clock tolerance doesn't seem to make a difference, it appears to operate just fine with either 1% or 5% tolerance set.
    BCLK is 32xFS, so 23.81MHz.
    Being able to plot the response myself with the coefficients would be very helpful though, as fixing the roll off with another FIR filter is an adequate solution for me.

  • Hi Josh,

    Understood, I will keep looking into this and hopefully get these over to you by the end of the week.

    Best,

    Garret

  • Hi Josh,

    Sent you a request so we can continue the thread offline.

    Best,

    Garret