android下调试声卡驱动之I2S音频通信

一、I2S概述

I2S(Inter—IC Sound)总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之

间的数据传输。由4条线组成的数字音频接口,常用于HiFi,STB便携设备。Tx  和Rx信号线用于音频传输。而位时钟和左右时钟

(LRC)用于同步链接。I2S具有灵活性,因为控制器和解码器都可以控制位时钟和左右时钟。位时钟因采样率和主系统时钟而有不

同。LRCLK与采样率相同。少数设备支持独立的ADC和DAC的LRCLK。这使在不同采样率情况下同步捕获和回放成为可能。

二、I2S总线介绍

I2S有3个主要信号线分别为:串行时钟、帧时钟、串行数据。

串行时钟:SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,BCLK都有1个脉冲。

BCLK的频率=2×采样频率×采样位数。

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

据,为“0”则表示正在传输的是左声道的数据。LRCK可以在串行时钟的上升沿或者下降沿发生改变,并且LRCK信号不

需要一定是对称的。在从属装置端,LRCK在时钟信号的上升沿发生改变。LRCK总是在最高位传输 前的一个时钟周期

发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令

清除空间。

串行数据:SDATA,用二进制补码表示的音频数据。I2S 格式的信号无论有多少位有效数据,数据的最高位总是被最先传输(在

LRCK变化(也就是一帧开始)后的第2个BCLK脉冲处),因此最高位拥有固定的位置,而最 低位的位置则是依赖于数据的

有效位数。也就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧

中多余的低位数 据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位(常补足为零)。这种同步机制使

得数字音频设备的互连更加方便,而且不会造成数据错位。 为了保证数字音频信号的正确传输,发送端和接收端应该

采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。

有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(Sys Clock),是采样频

率的256倍或384倍。

三、I2S数据格式

根据SDATA数据相对于LRCK和BCLK的位置不同,分为左对齐、右对齐和I2S格式(即标准格式),在数据传输中MSB总是第一

个被传输,在这里声明一下提供BCLK和LRCK时钟的为主设备。

1、在左对齐模式下,MSB可在BCLK的第一个上升沿继LRCLK过渡。

2、在右对齐模式下,LSB可在BCLK的最后一个上升沿LRCLK前过渡。

3、在I2S模式下,MSB可在BCLK继LRCLK一个转型后的第二个上升沿过渡。

4、有些声卡还支持DSP格式,该格式不属于I2S的范畴。

LRP = 0

LRP = 1

四、时钟关系

在Android系统中,播放的音频文件格式:sample_rate=44.1Khz,sample_length=16,channel=2时,那么BCLK应该为

2×44.1Khz×16=32xsample_rate,而实际上我们的MCLK=11.289Mhz,BCLK=MCLK/4,ample_rate=LRCK=BCLK/64=44.1Khz,

BCLK和理论计算的值不 符。但是“如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处

理的有效位数多于发送端,可以自行补足剩余的位”。

时间: 2024-10-21 21:58:05

android下调试声卡驱动之I2S音频通信的相关文章

android下调试声卡驱动之概述

在Android中音频系统使用的是ALSA系统架构.ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持 嵌入式处理器和移动设备中的音频Codec的一套软件体系,在音频设备驱动中ASoC被分为Machine.Platform和Codec三大部分. Codec部分:负责音频解码,这部分代码完全无平台无关(设备原厂提供),它包含了一些音频的控件(Controls),音频接 口,DAMP(动态音频电源管理)的定义和Codec IO功能.为了保证硬件无关性,

android下调试声卡驱动之wm8960介绍二

三.LINPUT输入通道介绍 有关LINPUT的主要配置如下: R32的bit8(LMN1)置1:LINPUT1连接PGA: R00的bit7(LINMUTE)置0:禁止静音: R25的bit5(AINL)置1:PGA使能: R47的bit5(LMIC)置1:Left Boost Mixer使能: R32的bit3(LMIC2B)置1:boost连接Left Boost Mixer. 四.OUTPUT输出通道介绍 有关OUPUT的主要配置如下: R34的bit8(LD2LO)置1:使LDAC连接

(转)<Unity3D>Unity3D在android下调试

转自:http://blog.csdn.net/zuoyamin/article/details/11827309 一.工具准备 1.JDK——由于android是基于Java平台开发的,jdk是必须要安装的.下载地址:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe 2.Android SDK——这个就不多说了,要开发a

android下调试unity3d应用

原地址:http://blog.csdn.net/armoonwei/article/details/7032455 目前貌似不支持断点调试,但可以通过日志打印(logcat)来跟踪. 在android SDK中有个adb工具,使用此工具来跟踪运行的android应用: adb logcat 启动logcat,并将设备上运行的android应用的运行时信息全部打印出来. adb logcat -s Unity 如果只想打印Unity的输出信息,使用此命令. adb logcat -d > log

android下调试3G之USB串口驱动集成配置

一.修改Android内核的编译配置 vi ~/myandroid/kernel_imx/.config文件中,确保下面的的配置项已经被选定. (假如源码在~/myandroid目录下) 1. USB电源管理特性的相关配置项: CONFIG_USB_SUSPEND=y 2. USB串口驱动相关的配置项: CONFIG_USB_SERIAL=y CONFIG_USB_SERIAL_OPTION=y CONFIG_USB_SERIAL_WWAN=y 3. PPP拨号的相关配置项: CONFIG_PP

android下调试3G之Ril库分析

一.基本架构概述 Android RIL (Radio Interface Layer)提供了Telephony服务和Radio硬件之间的抽象层.RIL负责数据的可靠传输.AT命令的发送 以及response(响应)的解析.一般的,应用处理器(AP)通过AT命令集与无线通讯模块(基带/BP)通信.通信的方式又分为主动 请求的request(诸如拨号.发短信--),以及Modem主动上报的例如信号强度.基站信息.来电.来短信等,称之为 unsolicitedresponse(未经请求的响应).系统

android下调试3G之gpio控制3G上电

如果是自己开发的板子,需要用GPIO引脚控制3G模块开机/关机时,下面的文章会对你有所帮助,是以处理器IMX6和中兴MG3732模块为例介绍. 一.引脚连接 处理器的gpio3_GPIO[9]连接3G模块的ON/OFF(29)引脚来控制3G的开机/关机. 二.开关机条件 给ON/OFF引脚连续2500~3500毫秒低电平则开机,给再ON/OFF引脚连续2500~3500毫秒低电平则关机. 三.gpio驱动程序 gpio_3g.c #include<linux/module.h> #includ

android下调试3G之模块设备识别

3G模块设备和Android系统主要通过USB接口进行数据通信.Android系统上的Linux内核需要根据3G模块设备上报的USB设备接口加载USB 驱动,USB驱动正确加载后,3G模块才能正常工作.下面以添加华为模块设备识别为例: 一.修改 .../kernel/drivers/usb/serial/option.c文件 1.在option_probe()函数内添加红色框部分语句,可以支持 selective  suspend 特性. 2.在 option_driver()函数中添加红色框部

android下调试3G之手动拨号

当板子识别3G的USB串口设备时,在/dev下会看到ttyUSB0.ttyUSB1.ttyUSB2.ttyUSB3设备文件,就可以进行调试了.在拨号前还需要了解下模块USB串口的各个功能,比如中兴MG3732:Modem-ttyUSB3.AT-ttyUSB0.Debug-ttyUSB2.VoUSB-ttyUSB1,所以这里ttyUSB3用于拨号口,用的移动2G的卡. 一.在板子的 /etc/ppp下创建chat.peers文件夹,把一下对应的脚本文件放到新建的文件夹里. 1.char/evdo