搜索
bottom↓
回复: 290

mega8 mp3 player --- (原标题:VS1003上实现wma格式音乐的播放)

[复制链接]

出0入0汤圆

发表于 2006-11-26 00:03:57 | 显示全部楼层 |阅读模式
今天晚上我在我做的mp3上试验了播放wma音乐。
vs1003手册上说可以解码吗mp3 wma和midi格式的音乐。
试验发现播放wma音乐可以像播放mp3那样播放,只要把wma文件数据送给vs1003就可直接播放。

刚开始在从正在播放的wma音乐转入下一首音乐会出现不能播放的问题。
wma格式不像mp3格式那样容易播放,因此不能播放的原因是其不能正确结束当前播放的数据帧。
后来查datasheet发现可以通过设置SCI_MODE的SM_OUTOFWAV位来结束wma的播放。

由于我的程序没有判断当前播放的音乐是什么类型音乐的程序。所以我有找了个变通的方法,
就是复位。

我用的是软件复位,通过设置SCI_MODE的SM_RESET位来实现。
即在播放每一首歌前复位一下vs1003就可解决wma歌曲的切换。
按手册上的要求复位前最好向VS1003填充2048个0 且这些数据要根据DREQ引脚的请求送给芯片。
另外复位后还要延时约1.35ms芯片才能恢复到先前的工作频率。
接下来就可以发送你的mp3或wma数据了。

不过这种方法只能整首的播放wma音乐,不能快进。如要快进VLSI网站上有示例代码。

现在我的mp3可以播放mp3和wma两种格式的音乐了,至于midi有空再研究。

不知阿永第三版的mp3板是否支持wma,如果没有可以考虑把它加上去,不复杂的,只要按我上面的方法就可。




--------------------------------------------------------------------------------------------------------
以下文字为bozai于2007年12月3日加入:

哈哈,动用版主的特权,把最新版本的程序加到楼主位了并且修改标题为“mega8 mp3 player(原标题:VS1003上实现wma格式音乐的播放)”:
点击此处下载ourdev_180345.zip(文件大小:48K)

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2006-11-26 13:03:28 | 显示全部楼层
今天早上我又把vs1003的midi功能做出来了。



不过在播放midi之前要把SMF1格式的midi转成SMF0格式的midi文件。

在应用手册上的网址http://www.gnmidi.com/下载转换程序GN1:0转换。

将转换后的文件拷到sd卡中按播放mp3及wma的方式播放即可。



但要注意在从正在播放的midi曲子跳出来,在复位前就不要填充2048个零了

如果填充了将会花很长时间才能进入下一首歌的播放,因为midi需要的数据量很小。

同样如果按暂停键,你也会等一段时间让vs1003把内部已有的数据处理完。



播放出来的音乐没有在电脑上播放的效果好,类似于手机上的midi音乐。



我做的播放器的图片(在通用板上手工焊的)









解码板










-----此内容被bozai于2006-11-26,13:22:48编辑过

出0入4汤圆

发表于 2006-11-26 13:12:20 | 显示全部楼层
cool ...

出0入0汤圆

 楼主| 发表于 2006-11-26 14:44:28 | 显示全部楼层
另外一个问题:

当midi正常播放至结束时,不能按照判断数据是否送完为标准来判断歌曲是否放完。

在播放mp3和wma格式时用这种方法,由于损失的时间很短所以听不出来。

而在放midi时,虽然你的数据送完了,但是由于vs1003内还有2048字节的数据还没解码完。

所以这时跳到下一首歌必然引起一段音乐无法播放完。

因此在送完所有数据后还要填充2048个数据,我用的是2048个零,才能恰好使midi音乐播放完,其实在播放mp3和wma时也要做同样的处理才对。

出0入0汤圆

 楼主| 发表于 2006-11-26 21:01:44 | 显示全部楼层
上传一下我写的程序

里面包含了SD卡的驱动,完整的FAT16操作程序,及VS1003的程序。

整个程序花了我半个月时间。



其中SD卡驱动只包含了初始化,读一扇区,写一扇区的功能。



FAT16部分

本来是针对我的毕业设计做的,现在顺便做了个mp3,所以其中有好多函数是不须要的。

但是有需要做文件系统的可以参考一下。

这部分含有,创建文件,删除文件,创建目录,删除目录,重命名,打开文件,写文件,显示目录内容等。另外为了配合mp3的操作多添加了几个函数。

但是写文件部分做的不完善。不支持长文件名的创建。



