登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

用OKI录放芯片ML2308实现的立体声录放平台

作者:chen0321 栏目:数字广电
用OKI录放芯片ML2308实现的立体声录放平台
    刚刚搭完了一个录音/播放芯片的电路,心情久久难以平静,潜水这么久,决定上来冒个泡,讲讲这个过程吧。首先声明,偶是菜鸟,若有什么说的不对的地方,还是要请各位大侠指出滴。
故事是这样子的……

选择录音芯片
    老大说要找块录音芯片,用在我们的新款录音笔上。于是我就开始google了。市面上的录放芯片看起来不少,音质不错的品牌有ISD和日本OKI。因为录音笔对音质要求较高,就决定从这两家来选。再细细比较,ISD的录放芯片都是内置存储器,不适合长时间录放(谁家的录音笔不得录两三个小时的阿),而且每款芯片采样频率都是固定的,作成产品后不能灵活对应不同音质要求的录音。OKI的是存储器是外置,可以根据录音时间长短自己决定合适大小的存储器,比较灵活。采样频率也可以更改,录音时可以根据实际情况决定选择高音质还是长时间播放。采样频率4k到32k赫兹可选,外加立体声录放。一切都听起来很不错的样子,决定就选它了吧。
    要来了样片,手头正好有块集成了FLASH的arm开发板(虽然只有8M,先凑合着录录等调通了再说吧,赫赫),再加上datasheet上现成的ML2308参考电路,所以硬件的工作比较轻松。

硬件搭建
1.ML2308外围电路
依葫芦画瓢,按着datasheet的参考电路搭好,用了立体声的耳机输出。嘿嘿,既然是立体声录音么输出当然也要立体声啦。
2. 与CPU的连接
   考虑到开发板上现成的FLASH是8bit的数据口,ML2308也采用了并联的方式进行命令和数据传输(当然,ML2308也支持4线的I2S口,如果MCU支持的话也是个不错的选择)。和CPU的IO口连接的有:数据线D7-D0; 读写操作控制信号Read, Write; 命令数据选择信号;左右声道切换信号;片选信号;ML2308状态信号CBUSY,buffer的FUL,MID,EMP信号(后来的调试证明,这3个状态位并不全部需要送给CPU)。

板子搭好,动手调试
   首先用CPU对用到的IO口赋值,检查下各个接口的连接情况。一切ok后,开始跑程序。由于缺乏使用FLASH的经验,所以最先调试的是CPU对FLASH的读写。搜了FLASH的datasheet,按着上面的读写命令一个个送过去,折腾了n久,总算成功。
   接下来就是ML2308和CPU的通讯了。ML2308和CPU之间的传输包含了命令和音频数据的交换。而命令也分为了8位和16位两种。按照datasheet给出的波形图,用CPU的IO模拟各个输入,注意一下满足保持建立时间,很容易就实现了8位命令的输入(用示波器观察CBUSY口,当命令送进去之后,CBUSY拉低,表明ML2308在执行该命令)。送16位命令的话,需要分两次输入,一开始由于两条命令的等待时间不够,导致第二条命令在ML2308尚未空闲(CBUSY仍为低)的时候被送进去,使得命令不能被正确执行。所以如果用CBUSY信号来做等待判定的话,需先等到CBUSY变低,再等待它变高之后,才可以送下一条命令。
仿照送命令的方法,同样可以实现对ML2308音频数据的读写,只需要注意一下命令/数据,左/右声道的切换。
    至此,ML2308的基本操作(包括与CPU间的指令、音频数据的交换)及CPU与FLASH之间的数据通讯均已实现。
最后要实现的是ML2308的录音和播放功能了。先根据datasheet提供的单声道录音操作流程,用buffer的MID信号作判定,当MID信号为高,也就是buffer内存储的数据多于其一半空间时,连续从buffer中读取占buffer一半空间的数据,并存入FLASH中。类似的,播放时,当buffer的MID信号为低,连续送占buffer一半空间的数据给ML2308。单通道录放的功能很顺利就得以实现了,录音的质量很不错,真不辜负我花的时间涅!
    于是模仿单声道的流程,进行双声道的录音。当右声道的buffer半满之后,读取一组左右声道的数据,连续写入FLASH中,并循环操作16次(将buffer一半的数据存入FLASH中)。但是按照这个流程发现,右声道的数据都没有写入到FLASH中。没辙,单步大法!神奇的是,单步进行的时候,发现有数据从右buffer被独处,也能被写进FLASH。狂晕一阵之后,仔细查看FLASH的datasheet,发现这块年代久远的FLASH在每个字的写入至少要16个s,狂汗啊,所以连续两次写入(先左后右)的第二次都不成功,而单步的话这个时间就肯定可以满足了。只得修改流程,谁叫俺垂涎这块有现成FLASH的板子咧。找到了问题,这个也是很不难解决滴。流程改成读左声道,写入FLASH,然后再读右声道,再写入FLASH。再试着录一次,赫赫,就有声音了。不过涅,这个声音怎么这么差呢?赫赫,严重的丢帧出现了。FLASHFLASH, 又是你老人家惹的祸吧。相比于单声道,每次写入FLASH的数据要多出一倍,正是多出的这些个时间内,ML2308的buffer满了,大量数据没有被及时的读出来存入FLASH中,回放的时候就惨不忍听了。只好再改,唉,偷懒贪便宜,却被这块FLASH整得恁惨。既然等到半满再读来不及,那就非空就去读,这样即使还有丢帧的话,比之前肯定要好不少。就这样,把流程改为等到右buffer非空(EMP为低), 就去读并存一组数据,试下来果然效果好了很多。

小结
   哈哈,终于把这个dd给玩通了,接下来就是享受的时间了,于是左右麦克的立体声录音,左右line-in的立体声录音,左右声道的混和输出,左右声道的立体声输出一一玩了个遍。总结下来,就我手头这块板子,受限于FLASH的读写速率,采样频率过高的话,音质由于丢帧严重也就一般。16bitPCM,16k采样频率的立体声录音效果最佳;8bit 率PCM 16k的效果次之;而如果对音质要求不高,4bit ADPCM,4k采样频率则是最佳选择。当然,如果FLASH存储空间足够,并且读写速度跟得上的话(窃以为现在的FLASH的读写速度完全可以满足,毕竟我用的这个宝贝还是上世纪的产物),高采样率的16bit PCM格式才能把ML2308的能力发挥到极致吧。
    回顾整个设计流程,一旦实现了FLASH的读写操作,ML2308录音播放功能还是比较容易实现的,毕竟它与CPU的通讯是非常容易滴。而本设计由于受制于FLASH的读写速率,最大的力气花在了优化录音的流程上。如果FLASH读写速率得到提升,按照datasheet的流程,立体声录放均以MID位作为判定,立体声的录放还是很容易实现的。这个片子用作录音笔里面录音的质量是可以的了。而且外置FLASH存储,可以灵活推出多系列不同容量的产品,正适合产品线的优化,赫赫。下次公司里其他系列的录音产品录音模块什么的,也都可以拿过来试试了。

2楼: >>参与讨论
aile

作者:chen0321:

你好!

请与我(aile)联系:aaaile@163.com

谢谢1

参与讨论
昵称:
讨论内容:
 
 
相关帖子
求U盘读写方案!
用T112,有干扰条纹如何调试解决
有哪位大虾帮忙?急!
huawei
数码相框解决方案分析报告
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号