天天看点

基于ADK4.1 Sink Configruation TOOL 配置I2S输出

I2S总线规范

在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。

I2S有3个主要信号

1.串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有 1个脉冲。SCLK的频率=2×采样频率×采样位数。

2. 帧时钟LRCK,(也称WS),用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。

3. 串行数据SDATA,就是用二进制补码表示的音频数据。

串行数据(SD)

  I2S格式的信号无论有多少位有效数据,数据的最高位总是出现在LRCK变化(也就是一帧开始)后的第2个SCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

  随着技术的发展,在统一的 I2S接口下,出现了多种不同的数据格式。根据SDATA数据相对于LRCK和SCLK的位置不同,分为左对齐(较少使用)、I2S格式(即飞利浦规定的格式)和右对齐(也叫日本格式、普通格式)。

  为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。

    

字段(声道)选择(WS)

 命令选择线表明了正在被传输的声道。

 WS=1,表示正在传输的是左声道的数据。

 WS=0,表示正在传输的是右声道的数据。

 WS可以在串行时钟的上升沿或者下降沿发生改变,并且WS信号不需要一定是对称的。在从属装置端,WS在时钟信号的上升沿发生改变。WS总是在最高位传输前的一个时钟周期发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令清除空间。

电气规范:

输出电压:

  VL <0.4V

  VH>2.4V

输入电压

  VIL=0.8V

  VIH=2.0V

  

注:目前使用的TTL电平标准,随着其他IC(LSI)的流行,其他电平也会支持。

了解了以上I2S的基本知识;

以下为ADK4.1 Configuration Tool上的I2S配置界面 

基于ADK4.1 Sink Configruation TOOL 配置I2S输出

plugin Type : 指定I2S所需要的Plugin;

选项中包含三种类型分别是:USER Defined via PS KEYs USER35 USER36、SSM_2518 CSR I2S DEV Board、Customer develop plugin

USER Defined via PS KEYs USER35 USER36 : 表示用USER35\USER36里面的数据pulgin。

SSM_2518 CSR I2S DEV Board:表示用2518 的器件开发;

Customer develop plugin:表示用用户自定义的开发plugin;

Master or slaver operation : 表示I2S做主或者做从;

Left or Right justified I2S : 选择对齐方式选项有左对齐与右对齐;当然还有I2S对齐方式;以下为左对齐与右对齐方式;

左对齐:数据为LRCK的第一个数据;

右对齐:最后的数据与LRCK对齐;

LRCLK相当于采样率对应于CSR8670 输出引脚PCM_SYNC;

基于ADK4.1 Sink Configruation TOOL 配置I2S输出

Justified data delay by 1 bit : 表示数据延时1bit;

bit per smaple : 表示I2S输出数据的位数;

Audio Input Resolution : 对应I2S输入的数据位;CSR8670无此功能;只有CSR8675\8676支持此功能;

Audio Output Re-Sample Rate【HZ】: 表示输出采样率;要求至少44.1khz,如此处配置44.1khz,蓝牙PCM_SYNC引脚输出波形频率也为44.1Khz,相当于LRCLK;

VoiceRe-smaple Rate[hz] : 表示语音输出的采样率,如果设置为0则不使能;

Bit Clock Scaling factor : 指定I2S输出的位时钟频率;相当于因数N;而BCLK = FS*N ; FS表示输出采样率;比如:Audio Output Re-Sample Rate配置为48khz;Bit Clock Scaling factor配置为64;那么BCLK = 48 * 64 = 3072KHZ;此时钟对应于CSR8670的PCM_CLK;

关于I2S的配置代码

在库文件夹下的CSR_i2s_audio_plugin.c中

基于ADK4.1 Sink Configruation TOOL 配置I2S输出

关于CSR8670 , I2S角色为主的配置方法:

作主的时候注意,只有当CSR8670内部有Route相应的Source的时候才会有I2S波形输出,换句话说比如在(AUX,SPDIF)音源下的时候,I2S波形是可以正常输出的,但是如果没在任何音源的时候(如蓝牙播放歌曲然后暂停或者蓝牙通道没播放歌曲),那么此时I2S无数据输出;如果想用I2S的PCM_CLK作为外部的器件的主时钟就要注意了;

基于ADK4.1 Sink Configruation TOOL 配置I2S输出

角色为从:

作从角色的时候,PCM_SYNC,PCM_CLK都由外部器件提供;

基于ADK4.1 Sink Configruation TOOL 配置I2S输出

关于I2S的描述参考了以下博客

http://blog.chinaunix.net/uid-23215128-id-2521479.html