Initializing SD/MMC card MMC SD Card interfacing and FAT16 Filesystem with 8051/8052free 8051 Microcontroller Projects AVR PIC Microcontroller Projects Tutorials Ebooks Libraries, interfacing tutorials, lcd tutorial, stepper motor, dc motor 8051 assembly language programming electronics and communication ECE CSE pdf ebooks library BE final year project ideas Embedded systems

 
8051 microcontroller 8051 microcontroller
Initializing SD/MMC card : MMC SD Card interfacing


►Initializing SD/MMC card

A. Setting up the card for SPI Communication

Initializing the card, and setting it up for communication is the very first step. These are the most fundamental steps necessary before the card can be accessed. The CardType will be set as either a ‘0’, which is a MMC card, and cannot be used by the SPI interface, a ‘1’which is an SD card, version 1, or a ‘2’, which is an SD card, version 2

CODE:
BYTE SD_Init()
{
   WORD CardStatus; // R2 value from status inquiry...
   WORD Count;      // local counter
   
   // Global CardType - b0:MMC, b1:SDv1, b2:SDv2

   /* initial speed is slow... */
   SPI_Init( kHz400 );
   
   /* disable SPI chip select... */
   SPI_DisableCS();

   /* fill send data with all ones - 80 bits long to   */
   /* establish link with SD card this fulfills the    */
   /* 74 clock cycle requirement...  */
   for(Count=0;Count<10;Count++)
      SPI_Byte( 0xFF );

   /* enable the card with the CS pin... */
   SPI_EnableCS();

   /* ************************************************ */
   /* SET SD CARD TO SPI MODE - IDLE STATE...          */
   /* ************************************************ */
   Count = 1000;     // one second...
   CardType = 0;
   
   /* wait for card to enter IDLE state... */
   do
   {
      Delay(1);
      SD_Command( CMD_GO_IDLE_STATE, 0 );
   } while((SD_GetR1() != IDLE_STATE) && (--Count));  

   /* timeout if we never made it to IDLE state... */
   if( !Count )
      return( SD_TIME_OUT );

   /* ************************************************ */
   /* COMPLETE SD CARD INITIALIZATION                  */
   /* FIGURE OUT WHAT TYPE OF CARD IS INSTALLED...     */
   /* ************************************************ */
   Count = 2000;     // two seconds...
   
   /* Is card SDSC or MMC? */
   SD_Command( CMD_APP_CMD, 0 );
   SD_Command( ACMD_SEND_OP_COND, 0 );
   if( SD_GetR1() <= 1 )
   {
      CardType = 2;
   }
   else
   {
      CardType = 1;
   }
   
   /* wait for initialization to finish... */
   do
   {
      Delay(1);
      if( CardType == 2 )
      {
         SD_Command( CMD_APP_CMD, 0 );
         SD_Command( ACMD_SEND_OP_COND, 0 );
      }
      else
      {
         SD_Command( CMD_SEND_OP_COND, 0 );
      }
   } while(SD_GetR1() && --Count);

   if( !Count )
      return( SD_TIME_OUT );

   /* ************************************************ */
   /* QUERY CARD STATUS...                             */
   /* ************************************************ */
   SD_Command( CMD_SEND_STATUS, 0 );
   CardStatus = SD_GetR2();

   if( CardStatus )
      return( SD_ERROR );

   /* ************************************************ */
   /* SET BLOCK SIZE...                                */
   /* ************************************************ */
   SD_Command( CMD_SET_BLOCKLEN, 512 );
   if( SD_GetR1() )
   {
      CardType = 0;
      return( SD_ERROR );
   }

   /* ************************************************ */
   /* SWITCH TO HIGHEST SPI SPEED...                   */
   /* ************************************************ */
   SPI_Init( MHz10 );

   /* disable the card with the CS pin... */
   SPI_DisableCS();

   /* return OK... */
   return( 0 );
}
 



Tutorial Index
Interface to Chan’s Library of functions SD Card Initialization
Target development platform Reading and Writing a single sector
Setting up the SPI port during startup.A51 Working with diskio.c
Global type definitions and variables Pulling it all together
Basic SPI function Index Page


Google Search for Microcontrollers!

Google
 

© 2010 Rickey's World

8051 Microcontroller Projects 8051 AVR tutorials PIC microcontroller, 8051 assembly language programming electronics and communication ECE CSE pdf ebooks library BE final year project ideas Embedded systems