音频接口是连接麦克风和其他声源与计算机的设备,其在模拟和数字信号之间起到了桥梁连接的作用。音频接口通常与前置麦克风、线路输入和其他一系列的输入设备配合使用。
1 iis总线
iis(integrate interface of sound)即集成音频接口,在上个世纪80年代首先被philips公司用于消费产品的音频设备,并在一个称为lrclk(left/right clock)的信号机制中经过多路转换,将两路音频信号合成单一的数据队列。当lrclk为高时,左声道数据被传输;lrclk为低时,右声道数据被传输(也可以反过来,高低与左右声音的对应可以自定义)。对于多通道系统,在同样的bclk和lrclk条件下,并行执行几个数据队列也是可能的。由于iis、pcm和类似的音频接口不能提供寄存器入口,因此需要独立的控制接口。
iis总线一般具有4根信号线,如图1所示,包括串行数据输入(iisdi)、串行数据输出(iisd0)、左/右声道选择(iislrck)和串行数据时钟(iisclk);产生iislrck和iisclk的是主设备。
2 iis音频驱动实现
音频驱动有3种模式:mdd/pdd模式、wavedev2模式、uam模式。它们相同的地方很明显:接口相同,都是流驱动,透过流接口与上层的waveapi.dll交互。
第1种mdd/pdd模式是最早的模式,也是其他驱动常见的分层模式。如果使用ce提供的mdd(wavem—dd.1ib),会受到一些限制:仅支持一个设备;一个设置仅支持一个流;对循环的支持不大可靠;对流的支持较弱。当然,由于提供了源码,可以自己修改mdd,突破以上这些限制。
第2种wavedev2模式,是因为2000年的smartphone项目产生了新的要求,这些需求需要大改mdd/pdd。比如上面的限制2,根据ce的开发历史,此时waveapi.dll也不支持software mixer,这就是说只能同时允许一个应用在播放。所以根据当时情况,ce的多媒体开发团队设计了wavedev2模式。这是一个单体(不分层)的驱动模式,平台相关的模块都在hwctxt.h和hwetxt.cpp中,此外还加入了midi支持、software mixer支持、s/pdlf接口、gain class接口、forcespeaker接口,等等。因此,开发smartphone或者ppc,这个模式是挺适合的。
第3种uam模式,即统一音频模式(unified audiomodel),在开发wince4.2时,要增加对directsound的支持,而且有一些音频设备是支持硬件mixer的,对此使用uam是很好的选择。
本测试采用mdd/pdd的驱动结构,下面讲述本驱动的关键点。
2.1 dma控制及驱动
通俗地讲,dma(直接内存存取)不需要cpu干扰也不消耗cpu资源,可以把音频数据自动地从系统总线搬到iis总线上;如果音频平均按采样频率44.1 khz、16位字长、左右2声道计算,码流为1.411 mbps,通常在1~3mbps,所以采用dma传输十分必要。
2.2 时钟配置
只要位时钟和采样时钟能匹配好,iis数据格式主从一致,dma配置好,音频就可以工作了。
iis数据格式主要分3种:左对齐、右对齐、iis格式。声音听起来“怪怪地”,就是数据格式不对。频率计算方法如表1所列。
iis主设备时钟频率可以通过采样频率来选择。iis主设备时钟频率是由iis预分频器产生的(iis主设备时钟频率=mclk/预分频器值),因此必须选择合适的预分频器的值和codeclk的采样频率类型(256或者384fs),才能获得合适的iislrc采样频率(iislrck频率=iis主设备时钟频率/codeclk的采样频率类型);串行位采样频率类型(16/32/48fs)可以通过配置每个通道的串行位数和codeclk采样频率类型来完成,它们之间的关系如表2所列。
如晶振频率为16.934 4 mhz,通过384分频为44.1khz(采样频率就是这么来的)。
位时钟频率=采样频率×数据位×2=44.1 khz×16×2=1.411 mhz
对于其他频率的晶振或是来自于总线的时钟频率,就要计算出iisc0n中的分频系数了,以最大限度拟合codeclk。
2.3 codec控制
目前有spi、i2c和l3三种总线控制codec。l3总线(l3mode、l3clock、l3data)都是由通用的i/o端口来控制的。其中l3接口实际上是一种串行接口,它由3根信号线组成,完成处理器和c0dec之间的数据和控制信号交换。udal341ts就是采用l3接口的。
l3data:处理器接口数据线。
l3mode:处理器接口模式信号线。
l3clock:处理器接口时钟信号线。
三种控制方式中以i2c最为常见。其中i2c又分为寄存器方式和i/o模拟方式两种,i/o模拟方式的可移植性好,仅i/0模拟方式的i2c驱动又可分为8位、9位、16位,以及是否带子地址、是否可以连读连写、是否要兼容sccb总线。
2.4 音量控制节点
使用音量调节的地方较多。图2是音量控制节点的一般模型。
①处的增益由播放器的音量控制功能决定,最大是0db。也就是说,最多只能还原出原信号强度。
②和③处的增益由coded ic自身控制,wm8731没有产生增益功能,②处容易引入信号失真,一般置为o db,codec加大音量时主要在③处提高增益。
④、⑤处由功放决定,最大也是o db,便携式功放通常是电流型,靠放大电流去推动扬声器。
①+②+③三处的增益和超过o db时,1 khz的信号就会产生失真,但是大部分音乐的强度都小于1 khz测试方波时的强度,所以这三项的和可以比o db略大,但不能太大,否则会引起信号失真。
a.应用程序通过调用waveoutsetvolume,与手工在控制面板中调节音量等效。
b.调节mediaplay播放器音量时,通过消息跟踪可以判断是否改变了①处的增益,即arm的dsp数字输出增益。
c.调节控制面板里的音量时,会发现codec的功放寄存器值也会改变。猜想是通过iis总线实现控制相关寄存器,因为在iocontrol消息中没有发现通过i2c改写任何寄存器。
通过分析调整音量的方法,有图2所示的5个节点可控制,目的是音量最大失真最小:让①处输出增益最大的情况下,②处pcm volume置为0 db(此处放大最容易引入失真),功放置最大时便能获得不失真最大音量了;如果想再增大音量只能牺牲失真度了,人耳最多接收10%thd(total hamonic distortion,总谐波失真),此种情况下主要靠调节③处的增益。
3 提高音量的有效方法
①在c0dec与功放不可更改的前提下,选择合适的喇叭至关重要(不同的喇叭效果大不一样)。口径大小不等,纸盆有深有浅。在选择喇叭时一般要求功放的额定功率是喇叭额定功率的2倍以上,喇叭的实际最大承受功率是其额定输出功率的2~3倍。喇叭的灵敏度参数很重要,一般是o.1 w时85 db左右,还要看额定功率时的灵敏度。灵敏度用来衡量将电能转换为声音的效率,只讲额定功率不讲额定功率时的灵敏度是没有意义的,额定功率下的低灵敏度无益于电阻丝“发热不出声”。
②提高功放电压,根据p=u·u/r,很小的提升电压,就能获得平方级的功率提升。如由4 v→6v,功率可提高2.25倍。
③改善音腔设计。
④原则上不建议以牺牲保真度来换取音量。如不得已而为之,使用时也要严格控制在thd64μh,将限制带通特性;如果实际感抗20 hz,此时又会引入噪声。所以,选择扬声器时感抗要尽量接近64μh;对于ab类功放,则不作严格要求。
3.2 音腔设计
好的音腔,同样的功率下,音量会更大。
①音腔内要平,不要有高低不平的落差感。
②出音孔是音腔面积的15%~20%(手机中常用的)。
③音腔要尽量深,形成“v”型出音,效果较好。
④前后音腔要隔开,以免前后声音互相干扰。这个原理和喇叭放出的声音比起喇叭装在箱子里面的声音要小很多的原因一致。
⑤前音腔:扬声器前面音腔的大小主要由扬声器上面的泡棉高度所决定,一般来说至少要留o.2 mm的泡棉。前音腔主要对高频声音有所影响,对于spl(soundpressure level,声压级)影响不是太大。
⑥后音腔:要足够大,如果能够达到手机喇叭的等效声容积的2倍的水平最好;更大的后音腔使得扬声器在低频可以得到更好的效果。
⑦前音腔和出音孔要设计合理、恰当:前音腔和出声孔形成一个helmholtz共鸣器,会在某个频率点出现谐振峰。若不是特殊设计,可以把该谐振峰调整到高频端(>10 khz),相应地就要求前腔浅,出音孔面积大;若有特殊设计要求,譬如为了提高响度,可以把谐振峰调整到3.4~6 khz,不过带来的结果将是声音偏单调,而且对音源的要求会苛刻。
⑧密封性:最基本的是要让扬声器的前音腔和后音腔分开,保证良好的密封性(尽可能地保证手机音腔的密封性)。良好的密封性使得扬声器在低频段可以得到更好的效果(可以得到更大、更柔美的声音)。
4 音效测试
由于人耳对音频发声的感官不尽相同,且主观差异较大,曾想写一篇文章,专门介绍音效的评测及控制方法,需控要什么样的仪器,实验方案如何。但由于实验条件和本人能力有限,加上专业性很强,不敢写也怕写不好,只好作罢。以下是wolfson microelectronics plc jason fan所列(仅供参考),同时期待这类文章早日出现。
①基本仪器:稳压电源、内置滤波器的毫伏表(可以测量输出的噪声和输出的功率)、失真仪、声压仪、信号发生器。
②高级仪器:ap音频分析仪、音频全频扫描仪(用来测试扬声器功率)。
③音频系统的评估指标有基本指标和升级指标。
基本指标有:输出功率、信噪比、频率响应、失真度、左右通道分离度、左右声道平衡度。
升级指标(需使用音频分析仪测量)有:thd+n、动态范围、fft。
作音频测试时,一般会使用一些标准的测试信号,如左右声道1 khz o db;左右声道30 hz o db;左右声道100hz 0 db;左右声道10 khz 0 db;左右声道16 khz o db;左声道l khz o db;右声道1 khz 0 db。
上述仪器都会附带使用方法和实验方案。
5 总 结
面对音视频驱动,首先不要有畏惧心理而觉得其高深莫测不敢去接触。掌握基础原理和上述要点后,一般的iis音频codec均能驱动。在本人驱动wmxxx系列(wm9712/wm8978/wm8960/wm8731)、udal314、pcml770、ucbl440、cs4344等芯片的过程中,均得到了有效验证。
在应用cs42l52时,发现背景噪声明显,但耳机音质很好,说明噪声来自于功放;一上电不做任何初始化照样有,进一步说明来自功放,而且不随音量改变而改变。不能正面降噪,后来采取的规避措施是:没有dma传输时关掉声音通道,此问题后来通过新老电路板对比,查出是扬声器的输出端所接lc回路中电感参数不当产生了自激。把电感换成o ω电阻后,噪声基本消除。
在arm中,晶振以12 mhz和16.934 4 mhz最为常见(视频系统中也有27 mhz或28.xxx mhz),系统外围总线是50 mhz,能不能配成精准的44.1 khz或48khz,要视各芯片自身的pll了,这一点要格外重视。如果频率相差太多,也会引入噪声且有语速不正常现象。
物联网低功耗UWB模块,创新微让你真正享受万物互联
CHR-O1湿敏电阻结构图
程序员应该知道简单就是美
什么是任意波形?如何在信号发生器上加载任意波形?
基于网络数字化传输的DVCS控制系统
IIS音频接口的MDD/PDD的驱动测试分析
华为MateX2折叠屏手机正式上架京东开售
基于ARM7的微弱信号采集系统设计与实现
便携式和汽车压缩音频和视频解决方案
边缘计算在工业视觉识别中的应用优势及重要性分析
特斯拉商标含义解析:原来是电动机横截面!
芯闻3分钟:我国5G北斗精准定位技术已成熟,华为、中兴等要为产业发展献策献力
关于贴片晶振选型指南
极目智能ADAS预警方案的过检客车车型
人工智能发展总体趋势研判及应用领域研究
苹果iOS15正式版下载描述文件
基于STM32对DS1302的驱动
WAGO带有操作杆的接插式大功率PCB连接器
5G时代将引领家居家电行业的智能化创新
焊接机器人的送丝方式你知道吗