在主程序中放置了播放mp3的操作,同时注释掉了一些关于文件系统的函数。

如果把mp3的播放函数去掉,把原来的文件系统函数加上,可以直接使用。



显示用串口调试工具显示,播放mp3时会显示文件名的短文件名项,初始化的时候会显示初始化信息。

在用作fat16操作时可以像普通dos 操作一样。

比如显示根目录内容可以输入dir \

具体信息可通过输入help查看帮助。



关于这个mp3的原理图我就不画了

总共几个脚我用文字描述一下。



SD卡的cs接m32的SS引脚

其它的MISO MOSI SCK就不用说了



VS1003的

XCS接    PB0

XRESET接 PB1

DREQ接   PB2

XDCS接   PB3

其它几根SPI数据线按标准接



PLAY/STOP键接 PD5

PREV键接      PD4

NEXT键接      PD3

V-   接       PD2

V+   接       PD6



如须更改可在程序中修改



VS1003的电源是这样接的,3.3V接IO电源,模拟电源用3.3串接一个1N4007,核电源在1N4007后接一个快恢复管1N5819。其它的按VS1003手册给的接法就行了。



如果要手工在通用板上焊VS1003的话,建议先给VS1003各个脚上好锡,然后焊好四周的8个脚用作固定,可以用电阻引脚之类的东西。然后用细的漆包线,可以从小变压器上拆,把头上的漆用刀子刮掉上上锡。接着用普通的烙铁,记住烙铁不能沾锡,仔细焊上然后把线引到附近固定后接到你要的地方就行了。



VS1003有很多电源脚内部是连在一起的,如果想偷懒的话可以只焊一根,或者只焊重要的脚就可以了,我上面做的mp3就是这样做的,工作没问题。不然48个脚要我焊焊上一天呢。





以下是程序,可以播放mp3,wma,及SMF0格式的midi音乐。不过没有快进与快退功能。

FAT只支持FAT16

点击此处下载armok01136543.rar





还有我的程序编译环境是winavr,我是在avrstudio里编译的,调试也是在avrstudio里进行的。

优化级别设成2,不然在7.3728M的晶振下播放高数据率的音乐会有点卡(写的程序不好)。


-----此内容被bozai于2006-11-26,21:51:37编辑过

出0入0汤圆

 楼主| 发表于 2006-11-27 00:06:00 | 显示全部楼层
再上传个添加了多一点相应注释的程序,不然看起来有点困难。



这种几千行的程序如果不是自己写的其它人想要看懂的确不容易,

再过一段时间我估计就我就看不懂了,所以刚才赶紧加了点注释。

我这人喜欢什么都做好了再回头做以前该做的事。

不是个好习惯!



点击此处下载armok01136546.rar

出0入0汤圆

发表于 2006-11-27 08:35:56 | 显示全部楼层
hao

出0入0汤圆

发表于 2006-11-27 09:01:42 | 显示全部楼层
正想看看,谢谢!

出0入0汤圆

发表于 2006-11-27 13:16:28 | 显示全部楼层
问一下,你的USB接口芯片用的是什么?

出0入0汤圆

 楼主| 发表于 2006-11-27 13:19:43 | 显示全部楼层
没用用usb接口芯片

拷歌的话直接把sd卡拔下来用读卡器拷。

暂时还没考虑那么多。

出0入0汤圆

 楼主| 发表于 2006-11-27 13:21:43 | 显示全部楼层
我那usb口是用来供电的

出0入0汤圆

发表于 2006-11-27 16:00:54 | 显示全部楼层
我的跟3楼一样,要补零的.另外,VS芯片可以去它的网站申请要的.

出0入0汤圆

 楼主| 发表于 2006-11-27 23:50:54 | 显示全部楼层
晚上仔细测量一下,发现VS1003的模拟电源和核电源都可以用3.3v串接一个1N4007实现。

在不工作的时候电压月2.65v 工作时正常音量时约2.54v 核电源满足要求,但模拟电源不满足,可是可以正常工作。如果想省去一个LDO可以用这种方法。

我先前的在1N4007后再接一个1N5819为核供电的方法可以用,但是工作时核电压偏低,大约2.36v。如果用锂电池供电用1117-3.3供电的时候,当电压降到3.7V时工作就会不正常。

当去掉5819后当电池电压降到3.5v时仍可工作。因此可以去掉5819。

当然如果你不放心的话还是用LDO器件来实现。



下一步有空的话我打算把这个大东西装到小盒子里。另外把FAT32也兼容到程序中去。

