MCUXpresso_MIMXRT1052xxxxB/components/flash/nor/fsl_nor_flash.h

171 lines
4.9 KiB
C

/*
* Copyright 2019-2022 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __FSL_NOR_FLASH_H__
#define __FSL_NOR_FLASH_H__
#include "fsl_common.h"
/*!
* @addtogroup nor_flash_component
* @{
*/
/*******************************************************************************
* Definitions
******************************************************************************/
/*! @brief NOR Flash Config block structure */
typedef struct _nor_config
{
void *memControlConfig; /*!< memory controller configuration, should be assigned to specific controller
configuration structure pointer.*/
void *driverBaseAddr; /*! Driver Base address. */
} nor_config_t;
/*!@brief NOR Flash handle info*/
typedef struct _nor_handle
{
/*------------Common parameters used for normal NOR flash controller operation ----------*/
void *driverBaseAddr; /*! Driver Base address. */
uint32_t bytesInPageSize; /*!< Page size in byte of Serial NOR */
uint32_t bytesInSectorSize; /*!< Minimun Sector size in byte supported by Serial NOR */
uint32_t bytesInMemorySize; /*!< Memory size in byte of Serial NOR */
/*------------Specific parameters used for specific NOR flash controller ----------*/
void *deviceSpecific; /*!< Device specific control parameter */
} nor_handle_t;
/*******************************************************************************
* API
******************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @name NOR FLASH Driver
* @{
*/
/*!
* @brief Initialize NOR FLASH devices.
*
* This function initialize NOR Flash controller and NOR Flash.
*
* @param config NOR 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:
*
* spifi_mem_nor_config_t spifiNorconfig =
* {
* .....
* }
* nor_config_t config =
* {
* .memControlConfig = (void *)\&spifiNorconfig;
* .driverBaseAddr = (void *)SPIFI0;
* }
* @param handle The NOR Flash handler.
* @retval execution status
*/
status_t Nor_Flash_Init(nor_config_t *config, nor_handle_t *handle);
/*!
* @brief Read page data from NOR Flash.
*
* @param handle The NOR Flash handler.
* @param address NOR flash start address to read data from.
* @param buffer NOR flash buffer to read data to.
* @param length NOR flash read length.
* @retval execution status
*/
status_t Nor_Flash_Read(nor_handle_t *handle, uint32_t address, uint8_t *buffer, uint32_t length);
/*!
* @brief Program page data to NOR Flash.
*
* @param handle The NOR Flash handler.
* @param address The address to be programed.
* @param buffer The buffer to be programed to the page.
* @retval execution status
*/
status_t Nor_Flash_Page_Program(nor_handle_t *handle, uint32_t address, uint8_t *buffer);
/*!
* @brief Program data to NOR Flash.
*
* @param handle The NOR Flash handler.
* @param address The address to be programed.
* @param buffer The buffer to be programed to the page.
* @param length The data length to be programed to the page.
* @retval execution status
*/
status_t Nor_Flash_Program(nor_handle_t *handle, uint32_t address, uint8_t *buffer, uint32_t length);
/*!
* @brief Erase sector.
*
* @param handle The NOR Flash handler.
* @param address The start address to be erased.
* @retval execution status
*/
status_t Nor_Flash_Erase_Sector(nor_handle_t *handle, uint32_t address);
/*!
* @brief Erase block.
*
* @param handle The NOR Flash handler.
* @param address The start address to be erased.
* @retval execution status
*/
status_t Nor_Flash_Erase_Block(nor_handle_t *handle, uint32_t address);
/*!
* @brief Erase flash with any size.
*
* @param handle The NOR Flash handler.
* @param address The start address to be erased.
* @param size_Byte Erase flash size.
* @retval execution status
*/
status_t Nor_Flash_Erase(nor_handle_t *handle, uint32_t address, uint32_t size_Byte);
/*!
* @brief Erase Chip NOR Flash .
*
* @param handle The NOR Flash handler.
* @retval execution status
*/
status_t Nor_Flash_Erase_Chip(nor_handle_t *handle);
/*!
* @brief Get the busy status of the NOR Flash.
*
* @param handle The NOR Flash handler.
* @param isBusy Pointer of the variable which has the busy status of the NOR flash.
* @retval execution status
*/
status_t Nor_Flash_Is_Busy(nor_handle_t *handle, bool *isBusy);
/*!
* @brief Deinitialize NOR FLASH devices.
*
* @param handle The NOR Flash handler.
* @retval execution status
*/
status_t Nor_Flash_DeInit(nor_handle_t *handle);
/*! @} */
#ifdef __cplusplus
}
#endif
/*! @} */
#endif /* __FSL_NOR_FLASH_H__ */