OpenEdv-开源电子网

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

SDIO卡容量计算

[复制链接]

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
发表于 2014-5-6 22:12:47 | 显示全部楼层 |阅读模式
5金钱
为什么我的8G卡,按例程读出来的是3694MB?把8G卡读成4G卡了?或者例程上限是4G卡?怎么理解?

最佳答案

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

回复【10楼】wgco: --------------------------------- 问题解决了: 我把“cardinfo->CardCapacity=(long long)(cardinfo->SD_csd.DeviceSize+1)*512*1024;//计算卡容量 ” 改为“cardinfo->CardCapacity=(long long)(cardinfo->SD_csd.DeviceSize+1)*512/1024;//计算卡容量” 然后显示为:7790MB
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
 楼主| 发表于 2014-5-6 22:12:48 | 显示全部楼层
回复【10楼】wgco:
---------------------------------
问题解决了:
我把“cardinfo->CardCapacity=(long long)(cardinfo->SD_csd.DeviceSize+1)*512*1024;//计算卡容量 ”
改为“cardinfo->CardCapacity=(long long)(cardinfo->SD_csd.DeviceSize+1)*512/1024;//计算卡容量”
然后显示为:7790MB
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-6 23:01:52 | 显示全部楼层
你用的哪个例程?
看看表征容量的是:long long类型?还是u32类型?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-7 08:15:57 | 显示全部楼层
你的是SPI驱动还是SDIO驱动,据说SDHC卡对SPI的支持不好,我的SDIO驱动显示的是7580MB
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
 楼主| 发表于 2014-5-8 11:02:30 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
long long
回复

使用道具 举报

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
 楼主| 发表于 2014-5-8 11:03:05 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
SDIO驱动
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-8 13:45:18 | 显示全部楼层
回复【5楼】wgco:
---------------------------------
那我们的例程直接就可以正常使用才对.
扩展实验,SDIO例程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
 楼主| 发表于 2014-5-8 19:54:07 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
不知为啥还是不行
/* High Capacity Card */
    else if(CardType==SDIO_HIGH_CAPACITY_SD_CARD) //高容量卡
{
  tmp=(u8)(CSD_Tab[1]&0x000000FF);  //第7个字节
cardinfo->SD_csd.DeviceSize=(tmp&0x3F)<<16;//C_SIZE
  tmp=(u8)((CSD_Tab[2]&0xFF000000)>>24);  //第8个字节
  cardinfo->SD_csd.DeviceSize|=(tmp<<8);
  tmp=(u8)((CSD_Tab[2]&0x00FF0000)>>16); //第9个字节
  cardinfo->SD_csd.DeviceSize|=(tmp);
  tmp=(u8)((CSD_Tab[2]&0x0000FF00)>>8);  //第10个字节
  cardinfo->CardCapacity=(long long)(cardinfo->SD_csd.DeviceSize+1)*512*1024;//计算卡容量
cardinfo->CardBlockSize=512;  //块大小固定为512字节
                cardinfo->CardCapacity = cardinfo->CardCapacity >> 20;

}


显示:
        OINT_COLOR=BLUE;    
        LCD_ShowString(30,144,200,16,16,"SD Size is:              MB"); //显示卡容量到TFT
     POINT_COLOR = BLACK;
     LCD_ShowNum(126, 144, SDCardInfo.CardCapacity/1024, 10, 16);

有问题吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
 楼主| 发表于 2014-5-9 08:40:44 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
我本来就是用的这几个,程序如下:
else if(CardType==SDIO_HIGH_CAPACITY_SD_CARD) //高容量卡
{
  tmp=(u8)(CSD_Tab[1]&0x000000FF);  //第7个字节
cardinfo->SD_csd.DeviceSize=(tmp&0x3F)<<16;//C_SIZE
  tmp=(u8)((CSD_Tab[2]&0xFF000000)>>24);  //第8个字节
  cardinfo->SD_csd.DeviceSize|=(tmp<<8);
  tmp=(u8)((CSD_Tab[2]&0x00FF0000)>>16); //第9个字节
  cardinfo->SD_csd.DeviceSize|=(tmp);
  tmp=(u8)((CSD_Tab[2]&0x0000FF00)>>8);  //第10个字节
  cardinfo->CardCapacity=(long long)(cardinfo->SD_csd.DeviceSize+1)*512*1024;//计算卡容量
cardinfo->CardBlockSize=512;  //块大小固定为512字节

} //end High Capacity Card


显示:
     LCD_ShowNum(126, 144, (u32)(SDCardInfo.CardCapacity>>20), 8, 16);

结果还是3694MB?
回复

使用道具 举报

17

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2013-11-13
在线时间
61 小时
 楼主| 发表于 2014-5-9 09:26:42 | 显示全部楼层
回复【10楼】wgco:
---------------------------------
是不是"LCD_ShowNum(126, 144, (u32)(SDCardInfo.CardCapacity>>20), 8, 16);"不能显示小数,而计算出来的容量是小数的原因?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 02:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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