MP3播放器制作心历——VS1003调试

发布者:凌晨2点369最新更新时间:2012-11-06 来源: 21ic 关键字:MP3  播放器  VS1003调试 手机看文章 扫描二维码
随时随地手机看文章
在调试vs1003之前就已经翻阅过vs1003的datasheet(数据手册);基本上懂了其通讯原理,和一些基本设置。

在调试的时候只是拿网上找的代码,做了相应的修改(接口改为我自己的,功能改为我自己想要的功能),这样只是为了快速测试我的vs1003模块能不能用,当然这首先是要你能理解其代码,要不然是第一次调试你也不知道是程序有错还是硬件有错。在确定程序没错之后,我就可以确定如果没有效果,那肯定是我的解码模块不行。测试通过之后我就可以放心的使用我自己的解码模块。接下来的程序我就可以根据自己想要的慢慢来写。

第一次写程序进去就听到耳机里输出了很高的鸣叫声,这是因为我把正弦测试(vs1003自带的一种测试,这样就能很快确定你的vs1003是否能工作)频率调的很高 所以声音很尖,被吓了一次。第二次就把它改小了一点,嘟的一声,呵呵相当激动,这说明我的vs1003可以用(s1003非常脆弱 很容易坏 又贵又不好买)

正弦测试成功之后我就开始想给vs1003发送MP3音频数据 看能不能解码放出声音来

我最初的想法是通过winhex软件打开查看MP3代码然后拷贝出来作为一个数组发给vs1003。这个数据要储存在我的单片机的程序储存区里,还好我的单片机程序储存区够大有64K。这样多的MP3代码也只能够听到一点点声音,效果肯定是无法体会的道。果然 ,在耳机里只听到吱~的一声就没了 根本没用

之后我就想把sd卡加进来,让MCU一边从sd里读取MP3数据,再一边发送到vs1003里边去解码,这样就可以一直把一首MP3的数据全部发送到vs1003进行解码。于是我先拷贝了一个码率比较低的MP3,因为单片机的速度毕竟很慢 从sd卡里读取数据然后又要发送给vs1003解码 先找一个码率比较低的MP3做测试这是明智的选择。

