vs1003播放320kbps音频文件_第1页
vs1003播放320kbps音频文件_第2页
vs1003播放320kbps音频文件_第3页
vs1003播放320kbps音频文件_第4页
vs1003播放320kbps音频文件_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vs1003 播放 320kbps 音频文件在调试的时候只是拿网上找的代码,做了相应的修改接口改为我自己的,功能改为我自己想要的功能),这样只是为了快速测试我的 vS1003 模块能不能用, 当然这首先是 要你能理解其代码,要不然是第一次调试你也不知道是程序 有错还是硬件有错。在确定程序没错之后,我就可以确定如 果没有效果,那肯定是我的解码模块不行。测试通过之后我 就可以放心的使用我自己的解码模块。接下来的程序我就可 以根据自己想要的慢慢来写。第一次写程序进去就听到耳机里输出了很高的鸣叫声,这是 因为我把正弦测试( vs1003 自带的一种测试,这样就能很快 确定你的 vs1003 是否能工作

2、)频率调的很高所以声音很尖,被吓了一次。第二次就把它改小了一点,嘟 非常脆弱 很容易坏 又贵又不好买)的一声,呵呵相当激动,这说明我的vs1003 可以用( s1003正弦测试成功之后我就开始想给 vS1003 发送 MP3 音频数 据 看能不能解码放出声音来我最初的想法是通过 winhex 软件打开查看 MP3 代码然后拷贝出来作为一个数组发给VS1003。这个数据要储存在我的单片机的程序储存区里,还好我的单片机程序储存区够大有64K。这样多的MP3代码也只能够听到一点点声音,效果肯定是无法体会的道。果然 ,在耳机里只听到吱 的一声就没了 根本没用 之后我就想把 sd 卡加进来,让 MCU

3、一边从 sd 里读取 MP3数据,再一边发送到 vs1003 里边去解码, 这样就可以一直把首 MP3 的数据全部发送到 vs1003 进行解码。于是我先拷 贝了一个码率比较低的 MP3 ,因为单片机的速度毕竟很慢从sd卡里读取数据然后又要发送给VS1003解码 先找一个码 率比较低的 MP3 做测试这是明智的选择。sd卡的开始组合程序,编写相应的主函数,通电测试。没有任何反 应,串口调试(如果读写 sd 正常可以从串口接收到 第 0 扇区数据(逻辑扇区)这是我程序特意设定的,为了方 便看出 sd 是否在工作)也接收不到任何数据 ,确定 sd 卡未启用。我以为 sd 卡的读写又出问题了 ,拿之

4、 前做好的 sd 测试程序重新测试,也没有数据输出,很晕。不经意间我发现当我拔掉解码模块 sd 卡读写正常, 找到这 重要点之后,我开始分析问题。因为我的sd卡和VS1003与MCU的通讯方式都是 spi。而我的MCU只有一个硬件spi,所以都统一连接到一起了只是通过不同的片选让它们轮流使用spi。可惜的是这样不行。经过多次试验,猜想,也在网上寻求答案(未果) 。最 终我自己搞明白了,是应为我用的 MCU 为 5V 器件,为了 能跟 vs1003、sd 卡正常通讯 ,我把 MCU 的 spi 口设置成为开漏形式,让后加 3.3v 的上 拉。这样我的单片机 spi 口最大电压也只能是 3.3v

5、了。不过 同时开漏形式让它的驱动能力变得很弱, 无法同时接两个 spi通讯模块 于是我把sd卡的接口换到P0 口采用软件模拟spi读取数据, 这样一来,呵呵串口可以看到接收到数据了随之耳机里传来 了久违的音乐,不过声音很乱,就像快进一样。还是很兴奋 ,毕竟是能出声音了。为什么声音会乱掉,这个时候开始找问题,一直花了我两天 的时间,VS1003的datasheet看了一遍又一遍 ,敢肯定我的程序绝对是没错。那就是硬件了。分析它的原理开始查问题,看看是那步错了。vs1003 解码 MP3 数据,你只要把正确的 MP3 数据传送给它, 它就能自动识别你的 MP3 是多少码率的, 然后通过一定的解 码

6、速率进行解码。这个时候就有疑问了,既然解码的速率确 定了,为了能流畅的播放出音乐来,你给 vs1003 发送 MP3数据的速率必须跟它解码的速率一样,那怎么去保证这两个 速度一样呢?如果送给 vs1003 的数据过快, 那我们可以加延时让它一样,那这时候又出问题了,难道每一首不同码率的 歌都要去加个延时吗(这里是按发送数据永远比解码速率快 的情况来分析) ,这样肯定是不合理的。不用担心, vs1003为用户准备了 0.5k 的数据缓冲区做为音频数据的缓冲, 这就 好像一个漏斗一样, 0.5k 空间就像漏斗的容量,你只要保证 漏斗里边始终有东西,那么漏斗底下就始终有东西流出,保 持连续。你给漏斗

7、加料的速度无所谓,只要你别让漏斗里边 为空就行。 vs1003 是一样的为了解码正常,播放流畅,你只 要保证数据缓冲区里始终有数据作为待解码对象,这样就可 以放出流畅的音乐来。这里又有问题了,我们怎么确定数据 缓冲区里到低有没有数据,或者是还有多少,怎么控制发送 数据。 vs1003 也帮你考虑到这一点了,所以他专门设定了 个中断脚 DREQ, 当 DREQ 变高时,外部可以至少为 vs1003发送32 字节的数据 (这是 SDI 数据,还有一种 SCI 数据,这里不 说了),为了保证播放流畅。 当 vs1003 收到 32 字节的数据之 后他的 DREQ 脚变为低,此时可以暂时不往里边发送数

8、据, 如果数据缓冲区内少于 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.还有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论