STM32L4xx_HAL_Driver  1.14.0
stm32l4xx_hal_nand.h
Go to the documentation of this file.
1 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef __STM32L4xx_HAL_NAND_H
22 #define __STM32L4xx_HAL_NAND_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 #if defined(FMC_BANK3)
29 
30 /* Includes ------------------------------------------------------------------*/
31 #include "stm32l4xx_ll_fmc.h"
32 
41 /* Exported typedef ----------------------------------------------------------*/
42 /* Exported types ------------------------------------------------------------*/
50 typedef enum
51 {
52  HAL_NAND_STATE_RESET = 0x00U,
53  HAL_NAND_STATE_READY = 0x01U,
54  HAL_NAND_STATE_BUSY = 0x02U,
55  HAL_NAND_STATE_ERROR = 0x03U
56 }HAL_NAND_StateTypeDef;
57 
61 typedef struct
62 {
63  /*<! NAND memory electronic signature maker and device IDs */
64  uint8_t Maker_Id;
65 
66  uint8_t Device_Id;
67 
68  uint8_t Third_Id;
69 
70  uint8_t Fourth_Id;
72 
76 typedef struct
77 {
78  uint16_t Page;
80  uint16_t Plane;
82  uint16_t Block;
84 
88 typedef struct
89 {
90  uint32_t PageSize;
93  uint32_t SpareAreaSize;
96  uint32_t BlockSize;
98  uint32_t BlockNbr;
100  uint32_t PlaneNbr;
102  uint32_t PlaneSize;
104  FunctionalState ExtraCommandEnable;
111 
115 typedef struct
116 {
117  FMC_NAND_TypeDef *Instance;
123  __IO HAL_NAND_StateTypeDef State;
132 /* Exported constants --------------------------------------------------------*/
133 /* Exported macro ------------------------------------------------------------*/
142 #define __HAL_NAND_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_NAND_STATE_RESET)
143 
148 /* Exported functions --------------------------------------------------------*/
157 /* Initialization/de-initialization functions ********************************/
158 HAL_StatusTypeDef HAL_NAND_Init(NAND_HandleTypeDef *hnand, FMC_NAND_PCC_TimingTypeDef *ComSpace_Timing, FMC_NAND_PCC_TimingTypeDef *AttSpace_Timing);
159 HAL_StatusTypeDef HAL_NAND_DeInit(NAND_HandleTypeDef *hnand);
160 
161 HAL_StatusTypeDef HAL_NAND_ConfigDevice(NAND_HandleTypeDef *hnand, NAND_DeviceConfigTypeDef *pDeviceConfig);
162 
163 HAL_StatusTypeDef HAL_NAND_Read_ID(NAND_HandleTypeDef *hnand, NAND_IDTypeDef *pNAND_ID);
164 
169 
178 /* IO operation functions ****************************************************/
179 
180 HAL_StatusTypeDef HAL_NAND_Reset(NAND_HandleTypeDef *hnand);
181 
182 HAL_StatusTypeDef HAL_NAND_Read_Page_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumPageToRead);
183 HAL_StatusTypeDef HAL_NAND_Write_Page_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumPageToWrite);
184 HAL_StatusTypeDef HAL_NAND_Read_SpareArea_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaToRead);
185 HAL_StatusTypeDef HAL_NAND_Write_SpareArea_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaTowrite);
186 
187 HAL_StatusTypeDef HAL_NAND_Read_Page_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumPageToRead);
188 HAL_StatusTypeDef HAL_NAND_Write_Page_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumPageToWrite);
189 HAL_StatusTypeDef HAL_NAND_Read_SpareArea_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumSpareAreaToRead);
190 HAL_StatusTypeDef HAL_NAND_Write_SpareArea_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumSpareAreaTowrite);
191 
192 HAL_StatusTypeDef HAL_NAND_Erase_Block(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress);
193 
195 
204 /* NAND Control functions ****************************************************/
205 HAL_StatusTypeDef HAL_NAND_ECC_Enable(NAND_HandleTypeDef *hnand);
206 HAL_StatusTypeDef HAL_NAND_ECC_Disable(NAND_HandleTypeDef *hnand);
207 HAL_StatusTypeDef HAL_NAND_GetECC(NAND_HandleTypeDef *hnand, uint32_t *ECCval, uint32_t Timeout);
208 
216 /* NAND State functions *******************************************************/
217 HAL_NAND_StateTypeDef HAL_NAND_GetState(NAND_HandleTypeDef *hnand);
226 /* Private types -------------------------------------------------------------*/
227 /* Private variables ---------------------------------------------------------*/
228 /* Private constants ---------------------------------------------------------*/
232 #define NAND_DEVICE FMC_BANK3
233 #define NAND_WRITE_TIMEOUT ((uint32_t)0x01000000U)
234 
235 #define CMD_AREA ((uint32_t)(1<<16)) /* A16 = CLE high */
236 #define ADDR_AREA ((uint32_t)(1<<17)) /* A17 = ALE high */
237 
238 #define NAND_CMD_AREA_A ((uint8_t)0x00U)
239 #define NAND_CMD_AREA_B ((uint8_t)0x01U)
240 #define NAND_CMD_AREA_C ((uint8_t)0x50U)
241 #define NAND_CMD_AREA_TRUE1 ((uint8_t)0x30U)
242 
243 #define NAND_CMD_WRITE0 ((uint8_t)0x80U)
244 #define NAND_CMD_WRITE_TRUE1 ((uint8_t)0x10U)
245 #define NAND_CMD_ERASE0 ((uint8_t)0x60U)
246 #define NAND_CMD_ERASE1 ((uint8_t)0xD0U)
247 #define NAND_CMD_READID ((uint8_t)0x90U)
248 #define NAND_CMD_STATUS ((uint8_t)0x70U)
249 #define NAND_CMD_LOCK_STATUS ((uint8_t)0x7AU)
250 #define NAND_CMD_RESET ((uint8_t)0xFFU)
251 
252 /* NAND memory status */
253 #define NAND_VALID_ADDRESS ((uint32_t)0x00000100U)
254 #define NAND_INVALID_ADDRESS ((uint32_t)0x00000200U)
255 #define NAND_TIMEOUT_ERROR ((uint32_t)0x00000400U)
256 #define NAND_BUSY ((uint32_t)0x00000000U)
257 #define NAND_ERROR ((uint32_t)0x00000001U)
258 #define NAND_READY ((uint32_t)0x00000040U)
259 
263 /* Private macros ------------------------------------------------------------*/
274 #define ARRAY_ADDRESS(__ADDRESS__ , __HANDLE__) (((__ADDRESS__)->Page) + \
275  (((__ADDRESS__)->Block + (((__ADDRESS__)->Plane) * ((__HANDLE__)->Config.PlaneSize)))* ((__HANDLE__)->Config.BlockSize)))
276 
277 #define COLUMN_ADDRESS( __HANDLE__) ((__HANDLE__)->Config.PageSize)
278 
284 #define ADDR_1ST_CYCLE(__ADDRESS__) (uint8_t)(__ADDRESS__) /* 1st addressing cycle */
285 #define ADDR_2ND_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 8) /* 2nd addressing cycle */
286 #define ADDR_3RD_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 16) /* 3rd addressing cycle */
287 #define ADDR_4TH_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 24) /* 4th addressing cycle */
288 
294 #define COLUMN_1ST_CYCLE(__ADDRESS__) (uint8_t)(__ADDRESS__) /* 1st Column addressing cycle */
295 #define COLUMN_2ND_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 8) /* 2nd Column addressing cycle */
296 
313 #endif /* FMC_BANK3 */
314 
315 #ifdef __cplusplus
316 }
317 #endif
318 
319 #endif /* __STM32L4xx_HAL_NAND_H */
320 
321 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
HAL_StatusTypeDef HAL_NAND_Read_Page_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumPageToRead)
Read Page(s) from NAND memory block (16-bits addressing)
HAL_StatusTypeDef HAL_NAND_Write_SpareArea_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumSpareAreaTowrite)
Write Spare area(s) to NAND memory (16-bits addressing)
__IO HAL_NAND_StateTypeDef State
HAL_StatusTypeDef HAL_NAND_Write_SpareArea_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaTowrite)
Write Spare area(s) to NAND memory (8-bits addressing)
NAND Memory info Structure definition.
HAL_StatusTypeDef HAL_NAND_Erase_Block(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress)
NAND memory Block erase.
HAL_LockTypeDef Lock
void HAL_NAND_MspInit(NAND_HandleTypeDef *hnand)
Initialize the NAND MSP.
HAL_StatusTypeDef HAL_NAND_Read_SpareArea_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumSpareAreaToRead)
Read Spare area(s) from NAND memory (16-bits addressing)
uint32_t HAL_NAND_Address_Inc(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress)
Increment the NAND memory address.
HAL_StatusTypeDef HAL_NAND_GetECC(NAND_HandleTypeDef *hnand, uint32_t *ECCval, uint32_t Timeout)
Get NAND ECC value.
HAL_StatusTypeDef HAL_NAND_Read_SpareArea_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaToRead)
Read Spare area(s) from NAND memory (8-bits addressing)
FMC NAND Configuration Structure definition.
HAL_StatusTypeDef HAL_NAND_ECC_Enable(NAND_HandleTypeDef *hnand)
Enable dynamically NAND ECC feature.
NAND_DeviceConfigTypeDef Config
HAL_StatusTypeDef HAL_NAND_Write_Page_16b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint16_t *pBuffer, uint32_t NumPageToWrite)
Write Page(s) to NAND memory block (16-bits addressing)
FMC NAND Timing parameters structure definition.
void HAL_NAND_MspDeInit(NAND_HandleTypeDef *hnand)
DeInitialize the NAND MSP.
HAL_StatusTypeDef HAL_NAND_DeInit(NAND_HandleTypeDef *hnand)
Perform NAND memory De-Initialization sequence.
FMC_NAND_InitTypeDef Init
HAL_StatusTypeDef HAL_NAND_Write_Page_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumPageToWrite)
Write Page(s) to NAND memory block (8-bits addressing)
HAL_StatusTypeDef HAL_NAND_Reset(NAND_HandleTypeDef *hnand)
NAND memory reset.
HAL_StatusTypeDef HAL_NAND_Init(NAND_HandleTypeDef *hnand, FMC_NAND_PCC_TimingTypeDef *ComSpace_Timing, FMC_NAND_PCC_TimingTypeDef *AttSpace_Timing)
Perform NAND memory Initialization sequence.
HAL_NAND_StateTypeDef HAL_NAND_GetState(NAND_HandleTypeDef *hnand)
Return the NAND state.
HAL_StatusTypeDef HAL_NAND_Read_ID(NAND_HandleTypeDef *hnand, NAND_IDTypeDef *pNAND_ID)
Read the NAND memory electronic signature.
HAL_StatusTypeDef HAL_NAND_Read_Page_8b(NAND_HandleTypeDef *hnand, NAND_AddressTypeDef *pAddress, uint8_t *pBuffer, uint32_t NumPageToRead)
Read Page(s) from NAND memory block (8-bits addressing)
uint32_t HAL_NAND_Read_Status(NAND_HandleTypeDef *hnand)
NAND memory read status.
HAL_LockTypeDef
HAL Lock structures definition.
HAL_StatusTypeDef HAL_NAND_ConfigDevice(NAND_HandleTypeDef *hnand, NAND_DeviceConfigTypeDef *pDeviceConfig)
Configure the device: Enter the physical parameters of the device.
Header file of FMC HAL module.
HAL_StatusTypeDef HAL_NAND_ECC_Disable(NAND_HandleTypeDef *hnand)
Disable dynamically NAND ECC feature.
NAND Memory electronic signature Structure definition.
void HAL_NAND_IRQHandler(NAND_HandleTypeDef *hnand)
This function handles NAND device interrupt request.
FunctionalState ExtraCommandEnable
FMC_NAND_TypeDef * Instance
NAND Memory address Structure definition.
void HAL_NAND_ITCallback(NAND_HandleTypeDef *hnand)
NAND interrupt feature callback.
NAND handle Structure definition.