搜索
bottom↓
回复: 10

菜鸟制作MP3:一步步实现你自己的shuffle(1)

[复制链接]

出0入0汤圆

发表于 2012-5-8 20:51:40 | 显示全部楼层 |阅读模式
本帖最后由 xiaoziwen 于 2012-5-8 20:56 编辑

首先声明,本人能力一般,如有此错误请指正,但是别乱喷,我只是想介绍点儿经验给大家。

都说知识学会没有,就看你能不能把知识给别人讲明白。
断断续续学习avr单片机已经有一年了,寒假做了一个小小的总结项目:http://www.ourdev.cn/thread-5463099-1-1.html ,这学期又断断续续地折腾了一个月,制作了自己的MP3,为啥叫shuffle呢,因为没有屏幕啊。废话不再多说,下面就教大家制作自己的MP3。

硬件:atmega8、vs1003、sd卡。
软件:WinAVR-20100110。
功能:上一首歌、下一首歌、音量+、音量-、播放/暂停。
说明:SD卡、vs1003驱动是按照手册编写的,文件系统是改编znFAT。制作最简单MP3没有用的的知识我也不会提到。

一、把数据从SD卡里拿出来
基本的概念我就不说了,百度一大堆,只要强调一点,按照本文的方法只能实现驱动2G及以下的SD卡,因为4G及以上的卡使用的标准不一样,但其实万变不离其宗,学会了一种,另一种就是花时间看看手册的事儿。
和驱动其它器件一样,驱动sd卡最主要的就是要看懂时序图。对于SD卡来说主要的操作有,SD卡初始化、向SD卡写命令,从指定地址读出一个扇区。
操作SD卡最主要的就是向SD卡写命令,SD卡命令是48位的命令帧格式,bit_7是起始位,数值为0,bit_6是主机位,数值是1,bit_0~bit_5是命令,接下来4字节是参数,我们主要在这里写地址,最后一个字节是CRC(包括一位结束位)。
我们先看时序图:

很明显这里使用spi总线(后面有介绍),在读取SD卡扇区时,先要拉低CS片选,然后发送48位命令帧,包括需要读取的扇区地址。这里要强调一下,这里读的扇区是绝对扇区,而非逻辑扇区(后面再文件系统部分会做说明)。在MISO上等待到数据0x00时,说明命令帧被SD卡接收,那么继续读取MISO,读到0xfe时,后面的512字节就是我们需要的数据,然后我们在读取尾部的crc(不用管这部分数据,但一定要读出来),就可以拉高CS,完成一次数据读取。

SD卡初始化包括复位和初始化两部分,先说复位。要先发送至少74个时钟信号,拉低CS片选,发送复位命令帧,这里最好多发几次,因为有可能一次发送不会成功,然后读取MISO,读到0x01时,说明复位成功,拉高CS。

初始化和复位类似,拉低CS片选,发送初始化命令帧,这里也是多发送,原理同上,当读到0x00时,初始化完成,拉高CS。

由于没有用到向SD卡写数据的操作,希望学的话自己看手册吧。到这里SD卡相关的操作已经完成,我们看没有什么复杂的东西,编个程序做个测试也很容易。

二、让声音从vs1003中发出来
vs1003是一款成熟的音频解码芯片,虽说现在还有很多比他能力强的解码芯片,但因为他最基本,我们就选他了。规格参数我就不说了,手册上有。在我们简单的shuffle中,对vs1003的主要操作有,读一个寄存器、写一个寄存器、写入音频数据、初始化(看看,跟SD卡大体上一样吗,是不是更有信心了)。

读取寄存器数据:先拉低XCS,命令片选,发送读命令(0x03),接着发送8位的地址,接下来就可以读取16位的寄存器数据,最后别忘了拉高XCS。娘的比SD卡操作还简单,没有说明判断之类的操作。

向寄存器写数据:先拉低XCS命令片选,发送写命令(0x01),发送8位地址,发送16位数据,拉高XCS。真心不难。

写音频数据(没有找到相关时序图,不过也能说明白),在每次发送数据时,先要拉低XDCS数据片选,然后读取DREQ,如果为高的话,则最少可以向vs1003发送32字节音频数据,结束后别忘了拉高XDCS。

vs1003复位:拉低XRESET,再拉高,完成一次硬件复位,之后要等待超过1.35ms,芯片才会稳定。然后我们可以向地址为0x03的时钟寄存器写入倍频的数值,向地址为0x0b的音量寄存器写入初始化音量(否则音量为最大),再进行软件复位,具体操作时把地址为0x00的模式寄存器的bit_2置一,完成此操作后,在等待超过1.35ms时间即完成初始化。

好了,到现在为止,两大器件的操作我们都应经完成,现在你就可以写完一个从sd卡扇区读出数据再发送到vs1003解码的程序了,当然这样的程序是不完善的,因为没有文件系统,我们一定会在耳机中听到意想不到的声音。

在讲完SD/vs1003后,我们需要明确,atmega8使用spi总线来操作这两个器件,如果连spi总线也不明的话,还是再好好看看马潮老师的《avr单片机嵌入式系统原理与应用实践》和傻孩子的《深入浅出》吧,这个MP3对avr的要求就只有IO、定时器、spi,这么点儿东西你都不会,实在说不过去。

先写这么多,下次重点讲一讲我改编的文件系统,已经是我所能想到的删减的最短的代码了,还有最后的用户界面操作(按键程序),最终我也会上传代码,虽说程序写得一般,但是大家交流嘛,就别嫌不好意思。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-5-23 16:51:32 | 显示全部楼层
怎么没人顶起..沙发

出0入0汤圆

发表于 2012-5-23 17:14:41 | 显示全部楼层
很不错

出0入0汤圆

发表于 2012-5-23 22:50:53 | 显示全部楼层
帮顶一下

出0入0汤圆

发表于 2012-5-24 20:10:59 | 显示全部楼层
mark了,有空看看!

出0入0汤圆

发表于 2012-5-25 09:04:59 | 显示全部楼层
支持一下下LZ~~~~~菜鸟都是一点一滴变老鸟滴~~~~~

出0入0汤圆

发表于 2012-5-25 21:49:13 | 显示全部楼层
总会成老鸟的时候!

出0入0汤圆

发表于 2014-12-20 16:47:29 | 显示全部楼层
         

出0入0汤圆

发表于 2014-12-20 18:44:30 | 显示全部楼层
顶一个,

出0入0汤圆

发表于 2014-12-27 11:29:56 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2015-7-28 09:06:00 | 显示全部楼层
楼主MP3的电源芯片怎么选择的~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表