OpenEdv-开源电子网

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

sd卡的一些疑问,求大神给与解答一下

[复制链接]

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2014-4-1 11:30:34 | 显示全部楼层 |阅读模式
1.关于sd卡容量计算的问题
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;
}

memory capacity = (C_SIZE+1) * 512K byte  (sdhc卡  2.0协议上的)
本人理解是不是扇区数=容量/512Bytes= (C_SIZE+1) * 1024,所以求出C-size就可以求出扇区数,但是我不明白为什么程序中是  csd[9] + ((u16)csd[8],查看协议应该是寄存器

如图所示C_SIZE(69:48),应该是csd[9] ,csd[8],csd[7],而且最大支持32G,所以最后6位为0,本人疑惑的是程序中按照那种原理写出来的,希望大神们帮帮忙?
2.if(SD_Type!=SD_TYPE_V2HC)sector <<= 9;//转换为字节地址
这句话是什么意思,本人在协议书上找了好久都没有找到这句话的依据,本人英语比较烂,可能漏过了,本人菜鸟大家别嫌问的太幼稚,希望不吝赐教。
3. r1=SD_SendCmd(CMD17,sector,0X01);//读命令
看来程序)0x01是crc校验码,本人不明白的是这个不是spi自己完成的吗?为什么自己写crc校验码发送?




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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-1 11:41:49 | 显示全部楼层
回复【楼主位】zhao305149619:
---------------------------------
1、表格上面不是有相关位的描述么,对应的套进去即可得到,SPI设置的是8位数据位
2、2的9次方是多少,这个会算吧
3、看下SD_SendCmd()这个函数的操作,再看下SD卡的SPI传送模式
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
 楼主| 发表于 2014-4-1 18:33:58 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
谢谢您的回答,1.我的疑惑就是按照这个套和程序不一致,可能是自己的想的不对,希望您能帮帮忙回答稍微仔细一点点,本人比较愚钝,哈哈…………
2.我知道2的9次方,我的意思为什么要这句话,写这句话的依据是什么?
3.谢谢您的回答,我看看再研究一下spi
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-1 20:12:14 | 显示全部楼层
从最高位开始对应着数下来

附件是我的CSD和CID信息获取,你可以参考下

csdcid.txt

6.9 KB, 下载次数: 78

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
 楼主| 发表于 2014-4-1 20:47:32 | 显示全部楼层
真是太感谢您了,看了您的程序终于明白一点了,原来scd【7】是从高到底的,但是还是有点小疑问


不应该是高六位为零吗?您的程序似乎没有高六位置0,真实感谢你的耐心,希望指点迷津啊

回复 支持 反对

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
 楼主| 发表于 2014-4-14 23:01:49 | 显示全部楼层
回复【5楼】zhao305149619:
---------------------------------
这个问题我现在明白了,谢谢大神们的解答,我相信有很多像我这样的小白也会有这样的疑惑,有时间我献丑一下在论坛里发个帖子详细说一下
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-12 01:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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