|
STM32G474xx HAL用户手册
|
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