您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 技术问题分享-BF533的SD卡/MMC卡初始化
本帖共有967个阅读者
发表帖子 发表投票 回复主题
技术问题分享-BF533的SD卡/MMC卡初始化
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
技术问题分享-BF533的SD卡/MMC卡初始化

QQ技术支持群内客户的提问:

请问初始化mmc卡和初始化sd卡有什么不同呢?我新买的SD卡,,连接到533开发板后,无法初始化。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/12/7 15:31:33
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
OP:请把无法初始化的现象截图贴一下。问题里信息量太少,不好做判断。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/12/7 15:32:09
tianjietao(论坛新手)
tianjietao
头衔:社区公民
帮派:无帮无派
帖数:25
金钱:326
积分:36
注册时间:2012/8/13
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

void MMC_Init(void)
{
    unsigned char retry,temp;
    unsigned char i;
    unsigned char r1;
    
tryagain:  
    for (i=0;i<10;i++)
    {
     SPI_TransferByte(0xff); //send 74 clock at least!!!延迟最少74个周期
    }
    //一次发送1bit,1个BYTE是8个时钟,10次循环为80个时钟周期
    SPI_TransferByte(MMC_RESET);//复位mmc
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x00);//以上为命令参数,而cmd0没有参数,全为常数,不需要再运行时间内计算出来,
    SPI_TransferByte(0x95);//crc校验
    SPI_TransferByte(0xff);
    SPI_TransferByte(0xff);//命令结束
    //切换到spi模式后,crc自动关闭,重启crc,命令cmd59配置
retry=0;
    do{
     feeddog();
     temp=Write_Command_MMC(MMC_INIT,0);
     retry++;
     if(retry==100)
        {
   //printf("SD/MMC_INIT is ERROR!\n ");
   goto tryagain;    
        }
    }while(temp!=0);//发送cmd1,直到返回0x00,进入ready状态
   //printf("SD/MMC_INIT is OK!\n");
  
}

一直停在这里,不断的打印SD/MMC_INIT is ERROR


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/7 15:35:36
tianjietao(论坛新手)
tianjietao
头衔:社区公民
帮派:无帮无派
帖数:25
金钱:326
积分:36
注册时间:2012/8/13
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
开发板配的mmc卡,每次都可以初始化正确,我买的新的sd卡,大部分时间都初始化不了,但有一两次成功

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/7 15:45:09
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你把SPI速度分频系数改为550.,慢一点。retry==100,把这个值改为1000.

SPI对超过2G的卡支持不是很好,也可能是这个驱动对大容量卡支持不好。之前有同事做过8G的,在SPI分批系数为550时,可以正确访问,但速度太慢了,不会有实际用途。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/12/7 15:59:30
tianjietao(论坛新手)
tianjietao
头衔:社区公民
帮派:无帮无派
帖数:25
金钱:326
积分:36
注册时间:2012/8/13
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我这个卡是4G的sd卡,分频我都改成了最快的设置2,即25Mhz,当程序从开始的时候运行,可以正常初始化,当我拔出sd卡(带电),再插上,初始化程序一样的同样包含 MMC_HardwareInitial();
MMC_Init();这两个函数,就会出现有时可以初始化,有时不能初始化的现象。而我使用开发板带的mmc卡,热插热拔都可以正常初始化。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/7 16:10:47
tianjietao(论坛新手)
tianjietao
头衔:社区公民
帮派:无帮无派
帖数:25
金钱:326
积分:36
注册时间:2012/8/13
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我把那个100改成了1000,正常了,谢谢

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/12/7 16:14:59
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159337 Call, 1 Queries, Processed in 0.031250 second(s),