STM32G474xx HAL用户手册
stm32g4xx_hal_nand.h
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_nand.h
00004   * @author  MCD Application Team
00005   * @brief   NAND HAL模块头文件。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* Define to prevent recursive inclusion -------------------------------------*/
00020 #ifndef STM32G4xx_HAL_NAND_H
00021 #define STM32G4xx_HAL_NAND_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 #if defined(FMC_BANK3)
00028 
00029 /* Includes ------------------------------------------------------------------*/
00030 #include "stm32g4xx_ll_fmc.h"
00031 
00032 /** @addtogroup STM32G4xx_HAL_Driver
00033   * @{
00034   */
00035 
00036 /** @addtogroup NAND
00037   * @{
00038   */
00039 
00040 /* Exported typedef ----------------------------------------------------------*/
00041 /* Exported types ------------------------------------------------------------*/
00042 /** @defgroup NAND_Exported_Types NAND导出类型
00043   * @{
00044   */
00045 
00046 /**
00047   * @brief  HAL NAND状态结构定义
00048   */
00049 typedef enum
00050 {
00051   HAL_NAND_STATE_RESET     = 0x00U,  /*!< NAND未初始化或禁用 */
00052   HAL_NAND_STATE_READY     = 0x01U,  /*!< NAND已初始化并可使用   */
00053   HAL_NAND_STATE_BUSY      = 0x02U,  /*!< NAND内部进程正在进行     */
00054   HAL_NAND_STATE_ERROR     = 0x03U   /*!< NAND错误状态                     */
00055 } HAL_NAND_StateTypeDef;
00056 
00057 /**
00058   * @brief  NAND存储器电子签名结构定义
00060   */
00061 typedef struct
00062 {
00063   /*<! NAND存储器电子签名制造商和设备ID */
00064 
00065   uint8_t Maker_Id;
00066 
00067   uint8_t Device_Id;
00069 
00070   uint8_t ThirdId;
00071 
00072   uint8_t Fourth_Id;
00073 } NAND_IDTypeDef;
00074 
00075 /**
00076   * @brief  NAND存储器地址结构定义
00078   */
00079 typedef struct
00080 {
00081   uint16_t Page;   /*!< NAND存储器页地址  */
00082 
00083   uint16_t Plane;   /*!< NAND存储器区域地址  */
00085 
00086   uint16_t Block;  /*!< NAND存储器块地址 */
00088 
00089 } NAND_AddressTypeDef;
00090 
00091 /**
00092   * @brief  NAND存储器信息结构定义
00094   */
00095 typedef struct
00096 {
00097   uint32_t        PageSize;              /*!< NAND存储器页大小(不含备用区),以字节为单位
00098                                               用于8位寻址或字为单位用于16位寻址             */
00099 
00100   uint32_t        SpareAreaSize;         /*!< NAND存储器备用区大小,以字节为单位
00101                                               用于8位寻址或字为单位用于16位寻址             */
00102 
00103   uint32_t        BlockSize;             /*!< NAND存储器块大小,以页数计量               */
00105 
00106   uint32_t        BlockNbr;              /*!< NAND存储器总块数                               */
00108 
00109   uint32_t        PlaneNbr;              /*!< NAND存储器plane数量                                     */
00111 
00112   uint32_t        PlaneSize;             /*!< NAND存储器区域大小,以块数计量               */
00114 
00115   FunctionalState ExtraCommandEnable;    /*!< NAND页读取模式所需的额外命令。对于某些NAND器件,
00116                                               在读取命令(NAND_CMD_AREA_TRUE1)之后和DATA读取序列
00118                                               之前需要此参数。
00119                                               此参数可以为ENABLE或DISABLE
00121                                               请查看NAND器件数据手册中的读取模式序列 */
00122 } NAND_DeviceConfigTypeDef;
00123 
00124 /**
00125   * @brief  NAND句柄结构定义
00127   */
00128 #if (USE_HAL_NAND_REGISTER_CALLBACKS == 1)
00129 typedef struct __NAND_HandleTypeDef
00130 #else
00131 typedef struct
00132 #endif /* USE_HAL_NAND_REGISTER_CALLBACKS  */
00133 {
00134   FMC_NAND_TypeDef               *Instance;  /*!< 寄存器基地址                                 */
00135 
00136   FMC_NAND_InitTypeDef           Init;       /*!< NAND器件控制配置参数          */
00138 
00139   HAL_LockTypeDef                Lock;       /*!< NAND锁定对象                                   */
00141 
00142   __IO HAL_NAND_StateTypeDef     State;      /*!< NAND器件访问状态                              */
00144 
00145   NAND_DeviceConfigTypeDef       Config;     /*!< NAND物理特性信息结构    */
00146 
00147 #if (USE_HAL_NAND_REGISTER_CALLBACKS == 1)
00148   void (* MspInitCallback)(struct __NAND_HandleTypeDef *hnand);               /*!< NAND Msp Init回调              */
00149   void (* MspDeInitCallback)(struct __NAND_HandleTypeDef *hnand);             /*!< NAND Msp DeInit回调            */
00150   void (* ItCallback)(struct __NAND_HandleTypeDef *hnand);                    /*!< NAND IT回调                    */
00151 #endif /* USE_HAL_NAND_REGISTER_CALLBACKS */
00152 } NAND_HandleTypeDef;
00153 
00154 #if (USE_HAL_NAND_REGISTER_CALLBACKS == 1)
00155 /**
00156   * @brief  HAL NAND回调ID枚举定义
00158   */
00160 typedef enum
00162 {
00163   HAL_NAND_MSP_INIT_CB_ID       = 0x00U,  /*!< NAND MspInit回调ID          */
00164   HAL_NAND_MSP_DEINIT_CB_ID     = 0x01U,  /*!< NAND MspDeInit回调ID        */
00165   HAL_NAND_IT_CB_ID             = 0x02U   /*!< NAND IT回调ID               */
00167 } HAL_NAND_CallbackIDTypeDef;
00169 
00171 /**
00172   * @brief  HAL NAND回调指针定义
00173   */
00174 typedef void (*pNAND_CallbackTypeDef)(NAND_HandleTypeDef *hnand);
00175 #endif /* USE_HAL_NAND_REGISTER_CALLBACKS */
00176 
00177 /**
00178   * @}
00180   */
00181 
00182 /* Exported constants --------------------------------------------------------*/
00183 /* Exported macro ------------------------------------------------------------*/
00184 /** @defgroup NAND_Exported_Macros NAND导出宏
00186   * @{
00188   */
00189 
00190 /** @brief 重置NAND句柄状态
00191   * @param  __HANDLE__ 指定NAND句柄。
00192   * @retval None
00194   */
00195 #if (USE_HAL_NAND_REGISTER_CALLBACKS == 1)
00196 #define __HAL_NAND_RESET_HANDLE_STATE(__HANDLE__)         do {                                             \
00197                                                                (__HANDLE__)->State = HAL_NAND_STATE_RESET; \
00198                                                                (__HANDLE__)->MspInitCallback = NULL;       \
00199                                                                (__HANDLE__)->MspDeInitCallback = NULL;     \
00200                                                              } while(0)
00201 #else
00202 #define __HAL_NAND_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_NAND_STATE_RESET)
00203 #endif /* USE_HAL_NAND_REGISTER_CALLBACKS */
00204 
00205 /**
00206   * @}
00207   */
00208 
00209 /* Exported functions --------------------------------------------------------*/
00210 /** @addtogroup NAND_Exported_Functions NAND导出函数
00211   * @{
00212   */
00213 
00214 /** @addtogroup NAND_Exported_Functions_Group1 Initialization and de-initialization functions
00215   * @{
00216   */
00217 
00218 /* Initialization/de-initialization functions  ********************************/
00219 HAL_StatusTypeDef  HAL_NAND_Init(NAND_HandleTypeDef *hnand, FMC_NAND_PCC_TimingTypeDef *ComSpace_Timing,
00220                                  FMC_NAND_PCC_TimingTypeDef *AttSpace_Timing);
00221 HAL_StatusTypeDef  HAL_NAND_DeInit(NAND_HandleTypeDef *hnand);
00222 
00223 HAL_StatusTypeDef  HAL_NAND_ConfigDevice(NAND_HandleTypeDef *hnand, const NAND_DeviceConfigTypeDef *pDeviceConfig);
00225 
00227 HAL_StatusTypeDef  HAL_NAND_Read_ID(NAND_HandleTypeDef *hnand, NAND_IDTypeDef *pNAND_ID);
00228 
00229 void               HAL_NAND_MspInit(NAND_HandleTypeDef *hnand);
00230 void               HAL_NAND_MspDeInit(NAND_HandleTypeDef *hnand);
00231 void               HAL_NAND_IRQHandler(NAND_HandleTypeDef *hnand);
00232 void               HAL_NAND_ITCallback(NAND_HandleTypeDef *hnand);
00233 
00234 /**
00235   * @}
00236   */
00237 
00238 /** @addtogroup NAND_Exported_Functions_Group2 Input and Output functions
00239   * @{
00240   */
00241 
00243 /* IO operation functions  ****************************************************/
00244 HAL_StatusTypeDef  HAL_NAND_Reset(NAND_HandleTypeDef *hnand);
00245 
00246 HAL_StatusTypeDef  HAL_NAND_Read_Page_8b(NAND_HandleTypeDef *hnand, const NAND_AddressTypeDef *pAddress,
00247                                          uint8_t *pBuffer, uint32_t NumPageToRead);
00248 HAL_StatusTypeDef  HAL_NAND_Write_Page_8b(NAND_HandleTypeDef *hnand, const NAND_AddressTypeDef *pAddress,
00249                                           const uint8_t *pBuffer, uint32_t NumPageToWrite);
00250 HAL_StatusTypeDef  HAL_NAND_Read_SpareArea_8b(NAND_HandleTypeDef *hnand, const NAND_AddressTypeDef *pAddress,
00251                                               uint8_t *pBuffer, uint32_t NumSpareAreaToRead);
00252 HAL_StatusTypeDef  HAL_NAND_Write_SpareArea_8b(NAND_HandleTypeDef *hnand, const NAND_AddressTypeDef *pAddress,
00253                                                const uint8_t *pBuffer, uint32_t NumSpareAreaTowrite);
00254 
00255 HAL_StatusTypeDef