显示暂且没想到好的办法,找不到合适的,毕竟是在通用板上搭起来的系统不是做项目。

出0入0汤圆

发表于 2006-11-28 19:36:18 | 显示全部楼层
嚴重支持樓主,希望更上一層樓!!!

出0入0汤圆

 楼主| 发表于 2006-11-28 23:14:36 | 显示全部楼层
谢谢!

出0入0汤圆

 楼主| 发表于 2006-12-5 21:00:11 | 显示全部楼层
经过一段时间的努力我的装在小盒子里的mp3做好了。

这次我用的mcu采用m8为了节省空间,多增加了一个循环键,和两个指示灯。

这次制作损失了两块VS1003,原因不明。



这次的程序在上次基础上删减了很多内容,另外提供了对FAT32的支持。

程序如下:

点击此处下载armok01137247.rar



下面是我做的一些图片,晚上用手机拍的,不清楚。



盒子大小,8.4mm * 4.8mm * 2.2mm 还是比较大,比一般mp3大多了。



VS1003小板,这可是我一根线一根线手工焊的





主板



放在盒子里(没盖)



装起来的样子(有电源开关和一些按键)



插SD卡的地方

头像被屏蔽

出0入0汤圆

发表于 2006-12-5 21:27:31 | 显示全部楼层
谢谢 bozai 章其波的共享。



为了表扬  bozai 的共享精神,下次 bozai邮购时,请在留言里注明“阿莫同意赠送2片VS1003,请在本订单一起发货”,我们的邮购部工作人员就会处理的了。

出0入0汤圆

 楼主| 发表于 2006-12-5 21:38:19 | 显示全部楼层
多谢!

以后有机会希望能多与您合作!

出0入0汤圆

发表于 2006-12-8 16:00:06 | 显示全部楼层
贡献好东西就有阿莫的奖励啊,呵呵。。。

出0入0汤圆

 楼主| 发表于 2006-12-12 23:20:05 | 显示全部楼层
增加了随机播放歌曲功能的程序:

点击此处下载armok01137842.rar

出0入0汤圆

 楼主| 发表于 2006-12-13 12:37:59 | 显示全部楼层
修正了随机数产生的bug

通过启动定时器,用定时器的定时值作为种子

用srandom(unsigned long val)产生seed供给random()函数。

这样可以产生真正的随机数。



改进后的程序:

点击此处下载armok01137868.rar

出0入0汤圆

 楼主| 发表于 2006-12-13 23:39:27 | 显示全部楼层
今天晚上作更详细的调试发现我之前发的含FAT16文件系统的程序有3个错误。

以前用FAT16没发作,改FAT32时出问题了。



因此现在把支持FAT16/32的程序(含mp3程序)帖出来,可能还会有bug

点击此处下载armok01137907.rar



mega8 mp3的程序也作了相应修改:

点击此处下载armok01137908.rar



程序中有时会有很多隐性的bug,只有多次调试,把所有可能的情况都试一遍才能发现问题。发觉写程序不容易。



如果没仿真器也很难调这么大的程序,幸好我一前做了个JTAG。不像以前写小程序不要仿真,烧到片子里不行再改。


-----此内容被bozai于2006-12-13,23:48:12编辑过

出0入0汤圆

发表于 2006-12-14 17:23:15 | 显示全部楼层
请问楼主我根据mega8 mp3的程序制作一个MP3PLAY,LED1和LED2两个指示灯都亮了,但没有声音,请你的硬件是怎样连接的,

出0入0汤圆

 楼主| 发表于 2006-12-14 18:10:02 | 显示全部楼层
硬件就是按照程序中给的



vs1003的引脚

#define VS1003B_PORT    PORTC

#define VS1003B_DDR      DDRC

#define VS1003B_PIN      PINC



#define VS1003B_XCS     3

#define VS1003B_XRESET  0

#define VS1003B_DREQ    1

#define VS1003B_XDCS    2



sd卡的引脚

#define MMC_SD_PORT       PORTB                    //引脚定义

#define MMC_SD_CS_PIN     2     //mega8

#define DDR_INI() DDRB |= _BV(2)|_BV(3)|_BV(5)  //mega8





//灯

#define LED1_CON() DDRC|=_BV(PC5)

#define LED1_ON()  PORTC|=_BV(PC5)

#define LED1_OFF() PORTC&=~_BV(PC5)



#define LED2_CON() DDRB|=_BV(PB1)

#define LED2_ON()  PORTB|=_BV(PB1)

