参考借鉴:SPDIF接口介绍_huan09900990的博客_spdif接口      

 1.SPDIF简介

        SPDIF(Sony/Philips Digital Interface )是SONY、PHILIPS数字音频接口的简称。就传输方式而言,SPDIF分为输出(SPDIF OUT)和输入(SPDIF IN)两种。

        就传输载体而言,SPDIF又分为同轴和光纤两种,其实他们可传输的信号是相同的,只不过是载体不同,接口和连线外观也有差异。但光信号传输是今后流行的趋势,其主要优势在于无需考虑接口电平及阻抗问题,接口灵活且抗干扰能力更强。

        SPDIF基本上是以AES/EBU(也称AES3)专业用数字接口为参考然后做了一些小变动而成的家用版本。可以使用成本较低的硬件来实现数字讯号传输。为了定制一个统一的接口规格,现如今以IEC 60958标准规范来囊括取代AES/EBU与S/PDIF规范,而IEC 60958定义了三种主要形态:
(1)IEC 60958 TYPE1 Balanced :三线式传输,使用110欧阻抗的线材及XLR接头,使用于专业场合;
(2)IEC 60958 TYPE2 Unbalanced:使用75欧阻抗的同轴线以及RCA接头,适用于一般家用场合;
(3)IEC 60958 TYPE2 Optical:使用光纤传输以及F05光纤接头,也是使用于一般家用场合。
IEC60958有时会简称为IEC958,而IEC 60958 TYPE1即为AES/EBU(也称AES3)接口,而IEC 60958 TYPE2即为S/PDIF接口,虽然在IEC 60958 TYPE2的接头规范里是使用RCA或光纤接头,不过今年来一些使用S/PDIF的专业器材改用BNC接头搭配上75欧的同轴线也可以得到比较好的传输质量,下表为AES/EBU与S/PDIF的比较表:

AES/EBU 

SPDIF

线材

110欧屏蔽双绞线

75欧同轴或光纤

接头

XLR 3线接头

RCA/BNC接头

最大位数

24bit

标准20bit,可支持24bit

逻辑电平

3~10V        

0.5~1.0

编码

双相符编码BMC

双相符编码BMC

(调试要注意逻辑电平是否满足需求,不满足需求音响不发出任何声音)

2. 双相符编码BMC

        BMC属于一种相位调制(phase modulation)的编码方法,是将时钟信号和数据信号混合在一起传输的编码方法。其原理是使用一个两倍于传输位率的时钟频率做为基准,把原来一位数据拆成两份,当数据为1的时候,在其时钟周期内转变一次电位(0->1或1->0)让数据变成两个不同电位,变成10或01,而当数据为0则不转变电位,变成11或00。同时每一个位开头的电平与前一个结尾电平要不同(Preamble 头4位除外),这样接收端才能判别每一个位的边界,如下图所示。(BMC编码可以让传输线保持在接近0的平均直流电位,除了可以降低传输需要耗费的功率之外,也可以降低实体电磁干扰,让数据正确性更高)。

aes转spdif aes转spdif电路_fpga开发

 

3. SPDIF格式

      AES/EBU与S/PDIF主要是用来传递PCM格式的音频信号,例如48Khz的DAT以及44.1Khz的CD(采样率LRCK=48KHz或44.1K,位时钟SCLK=48KHz或44.1K乘上64bit),不过现在也有用来传递压缩过的多声道信号。SPDIF是由192个框架(Frame)构成的区块(Block)。而每个Frame储存了两个声道的一组采样信号(Sample),分为Channel A与Channel B两个声道。每组Sample 由一个子框架(Sub Frame)构成,也就是一个Frame里有两个Sub Frame。Sub Frame的长度为32bits,里头包含了头码(Preamble),辅助数据(Aux Data),音频数据(Audio Data)以及4个位的信息与检查码。一个Sub Frame为32bits,则一个Frame为8Byte,一个block为192x8=1536 Bytes,每个block总共可以传递192个双声道Sample。

aes转spdif aes转spdif电路_硬件工程_02

 子框架(Sub Frame)的结构以及每个部分代表的意义如下:

aes转spdif aes转spdif电路_硬件工程_03

 0-3 头码(Preamble) : 用来表示一个Sub Frame的开头,有三种型态,分别表示该Sub Frame为Channel A、Channel B或者是一个Block的起始Sub Frame(为Channel A)。
4-7 辅助数据(Aux. Data) : 原始此区块的设计是用来传递一些使用者自行添加的信息,不过目前比较常见的用途是当音讯数据超过20Bit取样时,这四个Bit用来储存多出的取样Bit,比如说当要传送24Bit取样的数据时,用来存放末四个Bit的音讯数据。
8-27 音频数据(Audio Data) : 存放实际的取样数据,长度为20 Bit,以LSB优先的方式传送,当取样低于20 Bit时,没有用到的LSB Bits要设定为零,举例来说,当我们要传送16 Bit的数据时,只会用到12-27 Bit的位置(LSB在12 Bit),而8-11 Bit为零。
28 有效位(Validity Bit):此位设定了这一个Sub Frame内的数据是不是正确,如果设定为0,代表此Sub Frame内的数据是正确可被接收的,反之如果此Bit为1,则代表接收端应该忽略此组Sub Frame。比如说CD转盘读取CD数据时若是有某一个Sample读不到就会将代表该组Sample的Sub Frame中的有效位设为1。
29 使用者位(User Bit) : 此位为使用者自行定义的位,每组Sample传送一位,直到192组Sample传完后组成192位的信息,两声道各自有一组192位的使用者信息。
30 信道状态位(Channel Status Bit) : 此位与使用者位一样,每组Sample传送一位,最后组成两声道各自一组192位的信道状态信息(Channel Status)。这个192位信道状态信息分为专业(Professional)与一般家用(Consumer)两种不同的结构,以第一个位决定,设为1的时后为Professional模式,设为0的时后为Consumer模式。
31 同位检查位(Parity Bit) : 同位检查是用来判别是否有奇数个位是发生错误,是一种简便错误检查方法,这边是使用偶位同位检查(Even Parity Check)。

发送顺序是先发左边(左声道)32bit数据(LSB -> MSB),然后再发右边(右声道)32bit数据(LSB -> MSB)

       头码是用来表示一个Sub Frame的开头,主要有B,M,W(或Z,X,Y)三种组态,各代表不同的意义。M代表此时传送的是A通道(左声道),W代表此时传输的是B通道(右声道),而B比较特殊,代表此时传送的是A通道,并且是一个Block的起始Sub Frame。 

aes转spdif aes转spdif电路_fpga开发_04

      在上头的表格里的数据数值是Sub Frame中其它的数据经过BMC编码之后再加到整个Sub Frame前头的数据数值,所以总共是八码,代表四个位的时序。此外比较特别的是除了有X、Y、Z三种组态之外,上面的表格还列出了另外一组与原本数据向位相反的数值,要使用哪一组数值是依照前一组Sub Frame中最尾端的电平而定,当前一组Sub Frame为最尾端的电平0时用左边那一列数值,为1的时后用右边那一列,这样接收端才能正确处理。

aes转spdif aes转spdif电路_Data_05

在一个区块(Block)中,Preamble为Z组态时代表一个区块的起始点,如下图所示

aes转spdif aes转spdif电路_数据_06