I2S总线接口功能及应用开发
内容结构
I2S总线概述
I2S总线规范
I2S总线结构配置
S3C44B0X I2S总线概述
S3C44B0X I2S总线特性
S3C44B0X I2S总线结构
S3C44B0X I2S接口工作模式
S3C44B0X I2S音频数据格式
S3C44B0X I2S接口特殊功能寄存器
嵌入式音频系统应用
I2S总线概述
音响数据的采集、处理和传输是多媒体技术的重要
组成部分。众多的数字音频系统已经进入消费市场,例
如数字音频录音带、数字声音处理器。对于设备和生产
厂家来说,标准化的信息传输结构可以提高系统的适应
性。I2S(Inter—IC Sound)总线是飞利浦公司为数字音频
设备之间的音频数据传输而制定的一种总线标准,该总
线专责于音频设备之间的数据传输,广泛应用于各种多
媒体系统。
I2S总线规范
I2S总线拥有三条数据信号线:
SCK: (continuous serial clock) 串行时钟
对应数字音频的每一位数据,SCK都有1个脉冲。SCK的
频率=2×采样频率×采样位数。
WS: (word select) 字段(声道)选择
用于切换左右声道的数据。WS的频率=采样频率。
SD: (serial data) 串行数据
用二进制补码表示的音频数据。
对于系统而言,产生SCK和WS的信号端就是主导装置,用
MASTER表示,简单系统示意图如图1所示:
信
号
线
I2S总线规范
发送端产生SCK和WS 接收端产生SCK和WS
外置控制器产生SCK和WS,作为主导装置,
发送端成为在外部时钟下的从属装置
图1、简单系统配置
信
号
线
(
续
)
I2S总线规范
串行数据(SD)
I2S格式的信号无论有多少位有效数据,数据的最
高位总是被最先传输(在WS变化(也就是一帧开始)后的
第2个SCK脉冲处),因此最高位拥有固定的位置,而
最低位的位置则是依赖于数据的有效位数。也就使得
接收端与发送端的有效位数可以不同。如果接收端能
处理的有效位数少于发送端,可以放弃数据帧中多余
的低位数据;如果接收端能处理的有效位数多于发送
端,可以自行补足剩余的位(常补足为零)。这种同步机
制使得数字音频设备的互连更加方便,而且不会造成
数据错位。为了保证数字音频信号的正确传输,发送
端和接收端应该采用相同的数据格式和长度。当然,
对I2S格式来说数据长度可以不同。
信
号
线
(
续
)
I2S总线规范
字段(声道)选择(WS)
命令选择线表明了正在被传输的声道。
WS为“1”表示正在传输的是左声道的数据。
WS为“0”表示正在传输的是右声道的数据。
WS可以在串行时钟的上升沿或者下降沿发生改
变,并且WS信号不需要一定是对称的。在从属装置端
,WS在时钟信号的上升沿发生改变。WS总是在最高
位传输前的一个时钟周期发生改变,这样可以使从属
装置得到与被传输的串行数据同步的时间,并且使接
收端存储当前的命令以及为下次的命令清除空间。
基本的接口时序图可以参看图2所示:
信
号
线
(
续
)
I2S总线规范
图2 典型的I2S信号
最高位
信
号
线
(
续
)
I2S总线规范
电
压
规
范
输出电压:
VL <
VH>
输入电压
VIL=
VIH=
注:目前使用的TTL电平标准,随着其他IC(LSI)的
流行,其他电平也会支持。
I2S总线规范
延
迟
特
性
在I2s总线中,任何设备都可以通过提供必需的时
钟信号成为系统的主导装置,而从属装置通过外部时
钟信号来得到它的内部时钟信号,这就意味着必须重
视主导装置和数据以及命令选择信号之间的传播延
迟,总的延迟主要由两部分组成:
– 外部时钟和从属装置的内部时钟之间的延迟
– 内部时钟和数据信号以及命令选择信号之间的延
迟
对于数据和命令信号的输入,外部时钟和内部时
的延迟不占据主导的地位,它只是延长了有效的建立
时间(set—up time)。延迟的主要部分是发送端的传输
延迟和设置接收端所需的时间。见图3和图4:
I2S总线规范
延
迟
特
性
(
续
)
图3 timing for I2S Transmitter
图4 timing for I2S Receiver
I2S总线规范
T是时钟周期,Tr是最小允许时钟周期,T>Tr这样发送端和接收端才
能满足数据传输速率的要求。
对于所有的数据速率,发送端和接收端均发出一个具有固定的传号
空号比(mark—space ratio)的时钟信号,所以t LC和tHC是由T所定义的。
t LC和tHC必须大于,这样使信号在从属装置端可以被检测到。
延迟(tdtr)和最快的传输速度(由Ttr定义)是相关的,快的发送端信号在
慢的时钟上升沿可能导致tdtr不能超过tRC而使thtr为零或者负。只有
tRC不大于tRCmax的时候(tRCmax>:),发送端才能保证thtr大于等于0。
为了允许数据在下降沿被记录,时钟信号上升沿及T相关的时间延迟
应该给予接收端充分的建立时间(set-up time)。
数据建立时间(set-up time)和保持时间(holdtime)不能小于指定接收端
的建立时间和保持时间。
延
迟
特
性
(
续
)
I2S总线结构配置
发
送
端
图5 发送端硬件配置
I2S总线结构配置
发
送
端
(
续
)
随着WS信号的改变,导出一个WSP脉冲信号,进入
并行移位寄存器,从而输出数据被激活。串行数据的默认
输入是0,因此所有位于最低位(LSB)后的数据将被设置为0
I2S总线结构配置
接
收
端
图6 接收端硬件配置
I2S总线结构配置
接
收
端
(
续
)
随着第一个WS信号的改变,WSP在SCK信号的下降沿
重设计数器。在“1 out of n”译码器对计数器数值进行译码
后,第一个串行的数据(MSB)在SCK时钟信号的上升沿被
存放进入B1,随着计数器的增长,接下来的数据被依次存
放进入B2到Bn中。在下一个WS信号改变的时候,数据根
据WSP脉冲的变化被存放进入左(声道)锁存器或者右(声道)
锁存器,并且将B2一Bn的数据清除以及计数器重设,如果
有冗余的数据则最低位之后的数据将被忽略。注意:译码
器和计数器(虚线内的部分)可以被一个n比特移位寄存器所
代替。
S3C44B0X I2S总线概述
S3C44B0X的IIS总线接口可作为一个编码解码接口与
外部8/16位的立体声音频解码电路(CODEC IC)相连,从
而实现微唱片和便携式应用。它支持IIS数据格式和MSB-
Justified 数据格式。IIS总线接口为先进先出队列FIFO的访
问提供DMA传输模式来取代中断模式,可同时发送和接收
数据,也可只发送或接收数据。
S3C44B0X I2S总线特性
IIS、MSB-Justified格式兼容;
每通道 8/16 位数据格式;
每通道有16 f s、32 f s、48 f s (fs为采样频率)的串行时钟;
具有256 f s和384 f s的主时钟;
具有为主时钟和编码解码时钟分频的可编程分频器;
支持32(2×16)字节发送和接收(FIFO);
具有正常和DMA两种传输模式。
S3C44B0X I2S总线结构
图7 IIS总线框图
各部分功能如下:
S3C44B0X I2S总线结构
总线接口、寄存器组、和状态机(BRFC):总线接口逻辑和FIFO的
访问由状态机控制;
两个三位的预分频器(IPSR):一个被用作IIS总线接口的主时钟发
生器,另一个被用作外部编码解码的时钟发生器;
16字节的FIFOs(TxFIFO、RxFIFO):在发送数据的传输过程中,
数据被写入TxFIFO,在接收数据的传输过程中,数据从RxFIFO被读出;
主IISCLK发生器(SCLKG):在主模式中,串行位时钟由主时钟
(指IIS总线接口的主时钟)产生;
通道发生器和状态机(CHNC):IISCLK和IISLRCK由通道状态机
产生和控制;
16位移位寄存器(SFTR):在发送数据模式中,并行数据被移成串
行数据输出,在接收数据模式中,串行数据被移成并行数据输入;
S3C44B0X I2S接口工作模式
单独发送或接收模式
a、正常传输模式
FIFO队列的就绪标志位决定了CPU读或写队列的时间。发送
队列非空,队列发送数据准备就绪,标志位置1;发送队列为
空,标志位置0。接收队列未满,标志位置1,指示队列可接收数
据;接收队列满,标志位置0。当CPU访问发送或接收队列
(FIFOs)时,串行数据能够被发送或接收。
b、DMA传输模式
发送或接收队列的访问由DMA控制器来完成。在发送或接收
模式中,DMA服务请求由队列的就绪标志位自动给出。
发送和接收同时模式
IIS总线接口能够同时发送和接收数据。一个通道用正常传输模
式,另一通道用DMA传输模式。
S3C44B0X I2S音频数据格式
IIS-BUS格式
MSB-Justified格式
图8 IIS总线和MSB-Justified格式数据接口格式
两
种
格
式
S3C44B0X I2S音频数据格式
表1 编解码时钟
表2 可用的串行位时钟频率
采
样
频
率
和
主
时
钟
1
、
IIS
控
制
寄
存
器
IISC
O
N
位 位名称 描述 初始状态
[ 8 ] Left/Right
Channel Index
(只读) 0 =左通道
1 =右通道
1
[ 7 ] Transmit FIFO
Ready Flag
(只读) 0 =发送FIFO没有准备好(空)
1 =发送FIFO准备好(不空)
0
[ 6 ] Receive FIFO
Ready Flag
(只读) 0 =接收FIFO没有准备好(空)
1 =接收FIFO准备好(不空)
0
[ 5 ] Transmit DMA service Request Enable 0 =发送DMA请求禁止
1 =发送DMA请求使能
0
[ 4 ] Receive DMA service Request Enable 0 =接收DMA请求禁止
1 =接收DMA请求使能
0
[ 3 ] Transmit Channel
Idle Command
在发送空闲状态,IISLRCK不激活(暂停发送),该位仅在
IIS是Master时有效
0 = IISLRCK产生
1 = IISLRCK不产生
0
[ 2 ] Transmit Channel
Idle Command
在接收空闲状态,IISLRCLK不激活(暂停接收),该位仅在
IIS是Master时有效
0 = IISLRCK产生
1 = IISLRCK不产生
0
[ 1 ] IIS Prescaler Enable 0 =预分频器禁止 1 =使能预分频器 0
[ 0 ] IIS Interface Enable 0 = IIS禁止(停止) 1 = IIS使能(启动) 0
S3C44B0X I2S接口特殊功能寄存器
IISCON 地址:0x01D18000(Li/HW,Li/W,Bi/W) R/W
0x01D18002(Bi/HW)
表3 IIS控制寄存器IISCON
2
、
IIS
模
式
寄
存
器
IISM
O
D
位 位名称 描述 初始状态
[ 8 ] Master/Slave
Mode Select
0=主模式(IISLRCK和IISCLK输出)
1 =从模式(IISLRCK和IISCLK输入)
0
[ 7:6 ] Transmit/ Receive
Mode Select
00 =不传输 01 =接收模式
10 =发送模式 11 =发送/接收模式
00
[ 5 ] Active Level of
Left/Right Channel
0 =左通道为低(右通道为高)
1 =左通道为高(右通道为低)
0
[ 4 ] Serial Interface Format 0 = IIS格式
1 = MSB-Justified
0
[ 3 ] Serial Data Bit
Per Channel
0 = 8位
1 = 16位
0
[ 2 ] Master Clock (CODECLK)
Frequency Select
0=256 fs 1=384 fs (fs:采样频率) 0
[ 1:0 ] Transmit Channel
Idle Command
00=16 fs 01=32 fs
10=48 fs 11=N/A
00
S3C44B0X I2S接口特殊功能寄存器
IISMOD 地址:0x01D18004(Li/HW,Li/W,Bi/W) R/W
0x01D18006(Bi/HW)
表4 IIS模式寄存器IISMOD
S3C44B0X I2S接口特殊功能寄存器
3
、
IIS
比
例
因
子
寄
存
器
IISPSR
位 位名称 描述 初始状态
[ 7 : 4 ] Prescaler
Value A
预分频器A的比例因子
clock_prescaler_A=MCLK/<division factor>
0x0
[ 3 : 0] Prescaler
Value B
预分频器B的比例因子
clock_prescaler_B=MCLK/<division factor>
0x0
IISPSR [ 3:0 ]/[ 7:4 ] 比例因子 IISPSR [ 3:0 ]/[ 7:4 ] 比例因子
0000B 2 1000B 1
0001B 4 1001B -
0010B 6 1010B 3*
0011B 8 1011B -
0100B 10 1100B 5*
0101B 12 1101B -
0110B 14 1110B 7*
0111B 16 1111B -
注:* 如果Prescaler的值位3、5、7,则占空比将不是50%, 此种情况下,高电平H周期为。
IISPSR 地址:0x01D18008(Li/HW,Li/W,Bi/W) R/W
0x01D1800A(Bi/HW) 0x001D1800B(Bi/B)
表5 IIS比例因子寄存器IISPSR
4
、
IIS
队
列
控
制
寄
存
器
IISFC
O
N
S3C44B0X I2S接口特殊功能寄存器
位 位名称 描述 初始状态
[ 11] 发送FIFO存取模式虚字选择 0=正常存取模式
1 =DMA存取模式
0
[ 10 ] 接收FIFO存取模式选择 0=正常接收模式
1=DMA接收模式
0
[ 9 ] 发送FIFO使能位 0 =FIFO禁止
1 =FIFO使能
0
[ 8 ] 接收FIFO使能位 0 = FIFO禁止
1 = FIFO使能
0
[ 7:4 ] 发送FIFO数据计数值 数据计数值=0~8(只读) 000
[ 3:0 ] 接收FIFO数据技术值 数据计数值=0~8(只读) 000
IISFCON 地址:0x01D1800C(Li/HW,Li/W,Bi/W) R/W
0x01D1800E(Bi/HW)
表6 IIS队列控制寄存器 IISFCON
5
、
IIS
队
列
寄
存
器
IISFIF
S3C44B0X I2S接口特殊功能寄存器
位 位名称 描述 初始状态
[ 15:0 ] FENTRY IIS的发送/接收数据 0x0
IISFIF 地址:0x01D18010(Li/HW) R/W
0x01D18012(Bi/HW)
表7 IIS队列寄存器 IISFIF
嵌入式音频系统应用
图9 S3C2410与UDA1314硬件电路连接
硬
件
链
接
图10 UDA1341内部结构
设计硬件电路时选用第二组输入音频信号?
硬
件
链
接
嵌入式音频系统应用
音
频
驱
动
实
现
整个音频驱动的实现分为4个部分:
初始化、打开设备
主要完成对UDA1341音量、采样频率、L3接口等的初始化,
并且注册设备。
DSP驱动实现
DSP驱动实现了音频数据的传输即播放和录音的数据传输。
同时提供ioctl对UDA1341中的DAC和ADC采样率进行控制。
MIXER 驱动实现
MIXER驱动只控制混音效果,并不执行读写操作.所以
MIXER的文件操作结构只实现了1个ioctl调用.提供给上层设置
CODEC的混音效果。
设备的释放
设备的卸载由注销函数close()来完成。。注销函数使用注册
时得到的设备号,同时释放驱动程序使用的各种系统资源.如
DMA和缓冲区等。
嵌入式音频系统应用
嵌入式音频系统应用
应
用
程
序
编
写
的
注
意
事
项
(1)和所有应用程序一样,在程序编写中不要卖弄编程技巧,清晰的
结构有助于提高程序的稳定性和可维护性。
(2)打开音频设备文件时尽可能使用O_RDONLY或者O_WRONLY标
识位,有助于提高程序的速度,只有在应用程序既能进行录音操作
也进行回放操作时才能使用O_RDWR标识位。
(3)嵌入式芯片中对不同数据结构分配的字节数都不一样,进行音频
数据处理时要小心数据截断。要注意音频数据使用的低位优先格式
还是高位优先格式。
(4)一般而言,音频设备文件打开时已经初始化一些音频的属性,如
果要对这些参数进行修改,应该对混频器设备文件进行操作,这有
助于提高程序的设备无关性。
(5)进行各种系统调用(设备打开、参数设定或设备读写等)时要检查
返回值,因为对硬件设备的操作有可能失败。
嵌入式音频系统应用
应
用
程
序
编
写
的
注
意
事
项
(
续
)
(6)对设备参数进行设定时,要注意查看音频设备是否支持设定的参
数,比如高档的音频解码芯片就不支持8位的采样宽度。
(7) ioctl系统调用并不对输入的参数进行严格检查,所以使用ioctl前
最好检查输入参数是否合法。
(8)设置单工和双工时要注意,有时候芯片在单工方式时工作良好,
但在同一个频率、双工方式下可能无法正常工作,这是需要降低频
率。
(9)编写程序时,尽可能地考虑兼容件,比如编写的应用程序针对的
是16位的音频数据,但也应该考虑以后程序移植到32位音频系统上
的可能性。
(10)读取音频数据时要读取所有的采样信息,比如使用16位的双工
采样,每次采样会产生16×2=32bit=4B的采样信息,读取数据的
时候应该 一次性将4B的数据全部读入,否则会产生噪音或者使一
个声道失效。
嵌入式音频系统应用
(11)不使用音频设备时应该及时关闭,这有助于设备的共享;交互
式程序中,应该在用户需要录音或者回故的时候打开设备文件;在
一些特殊情况下也可以通过打开设各文件防止其他应用程序对设备
的访问。
(12)对混频器的操作不要和其他功能放到同一个功能模块中,也就
是说对混频器的操作应该使用独立的函数模块;这主要是因为各种
音频芯片的混频器区别很大,有的混频器程序可能只能在一种硬件
上使用,如果将混频器模块和其他模块放在一起可能会导致程序异
常终止。
应
用
程
序
编
写
的
注
意
事
项
(
续
)