#define LED2_OFF() PORTB&=~_BV(PB1)



//按键

#define STOP _BV(PD2)

#define MODE _BV(PD3)

#define NEXT _BV(PD7)

#define UP   _BV(PD4)

#define DOWN _BV(PD6)

#define PREV _BV(PD5)



可以看出来的



那两个灯如果在开机时是做为故障显示的,一个指示VS1003初始化失败,一个指示SD卡文件系统初始化失败。



当然你的两个灯都亮的话代表都失败了。



正常情况下,一个代表单曲重复,一个代表随即播放(我最后给的程序)



另外今天我还发现有的质量差的低速卡不能使用,因为单片机速度太快了

要在程序开始时把速度调到最低即 OSCCAL = 0x00;//

而在初始化完成后调到最快OSCCAL = 0xff;//

后才能使用。

我最早买的san disk 卡不管什么速度都没问题



主程序如下:



int main()

{

        DDRD &= 0x03;//初始化端口

        PORTD |= 0xfc;

       

        LED1_CON();

        LED1_OFF();

        LED2_CON();

        LED2_OFF();



        OSCCAL = 0x00;//最小RC振荡频率

        OSCCAL = 0x00;

        Delay(0xffff);



        MMC_SD_Init();//初始化spi口



        Delay(0xffff);



        if(VS1003B_Init())LED1_ON();//配置VS1003



        Delay(0xffff);//提供足够的延时

        Delay(0xffff);

        Delay(0xffff);

        Delay(0xffff);

        Delay(0xffff);



        MMC_SD_Reset();//初始化SD卡



        OSCCAL = 0xff;//最大RC振荡频率

        OSCCAL = 0xff;

        Delay(0xffff);



        if(FAT_Init())LED2_ON();//初始化文件系统 支持FAT16和FAT32



        Search("\\",&MusicInfo,&totalsongs,&type);//搜索根目下的歌曲 不包含子目录

        //也可以指定文件夹 如Search("\
ew\mp3",&MusicInfo,&totalsongs,&type);

        //代表在根目录下的new文件夹下的mp3文件下的音乐文件



        PlayMusicwithKey();//播放歌曲

        return 0;

}



手工做这个焊接要确保没问题。


-----此内容被bozai于2006-12-14,18:13:23编辑过

出0入0汤圆

发表于 2006-12-14 21:19:20 | 显示全部楼层
我的1003估计坏了,很郁闷啊。焊接的时候我已经很小心了,焊好了之后也检查了N的N次方次,还是不行,读写积存器就不成功,其他的免谈了,不知道怎么办才好啊

出0入0汤圆

发表于 2006-12-14 21:27:38 | 显示全部楼层
我看数据手册上写的最大供电不超过3。6V,我不小心给了他4。4V的电压,这样该不会就烧了吧?

出0入0汤圆

 楼主| 发表于 2006-12-14 21:50:56 | 显示全部楼层
这就不得而知了,要看电路有没有问题了。

有两个灯作指示的。

我焊的时候不就莫名其妙的坏了两个芯片。

我现在又在做了,准备做好了送人。

出0入0汤圆

发表于 2006-12-14 22:10:32 | 显示全部楼层
bozai 章其波,我现在也是坏了两个1003啦,好心痛啊,现在还好,有一片还能工作,可以让我学习mp3程序,唉

出0入0汤圆

 楼主| 发表于 2006-12-14 23:07:27 | 显示全部楼层
看来这个1003太脆弱了,我只剩一片新的了,焊的时候要注意了。

出0入0汤圆

发表于 2006-12-15 09:45:44 | 显示全部楼层
你们是焊接引出来的,我的是做好了点电路板啊。我MEGA32和其他芯片都焊上去了,这不要我的命么?我郁闷啊,取下1003估计扳子也快废了,ri

出0入0汤圆

发表于 2006-12-15 09:53:24 | 显示全部楼层
是否可以通过测量1003上电后晶振是否起振来判断1003是否已坏?

出0入0汤圆

 楼主| 发表于 2006-12-15 13:01:50 | 显示全部楼层
我坏的两块都振的起来。

出0入0汤圆

发表于 2006-12-15 22:49:12 | 显示全部楼层
谢谢楼主,我参考23楼的程序修改后可以播放了,但声音很慢,我的VS1003B是有用12.288MHz晶体,M8是用7.3728MHz晶体,请楼主是用什么晶体。

出0入0汤圆

 楼主| 发表于 2006-12-15 22:51:51 | 显示全部楼层
