mark52099

    1. 电子工程师,别拿一分钱不当回事 11/129106 单片机 2008-07-17
      比尔·盖茨的财富难不成也是省出来的? 只要能做到不浪费就很难得了,难怪什么东东给中国人copy出来后,就会被做烂掉。
    2. 你的是C000,用的多的设置是9800,我把倍频设到最高F800,放MP3还是一样的慢。 还有就是SD卡的速度提不起来,一提高就读不出数据了,现在最大的问题就是这两个了,还得花时间研究。 忘了说我现在的播放程序没有文件系统支持,只是把卡里的扇区数做在了程序里,上电后直接去指定扇区位置读出来送VS1003的。
    3. C8051F的SPI最大时钟是系统OSC的二分之一。 我现在比较晕的地方是怎样设置VS1003B的内核时钟倍频,说明书上看得一知半解的,看了几个程序的VS1003设置都不一样。 现在C8051F015的时钟是11.0592,分频比率是0x03,问题是MMC卡快不起来,太快就读不出了,SD卡比MMC卡的时钟频率还要低。
    4. 求教一下bozai ,在MP3播放时听起来感觉播放的很慢,播放时间比电脑上放的时间长,音调也不对劲。不知需要做些什么处理能改善此现象?你的SD卡读取速度大概是多少,我的MMC卡SCK时钟用示波器看了在1.3M左右,放128Kbps的MP3速度还行,放182K的就有点吃不消 了,感觉放出来的声音很卡,请教一下要注意些什么?
    5. uint8 MMC_SD_init() {         uint8 i;         uint8 retry;         uint8 r1=0;         uint8 type=0;        // 卡类型返回值:0xA0 SD 0xB0 MMC         SDCS = 0;                // 使能Card         SPI_speed=0x13;        //低速 SPI=300k   Fsystem=12Mhz         retry = 0;         do         {                 for(i=0;i 30) return (type=0x01); //超时退出,个别卡需要更多次循环才有反应         } while(r1 != 0x01);                // MMC、SD卡成功转到SPI模式         retry = 0; //****** SD卡在进入SPI模式后,激活命令和MMC卡一样为Cmd1,同时Cmd55+Cmd41 仍然有效******// /*        do         {                 r1 = MMC_SD_SendCmd(1, 0);        //发Cmd1(active激活)命令                 retry++;                 if(retry > 100) return 1;        //超时退出         } while(r1);*/         do         {                 r1 = MMC_SD_SendCmd(55, 0);        // 先发送 Cmd55                 if(r1 == 0x01)                        // 如果有反应                 {                         r1 = MMC_SD_SendCmd(41,0);        // 再发送 Cmd41 进行激活                         if(r1 == 0x00) type = 0x10;        // 激活成功就是SD卡                 }                 else {                                   // 如果发送 Cmd55无反应,改发送 Cmd1                                 r1 = MMC_SD_SendCmd(1,0);                                 if(r1 == 0x00) type = 0x20;        // 激活成功就是MMC卡                          }                 retry++;                 if(retry > 255) return (type=0x01);        // 超时退出, 个别卡需要更多次循环才有反应         } while(r1 != 0x00);                // MMC、SD卡激活后的返回值均为0x00*/ //        SPI_SendByte(0xFF);        // 高速SPI前先发送8个时钟 //        SPI_speed = 0x07;        // 切换到高速 SPI         r1 = MMC_SD_SendCmd(59, 0);        //关CRC         r1 = MMC_SD_SendCmd(16, 512);        //设置读取一次的字节数         SDCS = 1;                        // 关闭Card //        SPI_speed=0x07;        //切换到高速 SPI         return type;        //参数返回,1为初始化错误,10为SD卡,20为MMC卡 } //----------------------------------------------------------- //        End of File //-----------------------------------------------------------
    6. //--------------------------------------------------- //        函数名:MMC_SD_ReadSingleBlock //        功  能:读一个扇区 //        参  数:扇区,数据缓冲区 //        返回值: //--------------------------------------------------- uint8 MMC_SD_ReadSingleBlock(uint32 sector,uint8 *buffer) {         uint8 r1;         uint16 i;         SDCS=0;                // 使能Card         r1 = MMC_SD_SendCmd(17, sector
    7. //---------SD_MMC.C----------------- //--------------------------------------------------------- //        SD_MMC  底层驱动函数库 //        编译环境:Keil C V2.40 //        编写日期:2008-04-07 //        最后更新:2008-05-04 //--------------------------------------------------------- #include "main.h" #include "sd_mmc.h" //--------------------------------------------------- //        函数名:SPI_SendByte //        功  能:SPI 数据发送 //        参  数:uchar //        返回值: //--------------------------------------------------- void SPI_SendWreit(uchar temp) {         SPI0DAT=temp;         while(TXBSY);        // 查询发送标志位 } //--------------------------------------------------- //        函数名:SPI_SendByte //        功  能:SPI传送一个字节 //        参  数:uchar //        返回值:uchar //--------------------------------------------------- uint8 SPI_SendByte(uint8 val)        // uint8= uchar {         SPI0DAT = val;         while(TXBSY);         return SPI0DAT; } //--------------------------------------------------- //        函数名:MMC_SD_SendCmd //        功  能:发送卡命令 //        参  数:uint8,uint32 //        返回值:uint8 //--------------------------------------------------- uint8 MMC_SD_SendCmd(uint8 Cmd, uint32 arg) {         uint8 r1;         uint8 retry=0;                   SPI_SendWreit(0xFF);        //发命令前先发送8个时钟                   SPI_SendWreit(Cmd | 0x40);        //分别写入命令         SPI_SendWreit(arg>>24);         SPI_SendWreit(arg>>16);         SPI_SendWreit(arg>>8);         SPI_SendWreit(arg);         SPI_SendWreit(0x95);                //仅本次有效的 CRC值                            while((r1 = SPI_SendByte(0xFF)) == 0xFF)        //等待响应                 if(retry++ > 8) break;        //超时退出         return r1;        //返回状态值 }

最近访客

< 1/1 >

统计信息

已有59人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:7

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言