ZX2000 SPDIF 整体架构以及SPDIF协议分析

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第1张图片

 

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第2张图片

Audio PLL经过上面表格里面的分频,可以分出target中的频率(Mhz)。

FPGA验证的时候跑的是48K采样率的音乐,所以clock的设置如下:

BitClock = ASYSCLK / D = OverSampClock / D = 36.864 / 6 = 6.144Mhz  //D的值是软件控制的

DataClock = 6.144 / 2 = 3.072 Mhz

SampClock = 3.072 / 64 = 48Khz

 

Abby有一个版本的bitfile可以配置ASYSCLK:

 

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第3张图片

通过

devmem 0x8399038 读出该寄存器原来的值:

0x80000011

devmem 0x8399038 32 0x80000111 可以将bit8设置成1,来获取另外一个ASYSCLK

 

BitClock = ASYSCLK / D = OverSampClock / D = 33.8688 / 6 = 5.6448 Mhz  //D的值是软件控制的

DataClock = 5.6448 / 2 = 2.8224 Mhz

SampClock = 2.8224 / 64 = 44.1 Khz

 

SPDIF只有一根输出线,clkdata信息都通过这根线传输,

SPDIF的数据格式如下:

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第4张图片

 

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第5张图片

 

1 Block       (192 * 64 = 12288 bits )                       = 192 Frames

1 Frame            (32*2 = 64 bits )                       = 2 SubFrames

1 SubFrame      (32 bits)             = 1 Preamble(4 bits) + 1 Channel(28 bits)

1 Channel         (28 bits)         = 1 AuxData(4 bits) + 1 AudioData(20 bits) + 1 MiscData(4 bits)

 

SPDIF 使用的是Biphase-Mark Encoding

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第6张图片

上图中,最下面的是SPDIF实际量出的波形,虚线对应的各个点肯定是跳变沿,两根虚线之间如果有数据跳变,则对应的中间的Data1,如果没有数据跳变,中间的Data0

SPDIF中的引导码,分为3种:

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第7张图片

ZX2000 SPDIF4frame8subframe)是没有Z前导码的,是用来进行校验的。第五个frame才会出现Z前导码。

ZX2000 SPDIF 整体架构以及SPDIF协议分析_第8张图片

前导码是不符合上面说的,虚线边沿数据跳变规则的,所以很容易能够从波形里面找出来。

SPDIFbitclk,可以量上面单独存在的1的周期,然后换算成频率。Bitclk/2/64就可算出采样率了

你可能感兴趣的:(ZX2000 SPDIF 整体架构以及SPDIF协议分析)