编译的时候把优化设成-02

出0入0汤圆

 楼主| 发表于 2006-12-16 15:42:01 | 显示全部楼层
今天花了4个小时有焊了个VS1003的小板

能播放音乐,但是声音较上次的要小,调到最大还行。

还好没坏,已经很好了,不然还得邮购。



声音小估计是被焊的问题,AVDD电压调整一下没变化。

焊接的时候我是戴防静电手腕的,有时候能感觉到用烙铁的时候手腕那有点痒。

上次的那两片有可能就是这电流引起的。



小板的图片(手机拍的不清楚)



出0入0汤圆

发表于 2006-12-16 20:57:39 | 显示全部楼层
我编译的时候把优化设成-02,播放声音一样很慢

出0入0汤圆

发表于 2006-12-16 20:57:41 | 显示全部楼层
我编译的时候把优化设成-02,播放声音一样很慢

出0入0汤圆

 楼主| 发表于 2006-12-16 21:11:11 | 显示全部楼层
那就是VS1003没初始化成功。

VS1003的PLL没设置好。



指示灯亮了没有,亮了就有问题。

出0入0汤圆

发表于 2006-12-16 22:13:28 | 显示全部楼层
请问两个指示灯的连接是M8(PC5)、M8(PB1)接指示灯的负极,指示灯的正极经电阻接到电源VCC,一上电两个指示灯都亮是否正常。

出0入0汤圆

 楼主| 发表于 2006-12-16 23:26:10 | 显示全部楼层
不是这样接的,IO口串电阻接发光二级管后接地。

按你的接法及现象是正常的。



程序在-02优化时在7.3728M下播放320Kbps是没问题的。

出0入0汤圆

 楼主| 发表于 2006-12-17 00:00:56 | 显示全部楼层
我上次坏的,一个是命令写得进去而数据写不进去 一个是数据填完2048个后vs1003就不要了,不做处理。

不会你碰到数据写的进而命令写不进吧。

建议gdgmlzw再仔细查查,比如说你的熔丝位是否配置为外部晶振等。

也可以试试用内部的RC振荡,因为有的卡在7.3728M 下不能正常初始化,即使spi最大分频也不行。

出0入0汤圆

发表于 2006-12-19 12:29:33 | 显示全部楼层
重新买了两片1003,偶的已经出声啦!等俺把SD和液晶加上之后就爽了!

出0入0汤圆

 楼主| 发表于 2006-12-19 12:37:36 | 显示全部楼层
恭喜!

搞出来别忘了共享啊!

出0入0汤圆

发表于 2006-12-19 14:09:02 | 显示全部楼层
早說啊

我給幾個空PCB你



出0入0汤圆

 楼主| 发表于 2006-12-19 16:46:59 | 显示全部楼层
谢谢!

我说的是资料共享。

如果能送我几块,小弟感激不尽!

出0入0汤圆

发表于 2006-12-19 18:18:53 | 显示全部楼层
【44楼】 z4057



要是方便给我一块啦,呵呵,坏了两个1003了,实在不敢冒险hoho

出0入0汤圆

发表于 2006-12-19 18:34:55 | 显示全部楼层
这样的模块好,方便啊,成本又低.加上实验板(基本都有了)就可以玩了.可惜......

出0入0汤圆

发表于 2006-12-20 23:01:08 | 显示全部楼层
等我的完工之后全部共享,不过PCB做出来还有错的地方,要划断然后飞线,惭愧啊,不过工作了就是最好的!哈哈

出0入0汤圆

发表于 2006-12-22 16:05:16 | 显示全部楼层
不好意思

這幾天忙都沒上來

要的話請發郵件 z4057,163.com

請把,改為@

寫下你的地址

不收錢,快遞費為到付

只做了20PCS 先到先得

出0入0汤圆

 楼主| 发表于 2006-12-22 16:13:52 | 显示全部楼层
先谢了!

出0入0汤圆

发表于 2006-12-22 22:40:41 | 显示全部楼层
好人啊

出0入0汤圆

 楼主| 发表于 2007-1-1 14:06:00 | 显示全部楼层
应网友要求把电路图画出来了:(包含整理后的源码,源码需另建工程)

点击此处下载armok01139917.zip

出0入0汤圆

发表于 2007-1-2 01:17:33 | 显示全部楼层
波波最好做个板子出来,放在OURAVR 上 卖。 我一定买一个来学习 。

