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.

[参考译文] PCM2906C:来自 DIT4096的 S/PDIF 输入

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1245175/pcm2906c-s-pdif-input-from-dit4096

器件型号:PCM2906C
主题中讨论的其他器件:PCM1808、DIT4096、 PCM1801、PCM9211

您好、TI!

 

我们在使音频解决方案正常运行时遇到问题、希望获得一些支持来解决。

背景:

我们设计了两个 PCB、其中一个 PCB 可以录制来自麦克风的音频、并通过光纤电缆将音频作为 S/PDIF 发送。 第二个 PCB 将从光缆接收音频、然后通过 USB 将其传输至计算机。

信号链如下所示:

麦克风->音频调节电路-> PCM1808 ADC ->[I2S、24位、FS= 48kHz]-> DIT4096 ->[S/PDIF ->光学发送器->光学接收器-> PCM2906C ->[USB]->计算机。   

我们已通过将 PCM2906C S/PDIF 输入和 USB 连接连接连接到另一个 S/PDIF 源进行了验证、并已将音频成功传送到计算机。 我们还设法排除了光发射器和接收器是问题的根本原因。 使用示波器、我们可以在 PCM2906C S/PDIF 输入上看到 S/PDIF 波形、但 PCM2906C 不会向计算机报告任何内容。 再次通读数据表时,我们注意到,前面提到的 PCM2906C S/PDIF 输入支持的位深仅为16位,但我们应该发送24位音频(?)。 您是否可以确认 PCM2906C 在其 S/PDIF 输入上不接受24位音频? 或者它是否仅忽略6 LSB?   

 

无论是哪种方法、我们都决定快速进行新 PCB 的原型设计、但改用 PCM1801 16位 ADC、这使得信号链如下所示:    

麦克风->音频调节电路-> PCM1801 ADC ->[I2S、16位、FS= 48kHz]-> DIT4096 ->[S/PDIF ->光学发送器->光学接收器-> PCM2906C ->[USB]->计算机。

但我们仍未能使 PCM2906C 接受由 DIT4096生成的 S/PDIF。 更多详细信息:   

  • DIT4096配置为 I2S 主器件。  
  • PCM1801配置为 I2S。  
  • PCM1801 SCKI 引脚和 DIT4096 MCLK 引脚由18.432 MHz 振荡器(384*FS)供电   
  • DIT4096配置为 SW 模式、并具有以下设置:
    • [寄存器]值
    • [0x03] 0xAD
    • [0x02] 0x04
  • I2S 同步时钟的测量值为48kHz、I2S 数据时钟的测量值为3.072MHz。 PCM1801在 I2S 数据线上输出数据。   
  • 我们可以在 PCM2906C S/PDIF 输入引脚上看到 S/PDIF 数据、但在计算机上什么也看不到。   

我们是否正确配置了 DIT4096? 我们是否需要对通道状态数据缓冲区进行任何配置?   

非常感谢任何帮助或建议。  

 

谢谢。

乔纳斯

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

    原始帖子的一个小补充:

    我们使用逻辑分析仪在 PCM1801和 DIT4096之间捕获了 I2S 数据。 然后、我们将捕获的 I2S 数据转换回音频、从而可以清晰地听到原始录制的音频。 因此、我们现在相信 DIT4096的 I2S 输入有效/正确。    

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

    您好 Jonas:

    感谢您对问题的详尽解释。  PCM2906C 仅接受如下所示的输出。  

    我建议继续沿信号链向下走。 使用逻辑分析仪、您可以探测光 TX 和 Rx、以查看信号是否按预期向 PCM2906C 输入提供。

    能否发送原理图? 我想特别介绍一下 DIT4096和光发射器之间的连接、以及光接收器和 PCM2906C 之间的连接。  

    此致!
    安德鲁

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

    Andrew、您好!

    感谢您的答复。

    至少这解释了我们无法使用24位 PCM1808 ADC 让它正常工作的原因。 因此、让我们重点了解如何使  PCM1801 16位 ADC 解决方案正常运行。   

    下图是使用逻辑分析仪获取的 S/PDIF 信号片段。 我们在 DIT4096输出和 PCM2906输入之间未看到任何异常。 在任意位置测量脉冲宽度时、其值似乎至少保持在2ns 以下(我们可以测量的最小差值、受逻辑分析仪采样频率的限制)。 我们还尝试将 DIT4096 S/PDIF 输出连接到 Toslink 扬声器,并能够播放/听到进入麦克风的声音(尽管那里也存在相当多的静态/嗡嗡声噪音,不知道为什么)。  

    我们可以发送原理图、但需要先隐藏一些非相关的详细信息。 首先、您能否确认您同意我们的 DIT4096软件配置? 目前、 我们未对通道状态数据缓冲区进行任何我们不确定是否应该进行的更改。 是否是通过 S/PDIF 协议发送的 PRO /消费类和版权位相关的问题?          

    此致、

    乔纳斯

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

    您好 Jonas:  

    到目前为止、DIT4096看起来是正确的。 我将与较大的团队核实一下 PRO/Consumer 复制位的问题、以了解这是否会造成问题。 但是、如果可能的话、我想排除原理图问题。  

    此致!
    安德鲁

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

    Andrew、您好!

    感谢您与团队核实。 将原理图私下发送给您的最方便的方式是什么?  

    此致、

    乔纳斯  

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

    尊敬的 Jonas:

    最好发送电子邮件。 我可以通过为您的 myTI 帐户列出的电子邮件联系您吗?

    此致!
    安德鲁

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

    Andrew、您好!

    是的、请这么做。

    此致、

    乔纳斯

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

    尊敬的 Jonas:

    感谢您分享原理图。

    我们已通过将 PCM2906C S/PDIF 输入和 USB 连接连接连接连接到另一个 S/PDIF 源来验证,并已将音频成功传送到计算机。 我们还设法排除光发射器和接收器是根本原因。[/引号]

    我认为这意味着您是否已通过 PCM2906C (虽然使用24位)使用外部 SPDIF 信号验证了性能? 您是否使用16位格式完成了此测试并且 PCM2906C 能够正确地播放到计算机上? 实质上、我希望确认 PCM2906C/光接收器采用的是16位格式进行验证。  

    如果为真、则断开将介于 DIT4096输出和 PCM2906C 之间。 这指向格式错误匹配、因为从麦克风输入到光接收器(我相信您在下面提到过)、信号链似乎正常工作(输出数据)、  

    是否是一个与通过 S/PDIF 协议发送的 PRO /消费类和版权位有关的问题?          [/报价]

    如果我们可以确认这两个器件之间的断开、请提供来自 DIT4096/发送器的 S/PDIF 协议数据包捕获以及在接收器/PCM2906C 上工作的数据包。 理想情况下、如果存在格式不匹配、这将向我们显示。

    此致!
    安德鲁

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

    Andrew、您好!

    我认为这意味着您是否已通过 PCM2906C (虽然使用24位)使用外部 SPDIF 信号验证了性能? 您是否使用16位格式完成了此测试并且 PCM2906C 能够正确地播放到计算机上? 实质上、我希望确认 PCM2906C/光接收器采用的是16位格式进行验证。  

    如果为真、则断开将介于 DIT4096输出和 PCM2906C 之间。 这指向格式错误匹配、因为从麦克风输入到光接收器(我相信您在下面提到过)、信号链似乎正常工作(输出数据)、  

    [/报价]

    在本例中,S/PDIF 源是同一 PCM2906C 的 S/PDIF 输出,我应该更清楚地了解这一点。 下面我试着使信号路径可视化、但我发送的 SPDIF 发送器原理图(SPDIF_Transmitter_24bit.PDF)中包含了粗体组件。 循环是通过在 U1和 U4之间连接光纤来完成的。 因此、已验证光学接收器和 PCM2906C 输入(至少将其自己的 S/PDIF 输出用作源)。    

    计算机->[USB]-> PCM2906C ->[S/PDIF、16位、48kHz]->光学发送器-> 光学接收器->  

                                                                                       |

                                                                                       V

                       计算机<-[USB]<- PCM2906C <-光学接收器<-  光发射器 <-

    如果我们可以确认这两个器件之间的断开连接,请提供来自 DIT4096/发送器的 S/PDIF 协议数据包捕获以及在接收器/PCM2906C 上工作的打包数据。 理想情况下,这将显示格式不匹配的情况。

    我们亲身体验了另一个支持 S/PDIF 解码的逻辑分析仪。 分析工作中的 S/PDIF 源(PCM2906C S/PDIF 输出)、它将以下通道状态块位设置为逻辑"1"(从位索引0开始):位[9]= 1、位[15]=1、位[25]=1、其余位为逻辑"0"。  从 S/PDIF 规范来看,位[8 : 15]表示产生数字音频接口的设备类型以及生成状态。 第24:27位表示采样频率、在本例中是48kHz、这是正确的。

    分析 DIT4096 S/PDIF 输出所有通道状态块位都为逻辑"0"、这是在对 DIT4096进行以下 SW 配置时完成的:

    • [寄存器]值
    • [0x03] 0xAD
    • [0x02] 0x04

    我们尝试配置 DIT4096通道状态数据缓冲器(见数据表中的图9)以匹配 PCM2906C 输出、但我们尝试编程到 UA 缓冲器中的值无法成功读回。 下面是一个代码片段以及一些注释。  我们将在明天继续对此进行进一步调查。   

    此外、在 DIT4096数据表的表 VIII 中有一个 CS_N 列、这是什么 意思?  

     

    DIT4096Write(0x03, 0xAD);
    DIT4096Write(0x02, 0x04);
    delay(100);                                 //Delay 100 ms after power up. 
    uint8_t BTD = 1;                             //Set BTD to 1
    DIT4096Write(0x07, BTD);                     //Write BTD to register 0x07
    SerialUSB.println(DIT4096Read(0x07));        //Readback register 0x07, response is 0x01: OK!
    
    delay(500);
    SerialUSB.println(DIT4096Read(0x08),HEX);    //Read register 0x08, response: 0xFB
    delay(500);
    DIT4096Write(0x08, 0x00);                    //Write 0x00 to register 0x08
    SerialUSB.println(DIT4096Read(0x08),HEX);    //Read register 0x08, response is 0xFB: NOT expected. 
    
    BTD = 1;                                     //Set BTD to 0
    DIT4096Write(0x07, BTD);                     //Write BTD to register 0x07

    此致、

    乔纳斯    

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

    您好 Jonas:  

    感谢您添加信息。  

    让我向小组核实 CS_N 报头的正确使用情况。 可以看出、这与"图6"相关。 写入操作格式"、可能是需要写入该寄存器的标头字节、但我需要进一步研究这一点。  

    此致!
    安德鲁

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

    尊敬的 Jonas:  

    快速更新(我仍在与团队一起查看所有信息)。 DIT4096往往难以编程。  请为 DIT4096尝试以下配置脚本、并告知我是否正在配置器件。  

    # PCM9211_Init.txt
    #this script is for SPDIF-->RXIN0-->DIR-->MainOutput, Record sound from SPDIF to PC through TAS1020
    
    #1, Chose RXIN0 to DIR
    #2, Active DIR
    #3, chose DIR output as Mainoutput's source.
    
    #Also HW modification
    #1, Flying to High Level(3.3V) to make sure U7's output is Hi-Z
    #or 2, TAS1020 output logic high on P1.2 I2S enable signal. 
    #**************************************
    
    #System RST Control
    #w 80 40 00
    w 80 40 33
    w 80 40 C0
    
    #XTI Source, Clock (SCK/BCK/LRCK) Frequency Setting
    # XTI CLK source 12.288 and BCK 3.072, LRCK 48k = XTI/512
    w 80 31 1A
    w 80 33 22
    w 80 20 00
    w 80 24 00
    #ADC clock source is chosen by REG42
    w 80 26 81
    
    #XTI Source, Secondary Bit/LR Clock (SBCK/SLRCK) Frequency Setting
    w 80 33 22
    
    #*********************************************************
    #-------------------------------Start DIR settings---------------------------------------
    #REG. 21h, DIR Receivable Incoming Biphase's Sampling Frequency Range Setting
    w 80 21 00
    
    #REG. 22h, DIR CLKSTP and VOUT delay
    w 80 22 01
    
    #REG. 23h, DIR OCS start up wait time and Process for Parity Error Detection and ERROR Release Wait Time Setting
    w 80 23 04
    
    # REG 27h DIR Acceptable fs Range Setting & Mask
    w 80 27 00
    
    # REG 2Fh, DIR Output Data Format, 24bit I2S mode
    w 80 2F 04
    
    # REG. 30h, DIR Recovered System Clock (SCK) Ratio Setting
    w 80 30 02
    
    #REG. 32h, DIR Source, Secondary Bit/LR Clock (SBCK/SLRCK) Frequency Setting
    w 80 32 22
    
    #REG 34h DIR Input Biphase Signal Source Select and RXIN01 Coaxial Amplifier
    #--PWR down amplifier, Select RXIN2
    #w 80 34 C2
    #--PWR up amplifier, select RXIN0
    w 80 34 00
    #--PWR up amplifier, select RXIN1
    #w 80 34 01
    
    #REG. 37h, Port Sampling Frequency Calculator Measurement Target Setting, Cal and DIR Fs
    w 80 37 00
    #REG 38h rd DIR Fs
    r 80 38 01
    #***********************************************************
    #------------------------------------ End DIR settings------------------------------------------
    
    
    #***********************************************************
    #---------------------------------Start  MainOutput Settings--------------------------------------
    #MainOutput
    #REG. 6Ah, Main Output & AUXOUT Port Control
    w 80 6A 00
    
    #REG. 6Bh, Main Output Port (SCKO/BCK/LRCK/DOUT) Source Setting
    w 80 6B 11
    
    #REG. 6Dh, MPIO_B & Main Output Port Hi-Z Control
    w 80 6D 00
    #***********************************************************
    #------------------------------------ End MainOutput settings------------------------------------------
    
    # read back all registers to ensure GUI integrity
    r 80 20 5E
    

    此致!
    安德鲁

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

    Andrew、您好!

    看看你的文章的脚本,它似乎不兼容的 DIT4096(?)。  

    此致、

    乔纳斯

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

    您好 Jonas:  

    很抱歉耽误你的时间。

    PCM9211是一种类似的器件。 您可以使用该结构;不过、寄存器可能会不同。 随附的是另一个应兼容的脚本、但第一个脚本很适合展示 DIR 和 DIT 编程的步骤。

    DIX4192_5F00_script.txt

    此致!
    安德鲁

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

    尊敬的 Jonas:  

    一般来说,这个 DIT4096部分是相当老和支持它是困难的。 最佳猜测是某些 SPDIF 数据包/数据帧不匹配导致 PCM2906C 无法识别音频数据包。 此处的最佳建议是使用逻辑分析仪查看与 PCM06C 配合使用的数据包、并查看它与 DIT40的 SPDIF 输出有何不同。  

    在进一步审查后、我们有以下评论:

    1. 在 SPDIF_reciever.PDF 中、请将 R131替换为电容器。 未使用的模拟输入应交流耦合到 GND (或保持悬空)。
    2. 在 SPDIF_Transmitter_16bit.PDF 中、U4引脚28与3.3V 连接。 这意味着它已针对硬件模式操作进行设置。  
      1. 似乎您对器件进行了编程、因此希望这不是对通道状态寄存器进行编程是一个问题的原因、但我仍然想对其进行编程。  
      2. 我怀疑 PCM1801未接收到数据包是 VUCP 位中 DIT4096 SPDIF 数据包不匹配导致的。 这在硬件模式下配置可能更容易。  

    希望这篇文章和之前的回复能有所帮助。

    此致!
    安德鲁

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

    您是否发现了任何可能导致 PCM2906C 记录已应用于 PCM2906C DIN 引脚的 S/PDIF 信号的方法?

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

    您好、Michael Sirkis、  

    我认为此问题与 (+) PCM2906CEVM-U:S/PDIF 输入无法正常工作有关。 -音频论坛-音频- TI E2E 支持论坛。 我已经在你的原始主题中回复了你。  

    此致!
    安德鲁

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

    Andrew、您好!


    我们设法在硬件模式下获得采用 PCM1808 (24位、48kHz I2S)和 DIT4096的原始解决方案、以用于 PCM2906C S/PDIF 输入。 问题是 S/PDIF 通道状态数据的版权位(位2)、需要为逻辑1。 为此、我们需要将 DIT4096 (硬件模式)上的复制引脚(引脚2)和 L 引脚(引脚3)拉低。 PCM2906C 仅规定它可以处理16位 S/PDIF 输入、因此我们假设它只截断24位 S/PDIF 信号的 LSB。    

    如果有人在该线程上发生故障,则  S/PDIF 通道状态数据位中的以下位是工作配置中的逻辑1,第2、9、11、12位 25、32、33、35]、其余为逻辑0。 Sigrok Pulseview 软件附带 S/PDIF 解码器、支持大量逻辑分析器、对于故障排除确实有帮助、可以推荐。

    一个恼人的 问题是、我们仍然无法管理在 SW 模式下使用 DIT4096对 S/PDIF 通道状态位进行编程、我们可以毫无问题地对其他配置寄存器进行编程。 无论是哪种方式、我们现在都将验证我们的音频解决方案、并确定我们是否满意24位到16位截断的质量、或者我们是否需要重新思考并采用16位 ADC 并尝试处理 SW 模式下的 DIT4096问题。         

    您是否发现任何可能导致 PCM2906C 记录已应用于 PCM2906C DIN 引脚的 S/PDIF 信号的结果?

    是的、请参阅上面的内容!  

    此致、

    乔纳斯