OpenEdv-开源电子网

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

SD卡容量计算问题(战舰实验39代码)

[复制链接]

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
发表于 2013-5-13 13:58:31 | 显示全部楼层 |阅读模式
u32 SD_GetSectorCount(void)
{
    u8 csd[16];  
    u32 Capacity;  
    u8 n;
    u16 csize;      
//取CSD信息,如果期间出错,返回0
    if(SD_GetCSD(csd)!=0) return 0;    
    //如果为SDHC卡,按照下面方式计算
    if((csd[0]&0xC0)==0x40) //V2.00的卡
    {
csize = csd[9] + ((u16)csd[8] << 8) + 1;
Capacity = (u32)csize << 10;//得到扇区数   
    }else//V1.XX的卡
    {
n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
csize = (csd[8] >> 6) + ((u16)csd[7] << 2) + ((u16)(csd[6] & 3) << 10) + 1;
Capacity= (u32)csize << (n - 9);//得到扇区数   
    }
    return Capacity;
}



战舰实验39 SD的代码,红色加粗字部分没搞懂,麻烦原子哥给讲解下,谢谢!!!!
麻烦讲解下面三个即可:
         1、CSD[9]或者为任意数组0~15内容是多少?//(个人理解CSD[16],CSD是128位的,所以CSD[0]={7:0},以此类推...)
         2、CSD[8]>>6及
(csd[5] & 15) 的值是多少?
         3、csd[10] & 128) >> 7 的值是多少?







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-13 16:17:54 | 显示全部楼层
回复【楼主位】overlordtony:
---------------------------------
看SD卡2.0的协议
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
 楼主| 发表于 2013-5-13 16:20:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哥,你的回答老是2.0协议,我就是看完2.0协议的CSD部分还没弄明白,所以求教原子哥.................
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-13 17:13:53 | 显示全部楼层
1,CSD[16],就是CSD寄存器的整个位域,一共128位,拆分为16个字节。CSD[0],就是位域:7~0,理解正确。
2,3,通过串口printf,打印出来,就知道值是多少了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-13 17:14:20 | 显示全部楼层
另外,这部分是1.XX的协议,所以要看1.XX的协议,不好意思,之前说2.0的说错了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-7-31
在线时间
2 小时
 楼主| 发表于 2013-5-13 18:42:15 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
谢谢原子哥。

发现这么多做技术的做,开发学习板的,唯原子哥不持材傲物。实分感谢!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

16

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-3-17
在线时间
13 小时
发表于 2013-9-14 22:11:14 | 显示全部楼层
回复【楼主位】overlordtony:
---------------------------------
你好请问这部分理解了吗?csize = csd[9] + ((u16)csd[8] << 8) + 1;
其中csd中62-73位是csize的值但是这样计算下来是61-76位的16位数据那多出来的这几位数据就不管了吗?
还有就是最后为什么要+1呀???能麻烦给解释下吗?谢谢啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 03:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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