出0入0汤圆

 楼主| 发表于 2007-1-2 01:23:55 | 显示全部楼层
呵呵,纯属个人娱乐,你可以自己去做啊,就是焊VS1003费点事,其它的不成问题,mega8用DIP28封装的,盒子也比较好找,手机电池估计每个人都有。

倒可以建议啊莫做一批转接板卖卖。

出0入0汤圆

 楼主| 发表于 2007-1-2 01:35:48 | 显示全部楼层
Sorry 52楼上传的原理图有一个错误,电源部分画错了。

请下载这个

点击此处下载armok01140017.zip

出0入0汤圆

发表于 2007-1-4 19:27:28 | 显示全部楼层
这里很热闹啊

顺道问问:

General MIDI / SP-MIDI format 0

midi有哪些格式啊?怎么区分?

出0入0汤圆

 楼主| 发表于 2007-1-4 19:30:46 | 显示全部楼层
一般都不是SMF0的,要用软件转的

网址http://www.gnmidi.com/有转换程序GN1:0

出0入0汤圆

发表于 2007-1-5 08:16:03 | 显示全部楼层
再问一下

手册上:关于vs1003它解码格式有Decode MP3 WMA WAV等

而支持的流只有mp3/wav Supports streaming forMP3/WAV.



解码和支持有什么区别啊?

出0入0汤圆

 楼主| 发表于 2007-1-5 11:06:54 | 显示全部楼层
应该这样理解,

支持的流是指mp3 wav不管是数据的哪一部分送到芯片都能够解,简单说在不用软件处理的情况下是否支持快进 倒退等操作。

由于mp3文件的文件格式是按帧放的,每帧都独立,因此可以脱离整体单独处理。

而wma格式却不同 它有一个总的帧头。

我的理解是这样的,不知道对不对。

出0入0汤圆

发表于 2007-1-5 15:13:06 | 显示全部楼层
我觉得这样理解应该差不多.

只是我对wma和wav的格式还是了解不够

datasheet上ima adpcm文件加一个头文件就能变成RIFF文件或WAV文件.

还有WMA有什么4.0\7\8\9这些哪里有一些参考资料啊?



还有在vlsi提供的程序中它的读写WritePhysicalSector()出现

//convert to bytes (combined with 8bit shift)

sectorAddress.l = sectorAddress.l * 2;

c =MmcCommand(24 | 0x40 ,sectorAddress.b.b2,sectorAddress.b.b1,

                   sectorAddress.b.b0, 0);

sectorAddress.l = sectorAddress.l >> 1; //convert back to blocks

它在这个里面将sectorAddress.l乘2然后发送,再变回来是什么意思啊?



union Address

{

        uint32 l;

        struct B

        {

                uint8 b0;

                uint8 b1;

                uint8 b2;

                uint8 b3;

        } b;

};

出0入0汤圆

 楼主| 发表于 2007-1-5 15:21:52 | 显示全部楼层
对不起,这些我没有研究过。你再慢慢找找。

出0入0汤圆

发表于 2007-1-5 16:30:55 | 显示全部楼层
好东西哦

出0入0汤圆

发表于 2007-1-5 16:36:38 | 显示全部楼层


对sd卡的操作中seek-before-read是一个什么意思啊?

出0入0汤圆

 楼主| 发表于 2007-1-5 16:39:52 | 显示全部楼层
“seek-before-read”具体用在哪的?

出0入0汤圆

发表于 2007-1-5 17:54:07 | 显示全部楼层
用在读一个sector的时候,读之前设置读那个扇区,好象sd卡都支持.

没有看到不支持的 哈哈



再问一个:

sd卡中的MBR和DBR?分别在第几个sector 一直不明白

SD卡是不是只有DBR没有MBR啊~~

出0入0汤圆

 楼主| 发表于 2007-1-5 17:58:16 | 显示全部楼层
如果有MBR则MBR是固定在0sector DBR则不固定,

如果没MBR则DBR在0sector

出0入0汤圆

发表于 2007-1-5 19:56:44 | 显示全部楼层
你的qq 或者其他的是联系方式哟

这样问问题不好 哈哈



那哪些有MBR哪些没有哟??

出0入0汤圆

 楼主| 发表于 2007-1-5 20:03:54 | 显示全部楼层
我基本不怎么用qq,经常不在线,如果要加的话我资料里有,msn倒经常上。

至于MBR哪些有,哪些没有,这也不一定。

我用过的5张卡中,4张有,1张没有。最好在程序中做一个通用的,如果通过分区表没找到合法的DBR则把这张卡当作没有MBR然后再按没有MBR卡处理。

