OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7417|回复: 10

有谁调试过spi模式16G/32G的sd卡?请帮助

[复制链接]

12

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-10
在线时间
15 小时
发表于 2014-9-10 13:39:46 | 显示全部楼层 |阅读模式
5金钱
代码如下:

U8 SD_Init(void)
{
    U8 temp,i,buf[4]={0};
 U16 time;
   
    spi_hi_speed(0);
    spi_ss (1);     //??±?????
    for(i=0;i<0x0A;i++) //?????±???×????·???×???74???±????????????±???????????
    {
        spi_send(0xff); //120???±??
    }

    time=0;
    do
    {
        temp=SD_SendCommand(CMD0,0,0x95);//????CMD0  ????SD?¨
        time++;
        if(time>=2000)
            return 1;
    } while(temp!=0x01);

    temp=SD_SendCommand_NoDeassert(CMD8,0x1aa,0x87);

    if(temp==0x05)  //V1.0°?±?
    {
        CardType=SD_TYPE_V1;
        spi_ss (1);     //??±?????
        spi_send(0xff);
        time=0;
        do
        {
            temp=SD_SendCommand(CMD55,0,0);
            if(temp!=0x01)
                return temp;
            temp=SD_SendCommand(ACMD41,0,0);
            time++;
        } while((temp)&&(time<200));
       
        if(time>=200)
        {
            time=0;
            do
            {
                temp=SD_SendCommand(CMD1,0,0); //????CMD1 ?¤??SD?¨
                time++;
                if(time>=200)
                {
                    return 2;
                }
            } while(temp);
            CardType=SD_TYPE_MMC;
        }

        spi_hi_speed(1);
        spi_send(0xff);
        temp = SD_SendCommand(CMD59,0,0x01);
        if(temp)
        {
            return temp; //?ü???í?ó??·???r1
        }
  
        temp=SD_SendCommand(CMD16,512,0xff);
        if(temp)
        {
   //?ü???í?ó??·???r1
            return temp ;
        }
    }
    else if(temp==0x01)  //V2.x?¨
    {
        buf[0]=spi_send(0xff);
        buf[1]=spi_send(0xff);
        buf[2]=spi_send(0xff);
        buf[3]=spi_send(0xff);
        spi_ss (1);     //??±?????
        spi_send(0xff);

  if((buf[2]==0x01)&&(buf[3]==0xaa))
  {
         time=0;
         do
         {
             temp=SD_SendCommand(CMD55,0,0);
             if(temp!=0x01)
                 return temp;
             temp=SD_SendCommand(ACMD41,0x40000000,0);
             if(time>=200)
                 return 3;
         } while(temp);
        
         temp=SD_SendCommand_NoDeassert(CMD58,0,0);
         if(temp)
             return temp;
        
         buf[0]=spi_send(0xff);
         buf[1]=spi_send(0xff);
         buf[2]=spi_send(0xff);
         buf[3]=spi_send(0xff);
        
         spi_ss (1);     //??±?????
         spi_send(0xff); //°???SD?¨????×÷?±?ò????????8???±??

         if(buf[0]&0x40)
             CardType=SD_TYPE_V2HC;
         else
             CardType=SD_TYPE_V2;
         spi_hi_speed(1);
   temp = SD_SendCommand(CMD59,0,0x01);
   if(temp)
    return temp;
   temp = SD_SendCommand(CMD16,512,0xff);
   if(temp)
    return temp;
   return 0;
        }
    }
    return temp;
}

这里,16G/32G的sd卡CMD8命令返回0xc1,没有处理分支,请接触过的高手帮忙(最好能提供源代码)。

最佳答案

查看完整内容[请看2#楼]

建议你直接用我们的例程.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-10 13:39:47 | 显示全部楼层
建议你直接用我们的例程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

234

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2014-7-8
在线时间
10 小时
发表于 2014-9-10 16:40:30 | 显示全部楼层
這部份有多可能, 有沒有需要用現成的 USB Mass storage  with UART
(簡單來說就是透過 DOS Command (UART Interface )來存取 USB / SD Card)
使用這個好處, 你專心處理目前工作, File system and USB 等覆雜問題, 我們都處理好了, 只要你透過UART下Command就可以用

有需求可以加QQ: 43752596
回复

使用道具 举报

12

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-10
在线时间
15 小时
 楼主| 发表于 2014-9-11 11:21:32 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
哪里有你们例程下载呀?谢谢!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-12 01:19:34 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-10
在线时间
15 小时
 楼主| 发表于 2014-9-12 11:47:12 | 显示全部楼层
看了‘战舰STM32开发板资料(A盘).rar ’里的代码,代码里没有对SD_SendCommand_NoDeassert(CMD8,0x1aa,0x87)返回值为0xc1,做处理呀。。
相关代码在哪个rar中,请明示,谢谢!这些块都有几个G,下载很慢。。
回复

使用道具 举报

12

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-10
在线时间
15 小时
 楼主| 发表于 2014-9-16 10:09:10 | 显示全部楼层
回复【6楼】zjxxwm:
---------------------------------
16G sd卡调试有这样情况,什么原因呢?
bytePerSec,secPerClus,RsvSecCnt,NumOfFat,FatSize,DskSize这几个参数都为0,而8G sd卡就有正常值(分别是0x0200,0x08,0x0022,0x02,0x3b3b,0x00ed6000)
是不是驱动不支持16G sd卡?请原子站长和其他高手帮忙分析分析。。谢谢!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-16 12:16:26 | 显示全部楼层
回复【7楼】zjxxwm:
---------------------------------
换卡试试,有的SD卡用SPI模式不一定可以驱动。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-10
在线时间
15 小时
 楼主| 发表于 2014-9-17 08:45:51 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子站长有没有sd卡sd模式的驱动代码,望能提供,谢谢!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-17 23:34:18 | 显示全部楼层
回复【9楼】zjxxwm:
---------------------------------
论坛就有
搜索:SDIO
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-10
在线时间
15 小时
 楼主| 发表于 2014-9-18 14:22:07 | 显示全部楼层
已找到,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 23:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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