134 lines
4.1 KiB
C
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__ */
|