Information Center for ARM

Example description

  
SDIO_uSDCard  How to use the SDIO to drive an SD card memory
  
Example Description 

This example provides a basic example of how to use the SDIO firmware library and
an associate driver to perform read/write operations on the SD Card memory (SD Card 
V1.0, V1.1, V2.0 and SDHC (High Capacity) protocol)that could be mounted on the 
STM322xG_EVAL board.
The example provides different SD Card transfer states and operations and here
below a description of each step:
  - First the SDIO peripheral and SD Card are initialized using the SD_Init()
    function: 
            - Configure the SDIO according to the desired SDIO_CK clock frequency.
            - Reset the SD Card
            - Identify the SD Card
            - Initializes the SD Card
            - Get the SD Card Info
            - Select the SD Card
            - Enable the Wide Bus mode (4-bit data)

  - SD Card Erase Operation
            - Starts an Erase operation: Erase the corresponding blocks using 
              the SD_Erase() function 
            - Read the Erased blocks using the SD_ReadMultiBlocks() function
            - Test if the corresponding Blocks are well erased: check if the 
              EraseStatus variable is equal to PASSED. If the erase operation is
              passed LED1 is turned ON.
            
  - SD Card Single Block Operation
            - Starts a Write operation: Write a single Block using the SD_WriteBlock()
              function 
            - Read a single Block using the SD_ReadBlock() function
            - Compare the written Block and the read one: check if the TransferStatus1 
              variable is equal to PASSED. If the Single Block Read/write operation
              is passed LED2 is turned ON.

  - SD Card Multiple Block Operation
            - Starts a Multiple Write operation: Write a multi Blocks using the 
              SD_WriteMultiBlocks() function. 
            - Read a multiple Blocks using the SD_ReadMultiBlocks() function
            - Compare the written Blocks and the read one: check if the TransferStatus2 
              variable is equal to PASSED. If the Multiple Blocks Read/Write operation
              is passed LED3 is turned ON.

All data transfers are made by DMA.
At each operation, the SD Card presence and status is checked using the SD_GetStatus()
function and a global variable "Status" storing the results of the last operation.

SD Card Operations and Written/Read data correctness is signaled  by LED 
lightening and though as follow:
   - If the Erase operation is PASSED then LED1 ON else the LED4 is ON and LED1 is OFF 
   - If the Single Block Write/Read operation is PASSED then LED2 ON else the LED4 is ON and LED2 is OFF
   - If the Multi Blocks Write/Read operation is PASSED then LED3 ON else the LED4 is ON and LED3 is OFF
   - Any SD Card operation including the SD Initialization error is signaled by
     LED4 ON.

Directory contents 

  - SDIO/uSDCard/system_stm32f2xx.c   STM32F2xx system clock configuration file
  - SDIO/uSDCard/stm32f2xx_conf.h     Library Configuration file
  - SDIO/uSDCard/stm32f2xx_it.c       Interrupt handlers
  - SDIO/uSDCard/stm32f2xx_it.h       Header for stm32f2xx_it.c
  - SDIO/uSDCard/main.c               Main program
  
	  The "system_stm32f2xx.c" is generated by an automatic clock configuration 
      tool and can be easily customized to your own configuration. 
      To select different clock setup, use the "STM32F2xx_Clock_Configuration_V1.0.0.xls" tool.

Hardware and Software environment 

  - This example runs on STM32F2xx Devices.
  
  - This example has been tested with STM322xG-EVAL RevB and can be easily
    tailored to any other development board.

  - STM322xG-EVAL RevB
     - Make sure that Jumper JP22 is in position 1<->2

  - STM322xG-EVAL RevB
     - Make sure that Jumpers JP22 and JP16 are in position 1<->2