开始组合程序,编写相应的主函数,通电测试。没有任何反应,串口调试(如果读写sd正常可以从串口接收到sd'卡的第0扇区数据(逻辑扇区)这是我程序特意设定的,为了方便看出sd是否在工作)也接收不到任何数据 ,确定sd卡未启用。我以为sd卡的读写又出问题了 ,拿之前做好的sd测试程序重新测试,也没有数据输出,很晕。

不经意间我发现当我拔掉解码模块sd卡读写正常,找到这一重要点之后,我开始分析问题。

因为我的sd卡和vs1003与MCU的通讯方式都是spi。而我的MCU只有一个硬件spi,所以都统一连接到一起了 只是通过不同的片选让它们轮流使用spi。可惜的是这样不行。经过多次试验,猜想,也在网上寻求答案(未果)。最终我自己搞明白了,是应为我用的MCU为5V器件,为了能跟vs1003、sd卡正常通讯 ,我把MCU的spi口设置成为开漏形式,让后加3.3v的上拉。这样我的单片机spi口最大电压也只能是3.3v了。不过同时开漏形式让它的驱动能力变得很弱,无法同时接两个spi通讯模块~~~

于是我把sd卡的接口换到P0口采用软件模拟spi读取数据,这样一来,呵呵串口可以看到接收到数据了随之耳机里传来了久违的音乐,不过声音很乱,就像快进一样。还是很兴奋 ,毕竟是能出声音了。

为什么声音会乱掉,这个时候开始找问题,一直花了我两天的时间,vs1003的datasheet看了一遍又一遍 ,敢肯定我的程序绝对是没错。那就是硬件了。

分析它的原理开始查问题,看看是那步错了。

vs1003解码MP3数据,你只要把正确的MP3数据传送给它,它就能自动识别你的MP3是多少码率的,然后通过一定的解码速率进行解码。这个时候就有疑问了,既然解码的速率确定了,为了能流畅的播放出音乐来,你给vs1003发送MP3数据的速率必须跟它解码的速率一样,那怎么去保证这两个速度一样呢?如果送给vs1003的数据过快,那我们可以加延时让它一样,那这时候又出问题了,难道每一首不同码率的歌都要去加个延时吗(这里是按发送数据永远比解码速率快的情况来分析),这样肯定是不合理的。不用担心,vs1003为用户准备了0.5k的数据缓冲区做为音频数据的缓冲,这就好像一个漏斗一样,0.5k空间就像漏斗的容量,你只要保证漏斗里边始终有东西,那么漏斗底下就始终有东西流出,保持连续。你给漏斗加料的速度无所谓,只要你别让漏斗里边为空就行。vs1003是一样的为了解码正常,播放流畅,你只要保证数据缓冲区里始终有数据作为待解码对象,这样就可以放出流畅的音乐来。这里又有问题了,我们怎么确定数据缓冲区里到低有没有数据,或者是还有多少,怎么控制发送数据。vs1003也帮你考虑到这一点了,所以他专门设定了一个中断脚DREQ,当DREQ变高时,外部可以至少为vs1003发送 32字节的数据(这是SDI数据,还有一种SCI数据,这里不说了),为了保证播放流畅。当vs1003收到32字节的数据之后他的DREQ脚变为低,此时可以暂时不往里边发送数据,如果数据缓冲区内少于32字节的有效数据,那么vs1003将DREQ置为高电平,此时需要往里边发送数据(对于DREQ脚的变化,网上有异议,这是我个人的理解)。这里你会发现,我之前不是说数据缓冲区是0.5k,为什么每次才32个数据就可以了。vs1003只是设置了一个32byte为标准,当然 你可以当在检测到DREQ脚变高时,往里边一次性发送少于(这是必须的)0.5k的字节,然后再去检测DREQ的状态,当再次变高时 你就可以再往里边发送那么多数据,是可以的。32byte只是一个最低标准。个人理解~~

按这个寻到问题的根源~~~我的DREQ没有在工作,屏蔽了他 播放跟本没变,所以说,我的MCU无法判断vs1003的数据区是否满了 是否需要新数据,这里只是一股脑的往vs1003里灌数据

所以导致我的音乐播放不正常,测量初始化之后的vs1003的DREQ脚,发现竟然出现1.8v,不高不低,处于模糊状态。

确定DREQ脚不能工作,网上寻求答案,对我的情况都没用。之后又翻到pcb图上去,发现一个很重要的地方未连接,就是当用spi模式给vs1003发送数据的时候,其串口RX必须接到IOVDD.

还有一个test脚要接到IOVDD。到此时已经是11点54分,马上要熄灯了。

终于找到一个可行性的问题。

今天一大早,我把那条线补上去,初始化vs1003一测DREQ脚为3.3(高)。很是激动,DREQ可以工作了,那么音乐播放就可以了,哈哈。下载程序测试。

 一切OK!!!!

关键字:MP3  播放器  VS1003调试 引用地址:MP3播放器制作心历——VS1003调试

上一篇:关于Keil C51中using关键字的使用心得
下一篇:数码管滚动显示数字程序

推荐阅读最新更新时间:2024-03-16 13:12

基于ARM9的媒体播放器的设计方案
1 引言   计算机多媒体技术和网络技术飞速发展使得基于流媒体的多媒体应用也被运用在多种领域,特别是网络可视电话、远程监控、视频点播领域。伴随着计算机多媒体压缩技术的成熟和网络传输技术的发展,开发实时可靠、多功能、数字化、操作简单的基于计算机网络通讯技术和多媒体应用的网络化流媒体播放器已成为计算机、通信、消费电子产品领域(3C 产业-Computer、Communication、Consumer Electronics)技术发展的主要方向之一。   2 系统硬件设计   本文使用TQ2440 开发板作为硬件平台。   S3C2440AL 是控制核心,负责控制所有辅助设备。存储器采用SDRAM 和Flash 两种类型,能满足
[模拟电子]
基于ARM9的媒体<font color='red'>播放器</font>的设计方案
基于SMP86 54芯片的MKV播放器设计
0 引言   MKV是一种新的多媒体封装格式,支持多种视频和音频编码格式,能够将多达16路不同格式的音频和不同语言的字幕流封装到一个文件中,在高清影片中得到了广泛的应用,越来越多的视频和影片采用MKV作为其封装格式。能否支持MKV封装格式是高清播放机性能的一个重要指标。本文提出了一种基于SMP86 54平台的MKV播放器设计与实现方案,并针对嵌入式系统和高清媒体的特点做了进一步优化,能够提供对MKV文件的流畅播放。   1 MKV封装格式   MKV全称为Matroska Video,是一种新的多媒体封装格式。多媒体封装格式也称多媒体容器(Multimedia Container),它不同于H264、MPEG-2、MPEG-
[模拟电子]
基于SMP86 54芯片的MKV<font color='red'>播放器</font>设计
嵌入式AU1200无线车载终端播放器设计实现
0 引 言  人民生活水平的提高,公车、轿车等交通工具作为人们的代步工具,越来越普及,汽车的智能化、个性化需求越来越高,尤其是客车、公交汽车中娱乐以及信息服务也越来越受到重视,集成媒体播放,硬盘录像,无线传输等多项功能于一体的车载终端产品,将成为未来汽车电子发展的必然趋势。  1 无线车载终端系统简介  无线车载终端系统采用AU1200的嵌入式CPU内核,配以车载硬盘、无线网卡、摄像头、用户控制键盘、显示器等部分组成。在车站采用服务器管理系统,可通过车站的Wi-Fi网络实现车载终端系统和车站服务器之间的无线数据传输,车辆进站时,服务器会自动对车载终端系统进行检查和记录,并进行相应更新,其包括节目、广告的下载和录像图片或视
[嵌入式]
基于EPG3231和闪存的声音播放器设计方案
提出一种在单片机系统中比较简单地使用大容量NAND Flash存储器的方法。与一般方法相比,编写应用程序的程序员不需要掌握计算机文件系统的规范,只要按照NAND Flash的读、写、擦除等时序对其进行操作,把NANDFlash当成NOR Flash或SRAM来对待,这样存储器的物理地址对程序员而言是透明的,只需要在遇到坏块(BAD BLOCK)时跳过该块就可以了。该方法降低了使用NAND Flash存储器的难度和成本,且不仅适用于EPG3231,也可以推广到一般的8位单片机系统中使用。 在从事单片机的教学中,由于学生对有声音和显示的制作项目更感兴趣一些。因此,在学习过程中这种兴趣往往能让他们完成项目,获得成就感,从而学到更多的东西
[单片机]
基于EPG3231和闪存的声音<font color='red'>播放器</font>设计方案
07年MP3产量将增长23%突破2亿台
25日,美国市场调研机构Gartner预测,2007年全球mp3播放器产量将突破2亿台,在IT产品中仅次于PC。 据Gartner的报告显示,2007年全球mp3产量将达22720万台,比上年增长23%,仅次于2007年全球PC产量25500万台。鉴于mp3市场的良好前景,索尼等公司将推出更多的新品mp3,挑战“ipod一枝独秀”的局面。
[焦点新闻]
高效G类放大器 面向播放器及移动手持终端【德州仪器】
2011 年 1 月 27 日,北京讯 日前,德州仪器 (TI) 宣布面向移动手持终端与媒体播放器推出一款具有集成型数模转换器 (DAC) 与电源轨的低功耗 G 类耳机放大器。该 TLV320DAC3202 是唯一一款具有数字输入 I2S 与集成型时钟系统的独立耳机驱动器,可在 6.5 mW下实现 100 dB SNR。最新放大器可帮助设计人员在最大限度提高音频回放质量的同时,延长中等价格音乐手机与其它便携式消费类电子产品的电池使用寿命。 TLV320DAC3202 的主要特性与优势 • 支持 100 dB 信噪比 (SNR) 与业界最低功耗;SNR 比业界标准高 3 到 4 dB,功耗仅为 6.5
[模拟电子]
高效G类放大器 面向<font color='red'>播放器</font>及移动手持终端【德州仪器】
基于Directshow的H.264流媒体播放器设计
0引言   DirectsHow应用框架完成了流媒体处理的底层工作,使得编程者无需关心数据如何输入,以及处理完后如何输出,而只需关心如何对输入数据进行处理。H.264视频编解码标准具有高压缩比和优良的网络亲和性,被普遍认为是最有影响力的流媒体视频压缩标准。将Direct-show和H.264两种相结合的流媒体播放器无疑将具有非常优秀的性能。   1Directshow技术和H.264视频压缩标准简介   Directshow是微软公司提供的一套流媒体开发软件包,为在windows平台上处理各种格式的媒体文件的回放、音视频采集的高性能要求的多媒体应用,提供了完整的解决方案。   Directshow是一套完全基于COM的应用系统
[模拟电子]
基于Directshow的H.264流媒体<font color='red'>播放器</font>设计
便携式媒体播放器:想说爱你不容易
  2005年被认为是国内PMP(便携式媒体播放器)市场发展的元年,但自其发展之初,就一直处于曲高和寡的局面,市场并未如预期般起飞。经过近4年的市场培育,现在PMP市场正趋于扩张。市场调研机构iSuppli的数据显示,全球PMP 2007年出货量将达到1.17亿台,相当于2006年5,800万的两倍,而2009年全球PMP出货量将达到1.62亿台,在2007年的基础上增长了近40%。   以TI、ADI、安凯、瑞芯为代表的国内外PMP主处理器芯片提供商都表示非常看好PMP未来的市场发展。TI中国区ASP业务拓展及应用总监李俭指出,由于用于手持式设备的LCD屏幕、闪存价格不断降低,LCD可以支持更高质量的视频格式,以及网络上丰富的
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved