MCUXpresso_LPC55S69/components/flash/nand/fsl_nand_flash.h

134 lines
4.1 KiB
C

/*
* Copyright 2018-2020 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __FSL_NAND_FLASH_H__
#define __FSL_NAND_FLASH_H__
#include "fsl_common.h"
/*!
* @addtogroup nand_flash_component
* @{
*/
/*******************************************************************************
* Definitions
******************************************************************************/
/*! @brief NAND Flash Config block structure */
typedef struct _nand_config
{
void *memControlConfig; /*!< memory controller configuration, should be assigned to specific controller
configuration structure pointer.*/
void *driverBaseAddr; /*! Driver Base address. */
} nand_config_t;
/*!@brief NAND Flash handle info*/
typedef struct _nand_handle
{
/*------------Common parameters used for normal nand flash controller operation ----------*/
void *driverBaseAddr; /*! Driver Base address. */
uint8_t vendorType; /*!< vendor type */
uint32_t bytesInPageDataArea; /*!< Bytes in page data area .*/
uint32_t bytesInPageSpareArea; /*!< Bytes in page spare area .*/
uint32_t pagesInBlock; /*!< Pages in each block. */
uint32_t blocksInPlane; /*!< blocks in each plane. */
uint32_t planesInDevice; /*!< planes in each device .*/
/*------------Specific parameters used for specific nand flash controller ----------*/
void *deviceSpecific; /*!< Device specific control parameter */
} nand_handle_t;
/*******************************************************************************
* API
******************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @name NAND FLASH Driver
* @{
*/
/*!
* @brief Initialize NAND FLASH devices.
*
* This function initialize NAND Flash controller and NAND Flash.
*
* @param config Nand flash configuration.
* The "memControlConfig" and "driverBaseAddr" are controller specific structure.
* please set those two parameter with your Nand controller configuration structure type pointer.
* such as for SEMC:
* @code
* semc_mem_nand_config_t semcNandconfig =
* {
* .....
* }
* nand_config_t config =
* {
* .memControlConfig = (void *)&semcNandconfig;
* .driverBaseAddr = (void *)SEMC;
* }
* @endcode
* @param handle The NAND Flash handler.
* @retval execution status
*/
status_t Nand_Flash_Init(nand_config_t *config, nand_handle_t *handle);
/*!
* @brief Read page data from NAND Flash.
*
* @param handle The NAND Flash handler.
* @param pageIndex Nand flash page index, range from 0 ~ xxx.
* @param buffer Nand flash buffer to read data to.
* @param length Nand flash read length.
* @retval execution status
*/
status_t Nand_Flash_Read_Page(nand_handle_t *handle, uint32_t pageIndex, uint8_t *buffer, uint32_t length);
/*!
* @brief Read page partial data from NAND Flash.
*
* @param handle The NAND Flash handler.
* @param pageIndex Nand flash page index, range from 0 ~ xxx.
* @param offset_bytes Offset to start read the page data.
* @param buffer Nand flash buffer to read data to.
* @param length Nand flash read length.
* @retval execution status
*/
status_t Nand_Flash_Read_Page_Partial(
nand_handle_t *handle, uint32_t pageIndex, uint32_t offset_bytes, uint8_t *buffer, uint32_t length);
/*!
* @brief Program page data to NAND Flash.
*
* @param handle The NAND Flash handler.
* @param pageIndex Nand flash page index, range from 0 ~ xxx.
* @param src The data to be programed to the page.
* @param length Nand flash read length.
* @retval execution status
*/
status_t Nand_Flash_Page_Program(nand_handle_t *handle, uint32_t pageIndex, const uint8_t *src, uint32_t length);
/*!
* @brief Erase block NAND Flash.
*
* @param handle The NAND Flash handler.
* @param blockIndex Nand flash block index to be erased, range from 0 ~ xxx.
* @retval execution status
*/
status_t Nand_Flash_Erase_Block(nand_handle_t *handle, uint32_t blockIndex);
/*! @} */
#ifdef __cplusplus
}
#endif
/*! @} */
#endif /* __FSL_NAND_FLASH_H__ */