STM32
直播中

乔占宽

7年用户 186经验值
私信 关注
[问答]

请问SD卡实验的容量计算公式中的参数代表了什么?

仿真了一下,把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个寄存器当中的内容是什么用处??

回帖(1)

傅筹更

2019-7-3 08:03:50
这个你要看SD卡的资料了,看光盘的sd卡资料,然后找找csd的描述.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分