出0入0汤圆

发表于 2007-1-5 21:47:56 | 显示全部楼层
如果通过分区表没找到合法的DBR则把这张卡当作没有MBR然后再按没有MBR卡处理。

应该是如果通过分区表没找到合法的MBR则把这张卡当作没有MBR然后再按没有MBR卡处理。





我就是不太明白有MBR和没有MBR处理的方式?

出0入0汤圆

 楼主| 发表于 2007-1-5 21:56:08 | 显示全部楼层
有MBR只是多了一个步骤,有MBR要通过分区表才能找到DBR

而没有MBR的就省点事而已。

最主要的是DBR的处理,FAT的信息包含在里面。

出0入0汤圆

发表于 2007-1-7 10:48:26 | 显示全部楼层
听了bozai的今天找一张sd卡试了试

1张1g的有MBR,1张64M的没有。

有的话就是隐藏扇区,没有的话就是0

哈哈

hidsec = pr->prStartLBA;//the hidden sectors


-----此内容被hellokilly于2007-01-07,11:16:38编辑过

出0入0汤圆

发表于 2007-2-4 11:47:45 | 显示全部楼层
楼主提供的资料,我已经仿制成功,谢谢!

出0入0汤圆

发表于 2007-2-5 12:37:26 | 显示全部楼层
不错不错 继续努力

出0入0汤圆

发表于 2007-3-2 14:20:37 | 显示全部楼层
我用的是其他的GCC环境,可以将楼主的程序编译,但没有看到有什么优化选项...应该没事吧.还没画板回来,问问做过的兄弟有什么不同的,如果没有这个优化选项的话?

出0入0汤圆

 楼主| 发表于 2007-3-2 14:28:14 | 显示全部楼层
没有优化的话直接结果就是代码超出8K,M8放不下。

你在仔细找找吧,肯定有改优化的地方,实在不行就直接修改makefile

出0入0汤圆

发表于 2007-3-3 23:43:59 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2007-3-9 23:04:48 | 显示全部楼层
我按你的程序和电路做了一个,播放时大概是放一秒钟停一秒钟,找不出什么原因,到底是怎么回事啊,12M晶振

出0入0汤圆

 楼主| 发表于 2007-3-9 23:23:09 | 显示全部楼层
首先编译时优化级别改了没有,还有如果用12M你要配置单片机使用外部晶振。

出0入0汤圆

 楼主| 发表于 2007-3-9 23:27:56 | 显示全部楼层
如果电路一样我发个hex文件给你

点击此处下载armok01146119.zip

出0入0汤圆

 楼主| 发表于 2007-3-10 08:08:25 | 显示全部楼层
不客气!昨晚忘了说了,79楼的hex文件要求文件存放在根目录下的music文件夹下。

出0入0汤圆

发表于 2007-3-10 18:37:32 | 显示全部楼层
还是不行   你的程序我都没变的   现在怀疑是不是板子有问题, 画的板子惨不忍睹啊    没有什么经验的说,



出0入0汤圆

发表于 2007-3-10 18:38:34 | 显示全部楼层
点击此处下载armok01146184.rar

出0入0汤圆

 楼主| 发表于 2007-3-10 19:09:48 | 显示全部楼层
我看了你的板子发现你的VS1003的晶振电路没有接电容和1M的电阻,这可能是原因。

我最早的时候忘了接1M的电阻,发现板子有时工作,又是不工作,不工作的几率大于工作的几率。

你加个电阻试试

出0入0汤圆

 楼主| 发表于 2007-3-10 19:12:52 | 显示全部楼层
不好意思,看错了

出0入0汤圆

 楼主| 发表于 2007-3-10 19:18:33 | 显示全部楼层
现在还是播放1s停1s的问题吗?音调不对还是数据不足造成的声音?

出0入0汤圆

发表于 2007-3-10 21:35:09 | 显示全部楼层
音调是正常的  就是有间隔   我用以前从icdev买的1003模块按你的电路和程序是正常的,

出0入0汤圆

 楼主| 发表于 2007-3-10 21:43:46 | 显示全部楼层
应该是VS1003没有初始化好,重点检查VS1003 XCS脚的连接情况,查查看有没有问题。

出0入0汤圆

发表于 2007-3-11 16:36:26 | 显示全部楼层
我看你的vs1003电路做了很多简化啊   这样有没有影响啊?

