Hi Folks,

There does seem to be a bitfield problem. We tried splitting the field
CCC into 8 and 4, and that did not help. Anybody have any thoughts?

Thanks,
  Garst
--- Begin Message ---
Hi garst.... i am having problem with the CSD structure...
I was going to post it on the mailing list... i thought i might ask you 
first.... i think it might be a bug.....
read below....





---------------------------------------------------------

Hi,

I am running into a problem using bit operations in C structures. The compiler 
doesn't seem to produce the proper code to access the bits.... anyone have 
this problem before...?   is this a bug..?  See the structure below....

I am trying to access    csd.READ_BL_LEN
which are bits 44-47 according to the structure... (starting from bit zero at 
top)

but when compiled and loaded on the MSP430... i have verified using debugging 
output  that it is actually showing bits 40-43...  

essentially  I want to read the low nibble of the 5th byte from top....  but 
it is giving me the high nibble of the 5th byte from top....     

To verify, ... i changed  unsigned CCC:12  to unsigned CCC:8    ... which 
removes 4 bits.....  therefore shifting the everythihg 4 bits up....   then 
csd.READ_BL_LEN   starting showing the right value...

also    the low nibble of  buff[5]   shows the exact value that i should be 
getting in csd.READ_BL_LEN....



union reg16b_t {
        struct csd_t {
    unsigned CSD_STRUCTURE:2; //
    unsigned SPEC_VERS:4; // Version
    unsigned R1:2; // reserved
    unsigned TAAC:8; // Read Access Time
    unsigned NASC:8; // Read Access Time in CLK cycles
    unsigned TRAN_SPEED:8; // Max Date Transfer Rate
    unsigned CCC:12;// shout be f4 Card Command Class
    unsigned READ_BL_LEN:4; // Max. Read Data Block Length
    unsigned READ_BL_PARTIAL:1; // Partial Blocks for Read Allowed
    unsigned WRITE_BLK_MISALIGN:1; // Write Block Misalignment
    unsigned READ_BLK_MISALIGN:1; // Read Block Misalignment
    unsigned DSR_IMP:1; // DSR Implemnted
    unsigned R2:2; // reserved
    unsigned C_SIZE:12;//Device Size
    unsigned VDD_R_CURR_MIN:3; //Max. Read Current @Vdd Min.
    unsigned VDD_R_CURR_MAX:3; //Max. Read Current @Vdd
    unsigned VDD_W_CURR_MIN:3; //Max. Write Current @Vdd Min
    unsigned VDD_W_CURR_MAX:3; //Max. Write Current @Vdd
    unsigned C_SIZE_MULT:3; //Device Size Multiplier
    unsigned SECTOR_SIZE:5; //Erase Sector Size
    unsigned ERASE_GRP_SIZE:5; //Erase Group Size
    unsigned WP_GRP_SIZE:5; //Write protect group Size
    unsigned WP_GRP_ENABLE:1; //Write protect group Enable
    unsigned DEFAULT_ECC:2; //
    unsigned R2W_FACTOR:3; //Read to Write speed factor
    unsigned WRITE_BL_LEN:4; //Max. Write Data Block Length
    unsigned WRITE_BL_PARTIAL:1; //Partial blocks allowed 0
    unsigned R3:5; //Reseved
    unsigned FILE_FORMAT_GRP:1; //File format of selected Group
    unsigned COPY:1; //Copy Flag (OTP)
    unsigned PERM_WRITE_PROTECT:1; //Permanent write protection
    unsigned TMP_WRITE_PROTECT:1; //Temporary write protection.
   unsigned FILE_FORMAT:2; //File format of card
   unsigned ECC:2; //ECC code
    unsigned CRC:7; //CRC
    unsigned STOP:1; //always 1
        }csd;
        unsigned char buff[16];
};


--- End Message ---

Reply via email to