天天看点

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片

本节书摘来自异步社区《嵌入式linux软硬件开发详解——基于s5pv210处理器》一书中的第2章,第2.5节,作者 刘龙,更多章节内容可以访问云栖社区“异步社区”公众号查看。

smart210开发板具有音频信号的输入输出功能,通过麦克接口,它可以接收音频信号输入;通过一个耳机插孔,可以连接音频信号线输出音频数据,音频信号的处理是通过一片具有iis总线接口的wm8960芯片来完成的。

iis (intel-ic sound)总线一般称为集成电路内部声音总线,写作i2s。iis总线源于sony和philips等公司共同提出的一个串行数字音频总线协议,许多音频编解码器(codec)和微处理器都提供了对iis总线的支持,s5pv210微处理器支持iis总线接口。iis总线只传送音频数据,其他信号(如控制信号)必须另行传送。

通常iis只使用3部分串行总线(不同芯片可能会有所不同),3条线分别如下。

数据线:提供分时复用功能,数据线传送数据时由时钟信号同步控制,而且以字节为单位传送。

字段选择线:为0或1,表示选择左声道或右声道。

时钟信号线,能够产生时钟信号的设备称为主设备,从设备引入时钟信号作为内部时钟使用。

wm8960是欧胜(wolfson)电子推出的一款低功耗、高质量的音频编解码芯片。该芯片内置有麦克风接口、立体声耳机驱动器、立体声24比特模数转换器(adc)和数模转换器(dac)。它主要应用于便携式电脑游戏、dvd播放器、手机多媒体等。wm8960编解码芯片的特点如下。

数模转换器(dac)信噪比为98db,采样率为48khz、电压为3.3v时总谐波失真为−84db。

模数转换器(adc)信噪比为95db,采样率为48khz、电压为3.3v时总谐波失真为−82db。

它具有噪声抑制功能。

该芯片具有麦克风接口。

该芯片可编程自动电平控制/抑制器和噪声门限。

该芯片支持3d立体声增强音效。

该芯片支持立体声d类扬声器驱动器。

该芯片每声道输出到8欧姆btl扬声器的功率为1w。

该芯片具有灵活的开关时钟。

该芯片支持无滤波连接。

片上集成耳机驱动器,16欧姆负载和3.3v供电时,输出功率为40mw。

该芯片支持无电容模式。

该芯片支持低功率消耗。

该芯片支持低电源电压。

wm8960的引脚分布如图2-15所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片

wm8960各个引脚功能如表2-9所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片
《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片
《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片

wm8960与s5pv210硬件连接如图2-16所示。s5pv210具有iis控制单元,通过iis总线接口和i2c总线接口与音频编解码芯片wm8960进行交互,其中iis接口传输声音数据,i2c传输控制信息(如音量调节、静音等),wm8960接收音频数据完成编解码功能。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片

对于声音信号需要对音频数据的采集与播放。采集是对模拟声音信号进行采集、用数字量进行标示,通过adc模数转换器来完成。播放将以数字量的形式保存在缓冲区里面的音频数据恢复为模拟信号输出,通过dac数模转换器来完成。

wm8960同时具备采集和播放所需的adc与dac,录音的时候,对模拟声音信号采样,通过内置adc将模拟信号转换为数字量,经过iis控制器将转化为的数字量存放在音频芯片内存中;播放的时候,从音频芯片内存中读取数字量,经iis控制器将数字量传输给wm8960,通过内置dac将数字量转换为模拟量播放出来。

从图2-15与表2-9所示可以看出,三个引脚与音频信号频率有关。bclk为串行时钟(也叫位时钟),每一个时钟信号传送一位音频信号,因此bclk的频率=声道数×采样频率×采样位数(采样频率即每秒钟取样数),如采样频率fs为44.1khz,采样的位数为16位,声道数两个(左、右两个声道),则bclk的频率=32fs=1411.2khz。

xxxlrc为帧时钟,用于切换左、右声道,如lrc为高电平表示正在传输的是左声道数据,为低电平表示正在传输的是右声道数据,因此xxxlrc的频率应该正好等于采样频率。

mclk为系统时钟,由于iis控制器只负责数字音频信号的传输,而要真正实现音频信号的放与录还需要额外的处理单元,mclk为芯片提供系统同步时钟,即编解码时钟,主要用于音频的a/d、d/a采样,一般mclk为256fs或384fs(fs为采样频率)。通过以上分析我们可以发现,采样频率fs对频率的设置至关重要。fs不是任意设置的,一般基于不同的应用场合和听觉效果,设置不同的值,如8khz、16khz、22.05khz、44.1khz、48khz、96khz等。

在图 2-16 中,cpu的audio_xi2slrck0连接到了daclrc,hp_detect连接到了adclrc。adclrc和daclrc分别是输入输出的左右声道时钟引脚。当采样的时候,首先将采样数据传输到左声道缓冲区,然后将下一个采样数据传输到右声道缓冲区,然后又传输到左声道缓冲区,依次往复;当播放的时候,首先将左声道数据提取出来播放,然后是右声道数据,之后又是左声道数据,依次往复。

audio_xi2ssdo0_0连接到了dacdat数模转换数字音频信号输入引脚,audio_xi2ssdi0连接到了adcdat引脚。dacdat从内存里面取出的数据经iis控制器传输给编解码芯片,数模转换后播放。采样的模拟信号转换为数字信号之后,从adcdat输出,经iis控制器传递给内存。采样速率及串行的音频数据的输入输出,则由连接至mclk与bclk的s5pv210的audio_xi2scdclk0引脚和audio_xi2ssclk0引脚来控制。wm8960的sclk和sdin引脚接至s5pv210的iic总线接口第一个通道,通过s5pv210实现对wm8960的配置。

继续阅读