if((csd[0]&0xC0)==0x40) //V2.00的卡
{
csize = csd[9] + ((u16)csd[8] << 8) + 1;
Capacity = (u32)csize << 10;// 1).
}
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);// 2).
}
1). 对于V2.0的卡,协议上计算方法为:Capacity=(csise+1)*512,而程序这里为什么左移10位呢,这样不是相当于乘以1024了吗?!
2). 对于V1.X的卡,这里的计算方法更是没有看懂,和协议上的计算方法Capacity = BLOCKNR * BLOCK_LEN 怎么联系起来呢?
Where:
BLOCKNR = (C_SIZE+1) * MULT
MULT = 2^C_SIZE_MULT+2 (C_SIZE_MULT < 8)
BLOCK_LEN = 2^READ_BL_LEN, (READ_BL_LEN < 12)
|