闫红超
(西南交通大学电气工程学院,成都 610031)
I2S(Inter-IC Sound Bus)是飞利浦公司针对数字音频设备之间的音频数据传输而制定的一种总线标准,采用沿独立的导线传输时钟与数据信号的设计[1],通过分离数据和时钟信号,避免了时差诱发的失真。I2S总线简单有效,可以有效提升输出数据的质量,在各种嵌入式音频系统中有广泛应用。但是在嵌入式音频系统设计中,并不是所有的MCU都支持I2S总线格式,再加上I2S还没有统一的接口标准,不同的厂家生产的设备接口也是五花八门,采用软件模拟实现I2S总线可有效解决在不支持其的MCU和设备之间通过I2S总线实现数据传输时出现的问题。
本文通过在以太网数字语音广播系统中软件模拟I2S总线实现语音数据传输,给出了软件模拟实现I2S总线的方法。
I2S为三线总线,3个信号分别为[1-3]:
①串行时钟SCK,也叫位时钟(BCK)。即每发送1位数字音频数据,SCK上都有1个脉冲。SCK的频率=2×采样频率×采样位数。在数据传输过程中,I2S总线的发送器和接收器都可以作为系统的主机来提供系统的时钟频率。
②帧时钟WS,即命令(声道)选择,用于切换左右声道的数据。WS的频率等于采样频率,由系统主机提供。WS为“0”表示传输的是左声道的数据,WS为“1”表示传输的是右声道的数据。
③串行数据信号SD,用于传输二进制补码表示的音频数据。
I2S格式的信号无论有多少位有效数据,数据位的最高位(MSB)总是被最先传输,1次能够发送的数据决定于I2S格式的有效位数。
1个典型的I2S信号时序如图1所示[2]。
图1 I2S总线典型时序图
随着技术的发展,在统一的I2S接口下出现了多种不同的数据格式。根据SD信号相对于SCK和WS位置的不同,分为左对齐和右对齐2种格式,如图2和图3所示。
图2 16位有效位数的左对齐格式
图3 16位有效位数的右对齐格式
在上面2种数据传输格式中,当WS为“1”时传输的是左声道的数据,当WS为“0”时传输的是右声道的数据。为了保证数字音频信号的正确传输,发送端和接收端必须采用相同的数据格式。
以太网数字语音广播系统主要是指以以太网为传播介质提供音频服务的广播系统,将语音信号以标准IP包的形式在以太网上进行传送,以实现语音广播功能。该系统在PC机端通过麦克风采集语音数据,然后将采集到的语音数据通过以太网发送给嵌入式终端,嵌入式终端将接收到的语音数据进行数/模转换后进行播放。系统实现框图如图4所示[5]。
图4 以太网数字语音广播系统框图
广播系统终端的MCU LM3S8962将接收到的语音数据通过I2S总线发送给语音解码芯片MS6336进行数/模转换并播放,LM3S8962和MS6336的连接如图5所示。为了完整还原出语音信号,需要保证软件模拟I2S信号时序严格精确,高低电平的转换采用延时程序实现。MS6336为16位D/A芯片,其I2S时序如图6所示[5]。
图5 LM3S8962与MS6336的连接图
图6 MS6336的典型I2S时序图
该系统中的语音数据双声道,16位采样,1个采样点的数据为4字节,1个采样点数据通过MCU发送给MS6336,数据发送流程如图7所示[5]。
图7 1个采样点数据发送流程
软件模拟I2S引脚的定义如下:
根据MS6336的I2S总线格式以及数据发送流程,软件模拟I2S总线的步骤如下:
①根据语音数据采样率及采样位数计算得到SCK的值和WS的值(WS的值等于采样频率)。系统采样率为44.1 kHz,则 SCK=2×44.1 kHz×103×16=1 411 200 Hz,WS=44 100 Hz。1个SCK时钟周期 T=1/SCK=0.7 μ s。采用延时程序模拟SCK时钟周期需要应用示波器来精确延时时间。本系统中一个SCK周期的延时为delayI2S(2)。
②将WS、BCK和DATA均置为高电平。
③选择左右声道。首先发送左声道数据,将WS置低(若发送右声道数据则将WS置高)。
④选择高低字节。将左声道数据以高低字节的顺序发送,在发送高字节第1位数据之前先发送1个周期的串行时钟。
⑤开始传输音频数据(音频数据的传输在SCK下降沿准备数据,在SCK的上升沿发送给数据接收端)。将采样点左声道数据的高字节最高位送给SD,设置SCK为低电平,此时为SCK的下降沿,数据准备好。延时半个SCK周期以后将SCK置为高电平,此时SD线上的数据发送给数据接收端,延时半个SCK周期。依次将左声道剩余位数据按照最高位的方式发送出去。
⑥当将1个采样点的左声道的数据发送完以后,延时2个SCK周期,然后发送右声道的数据(同左声道数据的发送过程)。
根据以上的过程对每个采样点的数据进行处理,就可以实现通过软件模拟I2S总线传输音频数据了。以上实现的是典型I2S时序模拟,而左对齐和右对齐2种格式只是时序稍有差异,模拟实现过程同典型I2S总线模拟实现过程基本相同。
编者注:完整模拟程序见本刊网站www.mesnet.com.cn。
在以太网数字语音广播系统中应用软件模拟实现I2S总线时序,能够成功地实现语音信号的数据传输,实现语音信号的实时广播,表明了软件模拟实现I2S总线的可行性,为解决不支持I2S总线的MCU和各种I2S总线设备间的通信提供了一种可行的方法。但是,在应用软件模拟实现I2S的以太网数字语音广播系统实时播放语音信号时,存在一些噪声,表明在采用软件模拟实现I2S的时序精确性上存在一些欠缺。
[1]王玥婷,毛敏.基于ADSP的I2S总线应用[J].中国科技信息 ,2007(1):118-119.
[2]Philips Semiconductor.I2S BUS Specification[OL].1996[2010-04].http://www.Semiconductor.Philips.com.
[3]李龙雨,冯志华.音频总线I2S技术[J].信息技术,2004,28(11):23-25.
[4]周伟,王慧梅.基于FPGA和AD1836的I2S接口设计[J].世界电子元器件,2008(8).
[5]闫红超,苟先太.嵌入式以太网数字语音广播系统的设计与实现[J].现代电子技术,2010,33(6):99-101.