搜索
bottom↓
回复: 5

PIC单片机访问4G以上SD卡的问题请教

[复制链接]

出0入0汤圆

发表于 2009-3-26 16:31:42 | 显示全部楼层 |阅读模式
现手上有一项目要用到SD卡,写了个程序,2G以上的SD卡使用正常,能正常读取SD上的数据。但是换到4G以上的SD卡时就不正常了,
    在坛子上看了很多人的例子,包括bozai的程序,知道4G以上使用的是SD2.0协议,而4G以下的使用SD1.0协议,但是我认为两者的区别仅限于读写的时候1.0是以字节为单位,而2.0以block(也就是512B)为单位,其他地方相同。
    比如,要读取绝对地址为0x200开始的512字节,如果是1.0协议的话,读的时候就用0x200做为地址;而如果是2.0协议的话,就用0x200/0x200=1为地址,但是我用1做为地址读的时候,总返回结果0x20,报告地址错误。
    我想请问一个各位,这是什么回事?是不是在初始化的时候还需要注意点什么,是我没考虑到的。
    以下是测试用的源码:
   BYTE SD_InitializeCard(void)
{
        BYTE stat;
        DWORD Count;
    BYTE CARD_TYPE;
       
        Count = 0;
        PORTGbits.RG9 = 0;
        Delay8Tcy();
        // index 0: GO_IDLE_STATE command
        stat = SD_CardCommand(0, 0,0x95);
        // repeat until get 0x01 (In Idle State) answer.
        while( (stat != 1)  )
        {
                stat = SD_CardCommand(0, 0,0x95);
                Count++;
                if ( Count > 8000)
                {
                        return 1;        //failed
                }
        }
        Delay_Us(100);
   
    stat = SD_CardCommand(8, 0x1aa, 0x87);
    if(stat==5) CARD_TYPE=1;      //sd1.0
        // index 1: SEND_OP_COMMAND, card initializing
        // repeat until get 0x00 (In Idle State bit cleared).
   while ( (stat != 0) && (Count<200) )
        {
                Delay_Us(1);
                stat = SD_CardCommand(55, 0,0);

                Delay_Us(1);
                stat = SD_CardCommand(41, 0,0);
        Count++;
        }


    BYTE i;

    while((stat=SD_CardCommand(58, 0,0))!=0x00) ; /*read OCR*/
                for(i=0;i<4;i++)buffer=SPI_read(0xff);

                if(buffer[0]&(1<<6))
                        address_mode = BLOCK_MODE;
                else
                        address_mode = BYTE_MODE;

        PORTGbits.RG9 = 1;
       
        return 0;
}

出0入0汤圆

发表于 2009-8-2 15:51:11 | 显示全部楼层
你是用PIC单片机做的吗?
可以聊一下
  QQ:158993042

出0入0汤圆

发表于 2009-9-3 16:05:53 | 显示全部楼层
这个问题不是我发去PICPIC的么?你怎么又发回来了?

出0入0汤圆

发表于 2009-9-4 09:35:21 | 显示全部楼层
MICROCHIP的现成协议栈你们有没有实验过,我只实验过2G的是可以的。

出0入0汤圆

发表于 2010-2-26 14:05:53 | 显示全部楼层
Mark 一下。

出0入0汤圆

发表于 2010-3-13 22:09:11 | 显示全部楼层
最近做PIC32的实验板,看了一下,SDHC,目前PIC的应用函数库协议栈已经可以支持,建议直接抄代码试验一下,MCHP有提供针对PIC32,PIC24,PIC18F的移植。MCHP提供了很多资料,我们做应用,只要抄得到位,可以省很多时间,避免重复开发重复劳动。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 12:13

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

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