新手上路
- 积分
- 31
- 金钱
- 31
- 注册时间
- 2013-5-14
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-5-15 17:03:30
|
显示全部楼层
回复【4楼】正点原子:
---------------------------------
嗯。有可能是卡自身的问题。
另外,发现了计算容量里面的问题。
由于扇区数是以512一扇区来算的,但是,实际可能是其它值,我手中的卡就是1024的(V2.0的卡,V1.0 CSD Version)。
//每扇区的字节数必为512,因为如果不是512,则初始化不能通过.
事实上1024也可以初始化过去。
//如果为SDHC卡,按照下面方式计算
if((csd[0]&0xC0)==0x40) //V2.00的卡 //这里不知道是不是指的2.0的SD卡,实际上这里应该指CSD Version
{
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; //从csd[5]&15来看,这段代码还是考虑扇区大小的。
csize = (csd[8] >> 6) + ((u16)csd[7] << 2) + ((u16)(csd[6] & 3) << 10) + 1;
Capacity= (u32)csize << (n - 9);//得到扇区数 //这里如果是512一扇区,-9 是对的。如果是1024一扇区的话,应该-10.
}
//其实按照扇区去计算挺麻烦的,如同上面的情况就有问题。倒不如直接计算容量,后面只要换算成MB或者GB就可以了。
一点见解。希望对遇到同样问题的人有帮助。 |
|