出0入0汤圆

 楼主| 发表于 2007-3-11 17:01:37 | 显示全部楼层
肯定会有点问题,比如说会在音频输出端产生一点微弱的噪声。

最好全部用上,我看你的pcb已经全部用上了。

我用这种电路已经用了4个了,没问题的。

出0入0汤圆

发表于 2007-3-21 12:00:44 | 显示全部楼层
bozai,我按照你的电路做了一个。上电LED1,LED2没有亮,LED3反而亮了,一会后开始闪;如果按PLAY键LED3就不再闪,稳定亮,再按就又闪了。

耳机没有声音(整个过程)

这正常吗?还是什么地方出问题了?谢谢!

出0入0汤圆

 楼主| 发表于 2007-3-21 12:19:54 | 显示全部楼层
"bozai,我按照你的电路做了一个。上电LED1,LED2没有亮,LED3反而亮了,一会后开始闪;如果按PLAY键LED3就不再闪,稳定亮,再按就又闪了。"

VS1003的通信没问题,SD卡及文件系统没问题了。

LED3时VS1003的数据请求信号,一开始亮是因为在初始化文件系统及寻找文件。一会开始闪后就说明正在播放音乐。按play键是暂停再按又接着播放了,所以出现你的现象。



至少说已经快成功了,至于声音的问题,你检查下VS1003的AVCC电源,还有与之对应的那些管脚的连接情况,就是芯片37~48脚的情况。另外检查一下音量-的按键有没有问题,如果对地短路的话音量就会被调到最小而听不到。

出0入0汤圆

发表于 2007-3-21 14:29:28 | 显示全部楼层
bozai,谢谢你的回复:)

我下了你给的hex文件,LED1,LED2情况是一样的,LED3反而不会闪,就一直亮,按键没有反应。

我做电路的时候把VS1003的avdd0~avdd2都连起来了,应该没有关系吧

我去试试把它们断开。

出0入0汤圆

 楼主| 发表于 2007-3-21 14:52:58 | 显示全部楼层
sorry!

给的hex文件要求音乐文件放在根目录的music文件夹下。

avdd接在一起没关系的,我电路图中的接法不科学。

出0入0汤圆

发表于 2007-3-21 14:53:53 | 显示全部楼层
又试了一下,是我把放音的座子封装做错了,改了之后就可以放音了:)

但上面bozai给的hex没有声音:((硬件我没有改);

好!多谢bozai,去研究研究先。。

出0入0汤圆

 楼主| 发表于 2007-3-21 15:05:02 | 显示全部楼层
sorry!

给的hex文件要求音乐文件放在根目录的music文件夹下。

另外如果你有avrfreaks的ID号的话,可以到

http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=795

下载针对winavr20070122的最新程序,其中修正了一个不大不小的bug,还有文件仍存放在music目录下。你也可以直接修改程序中文件搜索的路径(在主程序的两个地方)选择存放在什么地方。(主要如果不分路径的话,m8的ram太小,程序嵌套会导致堆栈益处,所以才没做不分路径的程序)




-----此内容被bozai于2007-03-21,15:09:41编辑过

出0入0汤圆

发表于 2007-3-21 15:23:47 | 显示全部楼层
好,谢谢bozai!真是太热心了。忍不住要赞:)

欢迎大家多交流:)

出0入0汤圆

发表于 2007-3-23 14:25:26 | 显示全部楼层
想请问一下一般下的你们的工程都好象有一个.aps的文件是在AVESTUDIO 4 下面用的吗?



怎么wingcc的工程pnproj文件没有啊?



没有用过avr不太了解,特请教一下.

有什么指导书看看~~

哈哈

出0入0汤圆

 楼主| 发表于 2007-3-23 15:19:50 | 显示全部楼层
回98楼:

是在AVRSTUDIO4下用。



我只在AVRSTUDIO4下使用WinAVR 所以没有pnproj工程文件。



知道书的话论坛里有好多这方面的电子书,可以去下看看。最好是自己去买书。

出0入0汤圆

发表于 2007-3-23 16:33:14 | 显示全部楼层
这个帖子太好了,已经放到收藏夹了。谢谢bozai

出0入0汤圆

发表于 2007-4-4 16:22:22 | 显示全部楼层
bozai,原先按照你给出资料制作了一个mp3,播放fat16的256卡没有任何问题,今天终于找了一个1g的fat32的卡,却亮灯了,就是初始化不成功。我使用winhex看过,这个卡应该没有问题。问题有可能出在哪里呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 19:34

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

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