Information Technology Reference
In-Depth Information
void MSDReadCapacityHandler()
{
dword one = 0x1;
dword C_size;
dword C_mult;
dword Mult;
dword C_size_U;
dword C_size_H;
dword C_size_L;
dword C_mult_H;
dword C_mult_L;
dword C_Read_Bl_Len;
// The block length is in byte 5, bits 3..0 in the MultiMediaCard's CSD register.
// Block length = 2^(C_Read_Bl_Len)
// If block length = 512, C_Read_Bl_Len = 9 because 2^9 = 512.
C_Read_Bl_Len = gblCSDReg._byte[5] & 0x0f;
// Shift left C_Read_Bl_Len positions to get the block-length value.
gblBLKLen._dword = one << C_Read_Bl_Len;
// The C_size value is 12 bits.
// The two MSbs are in byte 6, bits 1..0.
// The next 8 bits are in byte 7.
// The two LSbs are in byte 8, bits 7..6.
C_size_U = gblCSDReg._byte[6] & 0x03;
C_size_H = gblCSDReg._byte[7];
C_size_L = (gblCSDReg._byte[8]&0xC0) >> 6;
C_size = (C_size_U<<10) | (C_size_H<<2) | (C_size_L);
// C_mult is a 3-bit value stored in two bytes.
// The two MSbs are in byte 9, bits 1..0.
// The LSb is in byte 10, bit 7.
C_mult_H = gblCSDReg._byte[9] & 0x03;
C_mult_L = (gblCSDReg._byte[10] & 0x80) >> 7;
C_mult = (C_mult_H << 1 ) | C_mult_L;
Search WWH ::




Custom Search