STM32F479xx HAL User Manual
stm32f4xx_hal_pccard.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f4xx_hal_pccard.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of PCCARD HAL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                       opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 
00020 /* Define to prevent recursive inclusion -------------------------------------*/
00021 #ifndef STM32F4xx_HAL_PCCARD_H
00022 #define STM32F4xx_HAL_PCCARD_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 #if defined(FMC_Bank4) || defined(FSMC_Bank4)
00029 
00030 /* Includes ------------------------------------------------------------------*/
00031 #if defined(FSMC_Bank1)
00032 #include "stm32f4xx_ll_fsmc.h"
00033 #else
00034 #include "stm32f4xx_ll_fmc.h"
00035 #endif /* FSMC_Bank1 */
00036 
00037 /** @addtogroup STM32F4xx_HAL_Driver
00038   * @{
00039   */
00040 
00041 /** @addtogroup PCCARD
00042   * @{
00043   */
00044 
00045 /* Exported typedef ----------------------------------------------------------*/
00046 /** @defgroup PCCARD_Exported_Types PCCARD Exported Types
00047   * @{
00048   */
00049 
00050 /**
00051   * @brief  HAL PCCARD State structures definition
00052   */
00053 typedef enum
00054 {
00055   HAL_PCCARD_STATE_RESET     = 0x00U,    /*!< PCCARD peripheral not yet initialized or disabled */
00056   HAL_PCCARD_STATE_READY     = 0x01U,    /*!< PCCARD peripheral ready                           */
00057   HAL_PCCARD_STATE_BUSY      = 0x02U,    /*!< PCCARD peripheral busy                            */
00058   HAL_PCCARD_STATE_ERROR     = 0x04U     /*!< PCCARD peripheral error                           */
00059 } HAL_PCCARD_StateTypeDef;
00060 
00061 typedef enum
00062 {
00063   HAL_PCCARD_STATUS_SUCCESS = 0U,
00064   HAL_PCCARD_STATUS_ONGOING,
00065   HAL_PCCARD_STATUS_ERROR,
00066   HAL_PCCARD_STATUS_TIMEOUT
00067 } HAL_PCCARD_StatusTypeDef;
00068 
00069 /**
00070   * @brief  FMC_PCCARD handle Structure definition
00071   */
00072 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00073 typedef struct __PCCARD_HandleTypeDef
00074 #else
00075 typedef struct
00076 #endif /* USE_HAL_PCCARD_REGISTER_CALLBACKS  */
00077 {
00078   FMC_PCCARD_TypeDef           *Instance;              /*!< Register base address for PCCARD device          */
00079 
00080   FMC_PCCARD_InitTypeDef       Init;                   /*!< PCCARD device control configuration parameters   */
00081 
00082   __IO HAL_PCCARD_StateTypeDef State;                  /*!< PCCARD device access state                       */
00083 
00084   HAL_LockTypeDef              Lock;                   /*!< PCCARD Lock                                      */
00085 
00086 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00087   void (* MspInitCallback)(struct __PCCARD_HandleTypeDef *hpccard);               /*!< PCCARD Msp Init callback              */
00088   void (* MspDeInitCallback)(struct __PCCARD_HandleTypeDef *hpccard);             /*!< PCCARD Msp DeInit callback            */
00089   void (* ItCallback)(struct __PCCARD_HandleTypeDef *hpccard);                    /*!< PCCARD IT callback                    */
00090 #endif
00091 } PCCARD_HandleTypeDef;
00092 
00093 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00094 /**
00095   * @brief  HAL PCCARD Callback ID enumeration definition
00096   */
00097 typedef enum
00098 {
00099   HAL_PCCARD_MSP_INIT_CB_ID       = 0x00U,  /*!< PCCARD MspInit Callback ID          */
00100   HAL_PCCARD_MSP_DEINIT_CB_ID     = 0x01U,  /*!< PCCARD MspDeInit Callback ID        */
00101   HAL_PCCARD_IT_CB_ID             = 0x02U   /*!< PCCARD IT Callback ID               */
00102 } HAL_PCCARD_CallbackIDTypeDef;
00103 
00104 /**
00105   * @brief  HAL PCCARD Callback pointer definition
00106   */
00107 typedef void (*pPCCARD_CallbackTypeDef)(PCCARD_HandleTypeDef *hpccard);
00108 #endif
00109 /**
00110   * @}
00111   */
00112 
00113 /* Exported constants --------------------------------------------------------*/
00114 /* Exported macro ------------------------------------------------------------*/
00115 /** @defgroup PCCARD_Exported_Macros PCCARD Exported Macros
00116   * @{
00117   */
00118 /** @brief Reset PCCARD handle state
00119   * @param  __HANDLE__ specifies the PCCARD handle.
00120   * @retval None
00121   */
00122 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00123 #define __HAL_PCCARD_RESET_HANDLE_STATE(__HANDLE__)       do {                                               \
00124                                                                (__HANDLE__)->State = HAL_PCCARD_STATE_RESET; \
00125                                                                (__HANDLE__)->MspInitCallback = NULL;         \
00126                                                                (__HANDLE__)->MspDeInitCallback = NULL;       \
00127                                                              } while(0)
00128 #else
00129 #define __HAL_PCCARD_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_PCCARD_STATE_RESET)
00130 #endif
00131 /**
00132   * @}
00133   */
00134 
00135 /* Exported functions --------------------------------------------------------*/
00136 /** @addtogroup PCCARD_Exported_Functions
00137   * @{
00138   */
00139 
00140 /** @addtogroup PCCARD_Exported_Functions_Group1
00141   * @{
00142   */
00143 /* Initialization/de-initialization functions  **********************************/
00144 HAL_StatusTypeDef  HAL_PCCARD_Init(PCCARD_HandleTypeDef *hpccard, FMC_NAND_PCC_TimingTypeDef *ComSpaceTiming,
00145                                    FMC_NAND_PCC_TimingTypeDef *AttSpaceTiming, FMC_NAND_PCC_TimingTypeDef *IOSpaceTiming);
00146 HAL_StatusTypeDef  HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard);
00147 void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard);
00148 void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard);
00149 /**
00150   * @}
00151   */
00152 
00153 /** @addtogroup PCCARD_Exported_Functions_Group2
00154   * @{
00155   */
00156 /* IO operation functions  *****************************************************/
00157 HAL_StatusTypeDef  HAL_PCCARD_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus);
00158 HAL_StatusTypeDef  HAL_PCCARD_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress,
00159                                            uint8_t *pStatus);
00160 HAL_StatusTypeDef  HAL_PCCARD_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress,
00161                                           uint8_t *pStatus);
00162 HAL_StatusTypeDef  HAL_PCCARD_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus);
00163 HAL_StatusTypeDef  HAL_PCCARD_Reset(PCCARD_HandleTypeDef *hpccard);
00164 void               HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard);
00165 void               HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard);
00166 
00167 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00168 /* PCCARD callback registering/unregistering */
00169 HAL_StatusTypeDef  HAL_PCCARD_RegisterCallback(PCCARD_HandleTypeDef *hpccard, HAL_PCCARD_CallbackIDTypeDef CallbackId,
00170                                                pPCCARD_CallbackTypeDef pCallback);
00171 HAL_StatusTypeDef  HAL_PCCARD_UnRegisterCallback(PCCARD_HandleTypeDef *hpccard,
00172                                                  HAL_PCCARD_CallbackIDTypeDef CallbackId);
00173 #endif
00174 /**
00175   * @}
00176   */
00177 
00178 /** @addtogroup PCCARD_Exported_Functions_Group3
00179   * @{
00180   */
00181 /* PCCARD State functions *******************************************************/
00182 HAL_PCCARD_StateTypeDef  HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard);
00183 HAL_PCCARD_StatusTypeDef HAL_PCCARD_GetStatus(PCCARD_HandleTypeDef *hpccard);
00184 HAL_PCCARD_StatusTypeDef HAL_PCCARD_ReadStatus(PCCARD_HandleTypeDef *hpccard);
00185 /**
00186   * @}
00187   */
00188 
00189 /**
00190   * @}
00191   */
00192 /* Private types -------------------------------------------------------------*/
00193 /* Private variables ---------------------------------------------------------*/
00194 /* Private constants ---------------------------------------------------------*/
00195 /** @defgroup PCCARD_Private_Constants PCCARD Private Constants
00196   * @{
00197   */
00198 #define PCCARD_DEVICE_ADDRESS             0x90000000U
00199 #define PCCARD_ATTRIBUTE_SPACE_ADDRESS    0x98000000U              /* Attribute space size to @0x9BFF FFFF */
00200 #define PCCARD_COMMON_SPACE_ADDRESS       PCCARD_DEVICE_ADDRESS    /* Common space size to @0x93FF FFFF    */
00201 #define PCCARD_IO_SPACE_ADDRESS           0x9C000000U              /* IO space size to @0x9FFF FFFF        */
00202 #define PCCARD_IO_SPACE_PRIMARY_ADDR      0x9C0001F0U              /* IO space size to @0x9FFF FFFF        */
00203 
00204 /* Flash-ATA registers description */
00205 #define ATA_DATA                       ((uint8_t)0x00)    /* Data register */
00206 #define ATA_SECTOR_COUNT               ((uint8_t)0x02)    /* Sector Count register */
00207 #define ATA_SECTOR_NUMBER              ((uint8_t)0x03)    /* Sector Number register */
00208 #define ATA_CYLINDER_LOW               ((uint8_t)0x04)    /* Cylinder low register */
00209 #define ATA_CYLINDER_HIGH              ((uint8_t)0x05)    /* Cylinder high register */
00210 #define ATA_CARD_HEAD                  ((uint8_t)0x06)    /* Card/Head register */
00211 #define ATA_STATUS_CMD                 ((uint8_t)0x07)    /* Status(read)/Command(write) register */
00212 #define ATA_STATUS_CMD_ALTERNATE       ((uint8_t)0x0E)    /* Alternate Status(read)/Command(write) register */
00213 #define ATA_COMMON_DATA_AREA           ((uint16_t)0x0400) /* Start of data area (for Common access only!) */
00214 #define ATA_CARD_CONFIGURATION         ((uint16_t)0x0202) /* Card Configuration and Status Register */
00215 
00216 /* Flash-ATA commands */
00217 #define ATA_READ_SECTOR_CMD            ((uint8_t)0x20)
00218 #define ATA_WRITE_SECTOR_CMD           ((uint8_t)0x30)
00219 #define ATA_ERASE_SECTOR_CMD           ((uint8_t)0xC0)
00220 #define ATA_IDENTIFY_CMD               ((uint8_t)0xEC)
00221 
00222 /* PC Card/Compact Flash status */
00223 #define PCCARD_TIMEOUT_ERROR           ((uint8_t)0x60)
00224 #define PCCARD_BUSY                    ((uint8_t)0x80)
00225 #define PCCARD_PROGR                   ((uint8_t)0x01)
00226 #define PCCARD_READY                   ((uint8_t)0x40)
00227 
00228 #define PCCARD_SECTOR_SIZE             255U               /* In half words */
00229 
00230 /**
00231   * @}
00232   */
00233 /* Compact Flash redefinition */
00234 #define HAL_CF_Init                 HAL_PCCARD_Init
00235 #define HAL_CF_DeInit               HAL_PCCARD_DeInit
00236 #define HAL_CF_MspInit              HAL_PCCARD_MspInit
00237 #define HAL_CF_MspDeInit            HAL_PCCARD_MspDeInit
00238 
00239 #define HAL_CF_Read_ID              HAL_PCCARD_Read_ID
00240 #define HAL_CF_Write_Sector         HAL_PCCARD_Write_Sector
00241 #define HAL_CF_Read_Sector          HAL_PCCARD_Read_Sector
00242 #define HAL_CF_Erase_Sector         HAL_PCCARD_Erase_Sector
00243 #define HAL_CF_Reset                HAL_PCCARD_Reset
00244 #define HAL_CF_IRQHandler           HAL_PCCARD_IRQHandler
00245 #define HAL_CF_ITCallback           HAL_PCCARD_ITCallback
00246 
00247 #define HAL_CF_GetState             HAL_PCCARD_GetState
00248 #define HAL_CF_GetStatus            HAL_PCCARD_GetStatus
00249 #define HAL_CF_ReadStatus           HAL_PCCARD_ReadStatus
00250 
00251 #define HAL_CF_STATUS_SUCCESS       HAL_PCCARD_STATUS_SUCCESS
00252 #define HAL_CF_STATUS_ONGOING       HAL_PCCARD_STATUS_ONGOING
00253 #define HAL_CF_STATUS_ERROR         HAL_PCCARD_STATUS_ERROR
00254 #define HAL_CF_STATUS_TIMEOUT       HAL_PCCARD_STATUS_TIMEOUT
00255 #define HAL_CF_StatusTypeDef        HAL_PCCARD_StatusTypeDef
00256 
00257 #define CF_DEVICE_ADDRESS           PCCARD_DEVICE_ADDRESS
00258 #define CF_ATTRIBUTE_SPACE_ADDRESS  PCCARD_ATTRIBUTE_SPACE_ADDRESS
00259 #define CF_COMMON_SPACE_ADDRESS     PCCARD_COMMON_SPACE_ADDRESS
00260 #define CF_IO_SPACE_ADDRESS         PCCARD_IO_SPACE_ADDRESS
00261 #define CF_IO_SPACE_PRIMARY_ADDR    PCCARD_IO_SPACE_PRIMARY_ADDR
00262 
00263 #define CF_TIMEOUT_ERROR            PCCARD_TIMEOUT_ERROR
00264 #define CF_BUSY                     PCCARD_BUSY
00265 #define CF_PROGR                    PCCARD_PROGR
00266 #define CF_READY                    PCCARD_READY
00267 
00268 #define CF_SECTOR_SIZE              PCCARD_SECTOR_SIZE
00269 
00270 /* Private macros ------------------------------------------------------------*/
00271 /**
00272   * @}
00273   */
00274 
00275 
00276 /**
00277   * @}
00278   */
00279 
00280 #endif /* FMC_Bank4) || defined(FSMC_Bank4 */
00281 
00282 #ifdef __cplusplus
00283 }
00284 #endif
00285 
00286 #endif /* STM32F4xx_HAL_PCCARD_H */
00287 
00288 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/