我仿真了一下,把csd当中的一些数据读出来,但是我不明白,这些数据代表什么意识,我又看了CSD_register,用里面计算的公式 来验证,还是感觉不正确,不理解这些参数代表什么作用。
i = csd[6]&0x03; //csd[6]=0x83, 0x0003
i<<=8; //0x0300
i += csd[7]; //csd[7]=0xcd, 0x03cd i*1个区=32个块
i<<=2; //0x0f34
i += ((csd[8]&0xc0)>>6);//csd[8]=0x30,(csd[8]&0xc0)=0x00
//C_SIZE_MULT
r1 = csd[9]&0x03; //csd[9]=0xb7, 0x03
r1<<=1; //0x06
r1 += ((csd[10]&0x80)>>7);//csd[10]=0xff
r1+=2;//BLOCKNR //r1=9
temp = 1; //
while(r1) //
{
temp*=2; //
r1--; // temp=512(0x0200)块倍数
}
Capacity = ((u32)(i+1))*((u32)temp);//0x001e6a00 BLOCKNR = (C_SIZE)* MULT
// READ_BL_LEN
i = csd[5]&0x0f; // 0x0a(1010)1024 好像这里更像扇区的值
//BLOCK_LEN
temp = 1; //
while(i) //
{
temp*=2; //
i--; // temp=1024
}
//The final result
Capacity *= (u32)temp;//字节为单位 0x79a80000
CSD_register里面的公式:
存储器容量= BLOCKNR * BLOCK_LEN
BLOCKNR = (C_SIZE)* MULT
MULT = (C_SIZE_MULT << 8) * 2^(C_SIZE_MULT + 2)
BLOCK_LEN = (READ_BL_LEN << 12) * 2^(READ_BL_LEN)
好像这里的计算不是按照这个计算公式来的,
我大致看一了下,这里只用到csd[5:10],能不能解释一下这6个寄存器当中的内容是什么用处??
|