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.

[参考译文] PCM1864:PCM1864仅输出16位音频采样

Guru**** 2394295 points
Other Parts Discussed in Thread: PCM1864, PCM1862, PCM1865, PCM1863

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/860790/pcm1864-pcm1864-only-outputs-16-bit-audio-samples

器件型号:PCM1864
主题中讨论的其他器件: PCM1862PCM1865PCM1863

您好!

PCM1864配置为以32位 TDM 格式运行(8个插槽、每个32位宽= 256 BCLK 比率)。

寄存器11设置为0x13、以便输出32位样本-这一切正常、我只接收16位宽的样本(然后是16位零、然后是来自下一个 ADC 通道的另一个16位样本)。

我是否必须做一些特殊的事情才能从 ADC 获得完整的24位样本?

我使用 osclloscope 检查了时序-看起来很简单(48kHz Framesync、12.288MHz 主时钟和位时钟)。

此致、

Sebastian

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

    您好、Sebastian、  

    不确定是如何确定的、 但当我将寄存器11配置为0x13时、我得到24个活动位和8个填充位。  您能否提供 WCLK 和 DOUT 的示波器捕获、其中 CH1为满量程输入、Ch2为无输入?

    此致、

    -Steve Wilson

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

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

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

    我们在 TDM8方案中使用 PCM1864和 PCM1862、正如您从第一张照片中看到的、每个插槽有16个活动位和16个零-这也是我在 DSP 存储器中看到的结果。 最低的16位始终为0

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

    位时钟和 MCLOCK 均为12.288MHz

    Framesync 为48kHz

    初始化代码为:

    bool CPCM1864Drv:Init()

     #if 1.

       bool RetVal = true;
       unsigned char buf[2]={0x00、0x80};

       buf[0]= PCM186X_PAGE;
       buf[1]= PCM186X_RESET;
       RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

       osDelay (10);

       buf[0]= PCM186X_PAGE;
          buf[1]= 0x00;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

        buf[0]= 0x19;
          buf[1]= 0xFF;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);


         buf[0]= 0x01;
          buf[1]= 0x50;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

            buf[0]= 0x02;
          buf[1]= 0x50;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

            buf[0]= 0x03;
          buf[1]= 0x50;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);


            buf[0]= 0x04;
          buf[1]= 0x50;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);


          //将输入分配给 ADC

        buf[0]= 0x06;
        buf[1]= 0x50;
        RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

        buf[0]= 0x07;
        buf[1]= 0x50;
        RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

        buf[0]= 0x08;
        buf[1]= 0x60;
        RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

        buf[0]= 0x09;
        buf[1]= 0x60;
        RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);


        IF (mEnableTDM)
        {
         buf[0]= 0x0B;
          buf[1]= 0x13;//TDM;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);



          buf[0]= 0x0C;
          buf[1]= 0x01;//4通道输出仅;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);

             buf[0]= 0x0D;
          buf[1]= mTDMPos;//4通道输出仅;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);
        }
        其他
        {
          buf[0]= 0x0B;
          buf[1]= 0x00;//I2S;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);


          buf[0]= 0x0C;
          buf[1]= 0x00;//仅通道输出;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);
       }



          buf[0]= 0x70;
          buf[1]= 0xE1;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);
          osDelay (20);





       buf[0]= 0x20;//从时钟自动分频
         buf[1]= 0x2F;
         RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);




       buf[0]= 0x70;
       buf[1]= 0xE0;
       RetVal &= mpI2CDrv->WriteRead (mI2CAddr、buf、sizeof (buf)、0、0);
       osDelay (20);

    #endif

     /* 表示(int i=0;i<=120;i++)
       {
          buf[0]= I;
          RetVal &= mpI2CDrv->WriteRead (mI2CAddr、&buf[0]、1、&buf[1]、1);
          printf ("PCM1864:reg:%d - Val:0x%02x\r\n"、buf[0]、buf[1]);
       }*/

       返回 RetVal;



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

    您好、Steve、

    对我发送的示波器图像有任何评论?

    此致、

    Sebastian

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

    塞巴斯蒂安  

    我已经在该器件的主要支持工程师中进行了评论。  

    此致、

    -Steve Wilson

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

    您好、Sebastian、

    我花了一些时间来验证这种行为、实际上我在 EVM 上看到了同样的情况。 我认为这是因为 PCM186x 系列中的偶数器件型号的 SNR 仅为103dB。 这将转换为~17位的 ENOB。 虽然 ENOB 通常不是在音频转换器上下文中讨论的内容、但在我看来、这些器件实际上会屏蔽噪声位、因此您不会将其视为活动数据位。

    过去在 e2e 上有一个类似的问题、似乎证实了这一点:  

    如果您需要更高的分辨率、我建议改用具有110dB SNR 的 PCM1863和 PCM1865。

    最棒的

    Zak

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

    您好!

    这仍然是一个问题,因为我们只 得到16位,从而导致96dB SNR?!

    为了实现>103dB、我们至少需要18位(17位仅为102dB)。

    那么、这是数据表中的一个错误、我认为...