]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/ST_Library/include/stm32f7xx_hal_nand.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / ST_Library / include / stm32f7xx_hal_nand.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f7xx_hal_nand.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0RC1\r
6   * @date    24-March-2015\r
7   * @brief   Header file of NAND HAL module.\r
8   ******************************************************************************\r
9   * @attention\r
10   *\r
11   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
12   *\r
13   * Redistribution and use in source and binary forms, with or without modification,\r
14   * are permitted provided that the following conditions are met:\r
15   *   1. Redistributions of source code must retain the above copyright notice,\r
16   *      this list of conditions and the following disclaimer.\r
17   *   2. Redistributions in binary form must reproduce the above copyright notice,\r
18   *      this list of conditions and the following disclaimer in the documentation\r
19   *      and/or other materials provided with the distribution.\r
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
21   *      may be used to endorse or promote products derived from this software\r
22   *      without specific prior written permission.\r
23   *\r
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
34   *\r
35   ******************************************************************************\r
36   */\r
37 \r
38 /* Define to prevent recursive inclusion -------------------------------------*/\r
39 #ifndef __STM32F7xx_HAL_NAND_H\r
40 #define __STM32F7xx_HAL_NAND_H\r
41 \r
42 #ifdef __cplusplus\r
43  extern "C" {\r
44 #endif\r
45 \r
46 /* Includes ------------------------------------------------------------------*/\r
47 #include "stm32f7xx_ll_fmc.h"\r
48 \r
49 /** @addtogroup STM32F7xx_HAL_Driver\r
50   * @{\r
51   */\r
52 \r
53 /** @addtogroup NAND\r
54   * @{\r
55   */ \r
56 \r
57 #if defined(STM32F756xx) || defined(STM32F746xx)\r
58 /* Exported typedef ----------------------------------------------------------*/\r
59 /* Exported types ------------------------------------------------------------*/\r
60 /** @defgroup NAND_Exported_Types NAND Exported Types\r
61   * @{\r
62   */\r
63 \r
64 /** \r
65   * @brief  HAL NAND State structures definition\r
66   */\r
67 typedef enum\r
68 {\r
69   HAL_NAND_STATE_RESET     = 0x00,  /*!< NAND not yet initialized or disabled */\r
70   HAL_NAND_STATE_READY     = 0x01,  /*!< NAND initialized and ready for use   */\r
71   HAL_NAND_STATE_BUSY      = 0x02,  /*!< NAND internal process is ongoing     */\r
72   HAL_NAND_STATE_ERROR     = 0x03   /*!< NAND error state                     */\r
73 }HAL_NAND_StateTypeDef;\r
74    \r
75 /** \r
76   * @brief  NAND Memory electronic signature Structure definition\r
77   */\r
78 typedef struct\r
79 {\r
80   /*<! NAND memory electronic signature maker and device IDs */\r
81 \r
82   uint8_t Maker_Id; \r
83 \r
84   uint8_t Device_Id;\r
85 \r
86   uint8_t Third_Id;\r
87 \r
88   uint8_t Fourth_Id;\r
89 }NAND_IDTypeDef;\r
90 \r
91 /** \r
92   * @brief  NAND Memory address Structure definition\r
93   */\r
94 typedef struct \r
95 {\r
96   uint16_t Page;   /*!< NAND memory Page address  */\r
97 \r
98   uint16_t Zone;   /*!< NAND memory Zone address  */\r
99 \r
100   uint16_t Block;  /*!< NAND memory Block address */\r
101 \r
102 }NAND_AddressTypeDef;\r
103 \r
104 /** \r
105   * @brief  NAND Memory info Structure definition\r
106   */ \r
107 typedef struct\r
108 {\r
109   uint32_t PageSize;       /*!< NAND memory page (without spare area) size measured in K. bytes */\r
110 \r
111   uint32_t SpareAreaSize;  /*!< NAND memory spare area size measured in K. bytes                */\r
112 \r
113   uint32_t BlockSize;      /*!< NAND memory block size number of pages                          */\r
114 \r
115   uint32_t BlockNbr;       /*!< NAND memory number of blocks                                    */\r
116 \r
117   uint32_t ZoneSize;       /*!< NAND memory zone size measured in number of blocks              */\r
118 }NAND_InfoTypeDef;\r
119 \r
120 /** \r
121   * @brief  NAND handle Structure definition\r
122   */   \r
123 typedef struct\r
124 {\r
125   FMC_NAND_TypeDef             *Instance;  /*!< Register base address                        */\r
126   \r
127   FMC_NAND_InitTypeDef         Init;       /*!< NAND device control configuration parameters */\r
128 \r
129   HAL_LockTypeDef              Lock;       /*!< NAND locking object                          */\r
130 \r
131   __IO HAL_NAND_StateTypeDef   State;      /*!< NAND device access state                     */\r
132 \r
133   NAND_InfoTypeDef             Info;       /*!< NAND characteristic information structure    */\r
134 }NAND_HandleTypeDef;\r
135 /**\r
136   * @}\r
137   */\r
138 \r
139 /* Exported constants --------------------------------------------------------*/\r
140 /* Exported macro ------------------------------------------------------------*/\r
141 /** @defgroup NAND_Exported_Macros NAND Exported Macros\r
142  * @{\r
143  */ \r
144 \r
145 /** @brief Reset NAND handle state\r
146   * @param  __HANDLE__: specifies the NAND handle.\r
147   * @retval None\r
148   */\r
149 #define __HAL_NAND_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_NAND_STATE_RESET)\r
150 \r
151 /**\r
152   * @}\r
153   */\r
154 \r
155 /* Exported functions --------------------------------------------------------*/\r
156 /** @addtogroup NAND_Exported_Functions NAND Exported Functions\r
157   * @{\r
158   */\r
159     \r
160 /** @addtogroup NAND_Exported_Functions_Group1 Initialization and de-initialization functions \r
161   * @{\r
162   */\r
163 \r
164 /* Initialization/de-initialization functions  ********************************/\r
165 HAL_StatusTypeDef  HAL_NAND_Init(NAND_HandleTypeDef *hnand, FMC_NAND_PCC_TimingTypeDef *ComSpace_Timing, FMC_NAND_PCC_TimingTypeDef *AttSpace_Timing);\r
166 HAL_StatusTypeDef  HAL_NAND_DeInit(NAND_HandleTypeDef *hnand);\r
167 void               HAL_NAND_MspInit(NAND_HandleTypeDef *hnand);\r
168 void               HAL_NAND_MspDeInit(NAND_HandleTypeDef *hnand);\r
169 void               HAL_NAND_IRQHandler(NAND_HandleTypeDef *hnand);\r
170 void               HAL_NAND_ITCallback(NAND_HandleTypeDef *hnand);\r
171 \r
172 /**\r
173   * @}\r
174   */\r
175   \r
176 /** @addtogroup NAND_Exported_Functions_Group2 Input and Output functions \r
177   * @{\r
178   */\r
179 \r
180 /* IO operation functions  ****************************************************/\r
181 HAL_StatusTypeDef  HAL_NAND_Read_ID(NAND_HandleTypeDef *hnand, NAND_IDTypeDef *pNAND_ID);\r
182 HAL_StatusTypeDef  HAL_NAND_Reset(NAND_HandleTypeDef *hnand);\r
183 HAL_StatusTypeDef  HAL_NAND_Read_Page(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumPageToRead);\r
184 HAL_StatusTypeDef  HAL_NAND_Write_Page(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumPageToWrite);\r
185 HAL_StatusTypeDef  HAL_NAND_Read_SpareArea(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaToRead);\r
186 HAL_StatusTypeDef  HAL_NAND_Write_SpareArea(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaTowrite);\r
187 HAL_StatusTypeDef  HAL_NAND_Erase_Block(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress);\r
188 uint32_t           HAL_NAND_Read_Status(NAND_HandleTypeDef *hnand);\r
189 uint32_t           HAL_NAND_Address_Inc(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress);\r
190 \r
191 /**\r
192   * @}\r
193   */\r
194 \r
195 /** @addtogroup NAND_Exported_Functions_Group3 Peripheral Control functions \r
196   * @{\r
197   */\r
198 \r
199 /* NAND Control functions  ****************************************************/\r
200 HAL_StatusTypeDef  HAL_NAND_ECC_Enable(NAND_HandleTypeDef *hnand);\r
201 HAL_StatusTypeDef  HAL_NAND_ECC_Disable(NAND_HandleTypeDef *hnand);\r
202 HAL_StatusTypeDef  HAL_NAND_GetECC(NAND_HandleTypeDef *hnand, uint32_t *ECCval, uint32_t Timeout);\r
203 \r
204 /**\r
205   * @}\r
206   */\r
207     \r
208 /** @addtogroup NAND_Exported_Functions_Group4 Peripheral State functions \r
209   * @{\r
210   */\r
211 /* NAND State functions *******************************************************/\r
212 HAL_NAND_StateTypeDef HAL_NAND_GetState(NAND_HandleTypeDef *hnand);\r
213 uint32_t              HAL_NAND_Read_Status(NAND_HandleTypeDef *hnand);\r
214 /**\r
215   * @}\r
216   */\r
217 \r
218 /**\r
219   * @}\r
220   */\r
221 /* Private types -------------------------------------------------------------*/\r
222 /* Private variables ---------------------------------------------------------*/\r
223 /* Private constants ---------------------------------------------------------*/\r
224 /** @defgroup NAND_Private_Constants NAND Private Constants\r
225   * @{\r
226   */\r
227 #define NAND_DEVICE                ((uint32_t)0x80000000) \r
228 #define NAND_WRITE_TIMEOUT         ((uint32_t)0x01000000)\r
229 \r
230 #define CMD_AREA                   ((uint32_t)(1<<16))  /* A16 = CLE high */\r
231 #define ADDR_AREA                  ((uint32_t)(1<<17))  /* A17 = ALE high */\r
232 \r
233 #define NAND_CMD_AREA_A            ((uint8_t)0x00)\r
234 #define NAND_CMD_AREA_B            ((uint8_t)0x01)\r
235 #define NAND_CMD_AREA_C            ((uint8_t)0x50)\r
236 #define NAND_CMD_AREA_TRUE1        ((uint8_t)0x30)\r
237 \r
238 #define NAND_CMD_WRITE0            ((uint8_t)0x80)\r
239 #define NAND_CMD_WRITE_TRUE1       ((uint8_t)0x10)\r
240 #define NAND_CMD_ERASE0            ((uint8_t)0x60)\r
241 #define NAND_CMD_ERASE1            ((uint8_t)0xD0)  \r
242 #define NAND_CMD_READID            ((uint8_t)0x90)\r
243 #define NAND_CMD_STATUS            ((uint8_t)0x70)\r
244 #define NAND_CMD_LOCK_STATUS       ((uint8_t)0x7A)\r
245 #define NAND_CMD_RESET             ((uint8_t)0xFF)\r
246 \r
247 /* NAND memory status */\r
248 #define NAND_VALID_ADDRESS         ((uint32_t)0x00000100)\r
249 #define NAND_INVALID_ADDRESS       ((uint32_t)0x00000200)\r
250 #define NAND_TIMEOUT_ERROR         ((uint32_t)0x00000400)\r
251 #define NAND_BUSY                  ((uint32_t)0x00000000)\r
252 #define NAND_ERROR                 ((uint32_t)0x00000001)\r
253 #define NAND_READY                 ((uint32_t)0x00000040)\r
254 /**\r
255   * @}\r
256   */\r
257 \r
258 /* Private macros ------------------------------------------------------------*/\r
259 /** @defgroup NAND_Private_Macros NAND Private Macros\r
260   * @{\r
261   */\r
262 \r
263 /**\r
264   * @brief  NAND memory address computation.\r
265   * @param  __ADDRESS__: NAND memory address.\r
266   * @param  __HANDLE__ : NAND handle.\r
267   * @retval NAND Raw address value\r
268   */\r
269 #define ARRAY_ADDRESS(__ADDRESS__ , __HANDLE__) ((__ADDRESS__)->Page + \\r
270                          (((__ADDRESS__)->Block + (((__ADDRESS__)->Zone) * ((__HANDLE__)->Info.ZoneSize)))* ((__HANDLE__)->Info.BlockSize)))\r
271 \r
272 /**\r
273   * @brief  NAND memory address cycling.\r
274   * @param  __ADDRESS__: NAND memory address.\r
275   * @retval NAND address cycling value.\r
276   */\r
277 #define ADDR_1ST_CYCLE(__ADDRESS__)       (uint8_t)(__ADDRESS__)              /* 1st addressing cycle */\r
278 #define ADDR_2ND_CYCLE(__ADDRESS__)       (uint8_t)((__ADDRESS__) >> 8)       /* 2nd addressing cycle */\r
279 #define ADDR_3RD_CYCLE(__ADDRESS__)       (uint8_t)((__ADDRESS__) >> 16)      /* 3rd addressing cycle */\r
280 #define ADDR_4TH_CYCLE(__ADDRESS__)       (uint8_t)((__ADDRESS__) >> 24)      /* 4th addressing cycle */\r
281 /**\r
282   * @}\r
283   */\r
284 #endif /* STM32F756xx || STM32F746xx */\r
285     \r
286 /**\r
287   * @}\r
288   */\r
289 /**\r
290   * @}\r
291   */ \r
292 \r
293 /**\r
294   * @}\r
295   */ \r
296 \r
297 #ifdef __cplusplus\r
298 }\r
299 #endif\r
300 \r
301 #endif /* __STM32F7xx_HAL_NAND_H */\r
302 \r
303 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r