STM32F10x Standard Peripherals Library  3.5.0
/opt/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_sdio.h
Go to the documentation of this file.
00001 
00023 /* Define to prevent recursive inclusion -------------------------------------*/
00024 #ifndef __STM32F10x_SDIO_H
00025 #define __STM32F10x_SDIO_H
00026 
00027 #ifdef __cplusplus
00028  extern "C" {
00029 #endif
00030 
00031 /* Includes ------------------------------------------------------------------*/
00032 #include "stm32f10x.h"
00033 
00046 typedef struct
00047 {
00048   uint32_t SDIO_ClockEdge;            
00051   uint32_t SDIO_ClockBypass;          
00055   uint32_t SDIO_ClockPowerSave;       
00059   uint32_t SDIO_BusWide;              
00062   uint32_t SDIO_HardwareFlowControl;  
00065   uint8_t SDIO_ClockDiv;              
00068 } SDIO_InitTypeDef;
00069 
00070 typedef struct
00071 {
00072   uint32_t SDIO_Argument;  
00077   uint32_t SDIO_CmdIndex;  
00079   uint32_t SDIO_Response;  
00082   uint32_t SDIO_Wait;      
00085   uint32_t SDIO_CPSM;      
00088 } SDIO_CmdInitTypeDef;
00089 
00090 typedef struct
00091 {
00092   uint32_t SDIO_DataTimeOut;    
00094   uint32_t SDIO_DataLength;     
00096   uint32_t SDIO_DataBlockSize;  
00099   uint32_t SDIO_TransferDir;    
00103   uint32_t SDIO_TransferMode;   
00106   uint32_t SDIO_DPSM;           
00109 } SDIO_DataInitTypeDef;
00110 
00123 #define SDIO_ClockEdge_Rising               ((uint32_t)0x00000000)
00124 #define SDIO_ClockEdge_Falling              ((uint32_t)0x00002000)
00125 #define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_ClockEdge_Rising) || \
00126                                   ((EDGE) == SDIO_ClockEdge_Falling))
00127 
00135 #define SDIO_ClockBypass_Disable             ((uint32_t)0x00000000)
00136 #define SDIO_ClockBypass_Enable              ((uint32_t)0x00000400)    
00137 #define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_ClockBypass_Disable) || \
00138                                      ((BYPASS) == SDIO_ClockBypass_Enable))
00139 
00147 #define SDIO_ClockPowerSave_Disable         ((uint32_t)0x00000000)
00148 #define SDIO_ClockPowerSave_Enable          ((uint32_t)0x00000200) 
00149 #define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_ClockPowerSave_Disable) || \
00150                                         ((SAVE) == SDIO_ClockPowerSave_Enable))
00151 
00159 #define SDIO_BusWide_1b                     ((uint32_t)0x00000000)
00160 #define SDIO_BusWide_4b                     ((uint32_t)0x00000800)
00161 #define SDIO_BusWide_8b                     ((uint32_t)0x00001000)
00162 #define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BusWide_1b) || ((WIDE) == SDIO_BusWide_4b) || \
00163                                 ((WIDE) == SDIO_BusWide_8b))
00164 
00173 #define SDIO_HardwareFlowControl_Disable    ((uint32_t)0x00000000)
00174 #define SDIO_HardwareFlowControl_Enable     ((uint32_t)0x00004000)
00175 #define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HardwareFlowControl_Disable) || \
00176                                                 ((CONTROL) == SDIO_HardwareFlowControl_Enable))
00177 
00185 #define SDIO_PowerState_OFF                 ((uint32_t)0x00000000)
00186 #define SDIO_PowerState_ON                  ((uint32_t)0x00000003)
00187 #define IS_SDIO_POWER_STATE(STATE) (((STATE) == SDIO_PowerState_OFF) || ((STATE) == SDIO_PowerState_ON)) 
00188 
00197 #define SDIO_IT_CCRCFAIL                    ((uint32_t)0x00000001)
00198 #define SDIO_IT_DCRCFAIL                    ((uint32_t)0x00000002)
00199 #define SDIO_IT_CTIMEOUT                    ((uint32_t)0x00000004)
00200 #define SDIO_IT_DTIMEOUT                    ((uint32_t)0x00000008)
00201 #define SDIO_IT_TXUNDERR                    ((uint32_t)0x00000010)
00202 #define SDIO_IT_RXOVERR                     ((uint32_t)0x00000020)
00203 #define SDIO_IT_CMDREND                     ((uint32_t)0x00000040)
00204 #define SDIO_IT_CMDSENT                     ((uint32_t)0x00000080)
00205 #define SDIO_IT_DATAEND                     ((uint32_t)0x00000100)
00206 #define SDIO_IT_STBITERR                    ((uint32_t)0x00000200)
00207 #define SDIO_IT_DBCKEND                     ((uint32_t)0x00000400)
00208 #define SDIO_IT_CMDACT                      ((uint32_t)0x00000800)
00209 #define SDIO_IT_TXACT                       ((uint32_t)0x00001000)
00210 #define SDIO_IT_RXACT                       ((uint32_t)0x00002000)
00211 #define SDIO_IT_TXFIFOHE                    ((uint32_t)0x00004000)
00212 #define SDIO_IT_RXFIFOHF                    ((uint32_t)0x00008000)
00213 #define SDIO_IT_TXFIFOF                     ((uint32_t)0x00010000)
00214 #define SDIO_IT_RXFIFOF                     ((uint32_t)0x00020000)
00215 #define SDIO_IT_TXFIFOE                     ((uint32_t)0x00040000)
00216 #define SDIO_IT_RXFIFOE                     ((uint32_t)0x00080000)
00217 #define SDIO_IT_TXDAVL                      ((uint32_t)0x00100000)
00218 #define SDIO_IT_RXDAVL                      ((uint32_t)0x00200000)
00219 #define SDIO_IT_SDIOIT                      ((uint32_t)0x00400000)
00220 #define SDIO_IT_CEATAEND                    ((uint32_t)0x00800000)
00221 #define IS_SDIO_IT(IT) ((((IT) & (uint32_t)0xFF000000) == 0x00) && ((IT) != (uint32_t)0x00))
00222 
00230 #define IS_SDIO_CMD_INDEX(INDEX)            ((INDEX) < 0x40)
00231 
00239 #define SDIO_Response_No                    ((uint32_t)0x00000000)
00240 #define SDIO_Response_Short                 ((uint32_t)0x00000040)
00241 #define SDIO_Response_Long                  ((uint32_t)0x000000C0)
00242 #define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \
00243                                     ((RESPONSE) == SDIO_Response_Short) || \
00244                                     ((RESPONSE) == SDIO_Response_Long))
00245 
00253 #define SDIO_Wait_No                        ((uint32_t)0x00000000) 
00254 #define SDIO_Wait_IT                        ((uint32_t)0x00000100) 
00255 #define SDIO_Wait_Pend                      ((uint32_t)0x00000200) 
00256 #define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_Wait_No) || ((WAIT) == SDIO_Wait_IT) || \
00257                             ((WAIT) == SDIO_Wait_Pend))
00258 
00266 #define SDIO_CPSM_Disable                    ((uint32_t)0x00000000)
00267 #define SDIO_CPSM_Enable                     ((uint32_t)0x00000400)
00268 #define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_Enable) || ((CPSM) == SDIO_CPSM_Disable))
00269 
00277 #define SDIO_RESP1                          ((uint32_t)0x00000000)
00278 #define SDIO_RESP2                          ((uint32_t)0x00000004)
00279 #define SDIO_RESP3                          ((uint32_t)0x00000008)
00280 #define SDIO_RESP4                          ((uint32_t)0x0000000C)
00281 #define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || ((RESP) == SDIO_RESP2) || \
00282                             ((RESP) == SDIO_RESP3) || ((RESP) == SDIO_RESP4))
00283 
00291 #define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF)
00292 
00300 #define SDIO_DataBlockSize_1b               ((uint32_t)0x00000000)
00301 #define SDIO_DataBlockSize_2b               ((uint32_t)0x00000010)
00302 #define SDIO_DataBlockSize_4b               ((uint32_t)0x00000020)
00303 #define SDIO_DataBlockSize_8b               ((uint32_t)0x00000030)
00304 #define SDIO_DataBlockSize_16b              ((uint32_t)0x00000040)
00305 #define SDIO_DataBlockSize_32b              ((uint32_t)0x00000050)
00306 #define SDIO_DataBlockSize_64b              ((uint32_t)0x00000060)
00307 #define SDIO_DataBlockSize_128b             ((uint32_t)0x00000070)
00308 #define SDIO_DataBlockSize_256b             ((uint32_t)0x00000080)
00309 #define SDIO_DataBlockSize_512b             ((uint32_t)0x00000090)
00310 #define SDIO_DataBlockSize_1024b            ((uint32_t)0x000000A0)
00311 #define SDIO_DataBlockSize_2048b            ((uint32_t)0x000000B0)
00312 #define SDIO_DataBlockSize_4096b            ((uint32_t)0x000000C0)
00313 #define SDIO_DataBlockSize_8192b            ((uint32_t)0x000000D0)
00314 #define SDIO_DataBlockSize_16384b           ((uint32_t)0x000000E0)
00315 #define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DataBlockSize_1b) || \
00316                                   ((SIZE) == SDIO_DataBlockSize_2b) || \
00317                                   ((SIZE) == SDIO_DataBlockSize_4b) || \
00318                                   ((SIZE) == SDIO_DataBlockSize_8b) || \
00319                                   ((SIZE) == SDIO_DataBlockSize_16b) || \
00320                                   ((SIZE) == SDIO_DataBlockSize_32b) || \
00321                                   ((SIZE) == SDIO_DataBlockSize_64b) || \
00322                                   ((SIZE) == SDIO_DataBlockSize_128b) || \
00323                                   ((SIZE) == SDIO_DataBlockSize_256b) || \
00324                                   ((SIZE) == SDIO_DataBlockSize_512b) || \
00325                                   ((SIZE) == SDIO_DataBlockSize_1024b) || \
00326                                   ((SIZE) == SDIO_DataBlockSize_2048b) || \
00327                                   ((SIZE) == SDIO_DataBlockSize_4096b) || \
00328                                   ((SIZE) == SDIO_DataBlockSize_8192b) || \
00329                                   ((SIZE) == SDIO_DataBlockSize_16384b)) 
00330 
00338 #define SDIO_TransferDir_ToCard             ((uint32_t)0x00000000)
00339 #define SDIO_TransferDir_ToSDIO             ((uint32_t)0x00000002)
00340 #define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \
00341                                    ((DIR) == SDIO_TransferDir_ToSDIO))
00342 
00350 #define SDIO_TransferMode_Block             ((uint32_t)0x00000000)
00351 #define SDIO_TransferMode_Stream            ((uint32_t)0x00000004)
00352 #define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Stream) || \
00353                                      ((MODE) == SDIO_TransferMode_Block))
00354 
00362 #define SDIO_DPSM_Disable                    ((uint32_t)0x00000000)
00363 #define SDIO_DPSM_Enable                     ((uint32_t)0x00000001)
00364 #define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Enable) || ((DPSM) == SDIO_DPSM_Disable))
00365 
00373 #define SDIO_FLAG_CCRCFAIL                  ((uint32_t)0x00000001)
00374 #define SDIO_FLAG_DCRCFAIL                  ((uint32_t)0x00000002)
00375 #define SDIO_FLAG_CTIMEOUT                  ((uint32_t)0x00000004)
00376 #define SDIO_FLAG_DTIMEOUT                  ((uint32_t)0x00000008)
00377 #define SDIO_FLAG_TXUNDERR                  ((uint32_t)0x00000010)
00378 #define SDIO_FLAG_RXOVERR                   ((uint32_t)0x00000020)
00379 #define SDIO_FLAG_CMDREND                   ((uint32_t)0x00000040)
00380 #define SDIO_FLAG_CMDSENT                   ((uint32_t)0x00000080)
00381 #define SDIO_FLAG_DATAEND                   ((uint32_t)0x00000100)
00382 #define SDIO_FLAG_STBITERR                  ((uint32_t)0x00000200)
00383 #define SDIO_FLAG_DBCKEND                   ((uint32_t)0x00000400)
00384 #define SDIO_FLAG_CMDACT                    ((uint32_t)0x00000800)
00385 #define SDIO_FLAG_TXACT                     ((uint32_t)0x00001000)
00386 #define SDIO_FLAG_RXACT                     ((uint32_t)0x00002000)
00387 #define SDIO_FLAG_TXFIFOHE                  ((uint32_t)0x00004000)
00388 #define SDIO_FLAG_RXFIFOHF                  ((uint32_t)0x00008000)
00389 #define SDIO_FLAG_TXFIFOF                   ((uint32_t)0x00010000)
00390 #define SDIO_FLAG_RXFIFOF                   ((uint32_t)0x00020000)
00391 #define SDIO_FLAG_TXFIFOE                   ((uint32_t)0x00040000)
00392 #define SDIO_FLAG_RXFIFOE                   ((uint32_t)0x00080000)
00393 #define SDIO_FLAG_TXDAVL                    ((uint32_t)0x00100000)
00394 #define SDIO_FLAG_RXDAVL                    ((uint32_t)0x00200000)
00395 #define SDIO_FLAG_SDIOIT                    ((uint32_t)0x00400000)
00396 #define SDIO_FLAG_CEATAEND                  ((uint32_t)0x00800000)
00397 #define IS_SDIO_FLAG(FLAG) (((FLAG)  == SDIO_FLAG_CCRCFAIL) || \
00398                             ((FLAG)  == SDIO_FLAG_DCRCFAIL) || \
00399                             ((FLAG)  == SDIO_FLAG_CTIMEOUT) || \
00400                             ((FLAG)  == SDIO_FLAG_DTIMEOUT) || \
00401                             ((FLAG)  == SDIO_FLAG_TXUNDERR) || \
00402                             ((FLAG)  == SDIO_FLAG_RXOVERR) || \
00403                             ((FLAG)  == SDIO_FLAG_CMDREND) || \
00404                             ((FLAG)  == SDIO_FLAG_CMDSENT) || \
00405                             ((FLAG)  == SDIO_FLAG_DATAEND) || \
00406                             ((FLAG)  == SDIO_FLAG_STBITERR) || \
00407                             ((FLAG)  == SDIO_FLAG_DBCKEND) || \
00408                             ((FLAG)  == SDIO_FLAG_CMDACT) || \
00409                             ((FLAG)  == SDIO_FLAG_TXACT) || \
00410                             ((FLAG)  == SDIO_FLAG_RXACT) || \
00411                             ((FLAG)  == SDIO_FLAG_TXFIFOHE) || \
00412                             ((FLAG)  == SDIO_FLAG_RXFIFOHF) || \
00413                             ((FLAG)  == SDIO_FLAG_TXFIFOF) || \
00414                             ((FLAG)  == SDIO_FLAG_RXFIFOF) || \
00415                             ((FLAG)  == SDIO_FLAG_TXFIFOE) || \
00416                             ((FLAG)  == SDIO_FLAG_RXFIFOE) || \
00417                             ((FLAG)  == SDIO_FLAG_TXDAVL) || \
00418                             ((FLAG)  == SDIO_FLAG_RXDAVL) || \
00419                             ((FLAG)  == SDIO_FLAG_SDIOIT) || \
00420                             ((FLAG)  == SDIO_FLAG_CEATAEND))
00421 
00422 #define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFF3FF800) == 0x00) && ((FLAG) != (uint32_t)0x00))
00423 
00424 #define IS_SDIO_GET_IT(IT) (((IT)  == SDIO_IT_CCRCFAIL) || \
00425                             ((IT)  == SDIO_IT_DCRCFAIL) || \
00426                             ((IT)  == SDIO_IT_CTIMEOUT) || \
00427                             ((IT)  == SDIO_IT_DTIMEOUT) || \
00428                             ((IT)  == SDIO_IT_TXUNDERR) || \
00429                             ((IT)  == SDIO_IT_RXOVERR) || \
00430                             ((IT)  == SDIO_IT_CMDREND) || \
00431                             ((IT)  == SDIO_IT_CMDSENT) || \
00432                             ((IT)  == SDIO_IT_DATAEND) || \
00433                             ((IT)  == SDIO_IT_STBITERR) || \
00434                             ((IT)  == SDIO_IT_DBCKEND) || \
00435                             ((IT)  == SDIO_IT_CMDACT) || \
00436                             ((IT)  == SDIO_IT_TXACT) || \
00437                             ((IT)  == SDIO_IT_RXACT) || \
00438                             ((IT)  == SDIO_IT_TXFIFOHE) || \
00439                             ((IT)  == SDIO_IT_RXFIFOHF) || \
00440                             ((IT)  == SDIO_IT_TXFIFOF) || \
00441                             ((IT)  == SDIO_IT_RXFIFOF) || \
00442                             ((IT)  == SDIO_IT_TXFIFOE) || \
00443                             ((IT)  == SDIO_IT_RXFIFOE) || \
00444                             ((IT)  == SDIO_IT_TXDAVL) || \
00445                             ((IT)  == SDIO_IT_RXDAVL) || \
00446                             ((IT)  == SDIO_IT_SDIOIT) || \
00447                             ((IT)  == SDIO_IT_CEATAEND))
00448 
00449 #define IS_SDIO_CLEAR_IT(IT) ((((IT) & (uint32_t)0xFF3FF800) == 0x00) && ((IT) != (uint32_t)0x00))
00450 
00459 #define SDIO_ReadWaitMode_CLK               ((uint32_t)0x00000001)
00460 #define SDIO_ReadWaitMode_DATA2             ((uint32_t)0x00000000)
00461 #define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \
00462                                      ((MODE) == SDIO_ReadWaitMode_DATA2))
00463 
00483 void SDIO_DeInit(void);
00484 void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct);
00485 void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct);
00486 void SDIO_ClockCmd(FunctionalState NewState);
00487 void SDIO_SetPowerState(uint32_t SDIO_PowerState);
00488 uint32_t SDIO_GetPowerState(void);
00489 void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState);
00490 void SDIO_DMACmd(FunctionalState NewState);
00491 void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct);
00492 void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct);
00493 uint8_t SDIO_GetCommandResponse(void);
00494 uint32_t SDIO_GetResponse(uint32_t SDIO_RESP);
00495 void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct);
00496 void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct);
00497 uint32_t SDIO_GetDataCounter(void);
00498 uint32_t SDIO_ReadData(void);
00499 void SDIO_WriteData(uint32_t Data);
00500 uint32_t SDIO_GetFIFOCount(void);
00501 void SDIO_StartSDIOReadWait(FunctionalState NewState);
00502 void SDIO_StopSDIOReadWait(FunctionalState NewState);
00503 void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode);
00504 void SDIO_SetSDIOOperation(FunctionalState NewState);
00505 void SDIO_SendSDIOSuspendCmd(FunctionalState NewState);
00506 void SDIO_CommandCompletionCmd(FunctionalState NewState);
00507 void SDIO_CEATAITCmd(FunctionalState NewState);
00508 void SDIO_SendCEATACmd(FunctionalState NewState);
00509 FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG);
00510 void SDIO_ClearFlag(uint32_t SDIO_FLAG);
00511 ITStatus SDIO_GetITStatus(uint32_t SDIO_IT);
00512 void SDIO_ClearITPendingBit(uint32_t SDIO_IT);
00513 
00514 #ifdef __cplusplus
00515 }
00516 #endif
00517 
00518 #endif /* __STM32F10x_SDIO_H */
00519 
00531 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/