MCUXpresso_MIMXRT1052xxxxB/components/internal_flash/fsl_adapter_flash.h

242 lines
11 KiB
C

/*
* Copyright 2018-2019 NXP
* All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __FLASH_H__
#define __FLASH_H__
/*!
* @addtogroup FLASH_Adapter
* @{
*/
#include "fsl_common.h"
/*! *********************************************************************************
*************************************************************************************
* Include
*************************************************************************************
********************************************************************************** */
/*! *********************************************************************************
*************************************************************************************
* Public macros
*************************************************************************************
********************************************************************************** */
/*! @brief Whether enable transactional function of the FLASH. (0 - disable, 1 - enable) */
#ifndef HAL_FLASH_TRANSFER_MODE
#define HAL_FLASH_TRANSFER_MODE (0U)
#endif
/*! *********************************************************************************
*************************************************************************************
* Public type definitions
*************************************************************************************
********************************************************************************** */
/*! @brief Hal flash status. */
typedef enum _hal_flash_status
{
kStatus_HAL_Flash_Success = kStatus_Success, /*!< flash operation is successful*/
kStatus_HAL_Flash_Fail = MAKE_STATUS(kStatusGroup_HAL_FLASH, 1), /*!< flash operation is not successful*/
kStatus_HAL_Flash_InvalidArgument = MAKE_STATUS(kStatusGroup_HAL_FLASH, 2), /*!< Invalid argument */
kStatus_HAL_Flash_AlignmentError = MAKE_STATUS(kStatusGroup_HAL_FLASH, 3), /*!< Alignment Error */
kStatus_HAL_Flash_EccError = MAKE_STATUS(kStatusGroup_HAL_FLASH, 4), /*!< ECC error detected */
kStatus_HAL_Flash_Error = MAKE_STATUS(kStatusGroup_HAL_FLASH, 5), /*!< Illegal command */
kStatus_HAL_Flash_NotSupport = MAKE_STATUS(kStatusGroup_HAL_FLASH, 6), /*!< Not support */
} hal_flash_status_t;
/*! @brief Hal flash property. */
typedef enum _hal_flash_property_tag
{
kHAL_Flash_PropertyPflashSectorSize = 0x00U, /*!< Pflash sector size property.*/
kHAL_Flash_PropertyPflashTotalSize = 0x01U, /*!< Pflash total size property.*/
kHAL_Flash_PropertyPflashBlockSize = 0x02U, /*!< Pflash block size property.*/
kHAL_Flash_PropertyPflashBlockCount = 0x03U, /*!< Pflash block count property.*/
kHAL_Flash_PropertyPflashBlockBaseAddr = 0x04U, /*!< Pflash block base address property.*/
kHAL_Flash_PropertyPflashFacSupport = 0x05U, /*!< Pflash fac support property.*/
kHAL_Flash_PropertyPflashAccessSegmentSize = 0x06U, /*!< Pflash access segment size property.*/
kHAL_Flash_PropertyPflashAccessSegmentCount = 0x07U, /*!< Pflash access segment count property.*/
kHAL_Flash_PropertyFlexRamBlockBaseAddr = 0x08U, /*!< FlexRam block base address property.*/
kHAL_Flash_PropertyFlexRamTotalSize = 0x09U, /*!< FlexRam total size property.*/
kHAL_Flash_PropertyDflashSectorSize = 0x10U, /*!< Dflash sector size property.*/
kHAL_Flash_PropertyDflashTotalSize = 0x11U, /*!< Dflash total size property.*/
kHAL_Flash_PropertyDflashBlockSize = 0x12U, /*!< Dflash block size property.*/
kHAL_Flash_PropertyDflashBlockCount = 0x13U, /*!< Dflash block count property.*/
kHAL_Flash_PropertyDflashBlockBaseAddr = 0x14U, /*!< Dflash block base address property.*/
kHAL_Flash_PropertyEepromTotalSize = 0x15U, /*!< EEPROM total size property.*/
kHAL_Flash_PropertyFlashMemoryIndex = 0x20U /*!< Flash memory index property.*/
} hal_flash_property_tag_t;
/*! @brief Hal flash security state. */
typedef enum _hal_flash_security_state
{
kHAL_Flash_SecurityStateNotSecure = 0xc33cc33cU, /*!< Flash is not secure.*/
kHAL_Flash_SecurityStateBackdoorEnabled = 0x5aa55aa5U, /*!< Flash backdoor is enabled.*/
kHAL_Flash_SecurityStateBackdoorDisabled = 0x5ac33ca5U /*!< Flash backdoor is disabled.*/
} hal_flash_security_state_t;
/*! @brief Hal flash margin value. */
typedef enum _hal_flash_margin_value
{
kHAL_Flash_MarginValueNormal = 0, /*!< Use the 'normal' read level for 1s.*/
kHAL_Flash_MarginValueUser, /*!< Apply the 'User' margin to the normal read-1 level.*/
kHAL_Flash_MarginValueFactory, /*!< Apply the 'Factory' margin to the normal read-1 level.*/
kHAL_Flash_MarginValueInvalid /*!< Not real margin level, Used to determine the range of valid margin level. */
} hal_flash_margin_value_t;
/*! *********************************************************************************
*************************************************************************************
* Public memory declarations
*************************************************************************************
********************************************************************************** */
/*! *********************************************************************************
*************************************************************************************
* Public prototypes
*************************************************************************************
********************************************************************************** */
#if defined(__cplusplus)
extern "C" {
#endif
/*!
* @name Initialization
* @{
*/
/*!
* @brief Initializes the flash hal adapter module.
*
* This function initializes the Flash module for the other Flash APIs.
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
* @retval #kStatus_HAL_Flash_InvalidArgument An invalid argument is provided.
* @retval #kStatus_HAL_Flash_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available.
* @retval #kStatus_HAL_Flash_PartitionStatusUpdateFailure Failed to update the partition status.
*/
hal_flash_status_t HAL_FlashInit(void);
/*!
* \brief Write aligned data to FLASH
*
* @note This API should be called after HAL_FlashEraseSector was called to make sure the flash was erased, and
* make sure the flash program address and flash program size is aligned with flash write unit size.
*
* @param dest The address of the Flash location
* @param size The number of bytes to be programed
* @param pData Pointer to the data to be programmed to Flash
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
*
*/
hal_flash_status_t HAL_FlashProgram(uint32_t dest, uint32_t size, uint8_t *pData);
/*!
* \brief Write data to FLASH
*
* @note This API should be called after HAL_FlashEraseSector was called to make sure the flash was erased.
* @param dest The address of the Flash location
* @param size The number of bytes to be programed
* @param pData Pointer to the data to be programmed to Flash
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
*
*/
hal_flash_status_t HAL_FlashProgramUnaligned(uint32_t dest, uint32_t size, uint8_t *pData);
/*!
* \brief Erase the Flash memory which is specified by the parameter dest and parameter size, the content of the
* specified flash memory would be 0xFF.
*
* @param dest The start address of the first sector to be erased
* @param size The number of bytes to be erased
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
*
*/
hal_flash_status_t HAL_FlashEraseSector(uint32_t dest, uint32_t size);
/*!
* \brief Verify erase data in Flash
*
* @param start The address of the Flash location
* @param lengthInBytes The number of bytes to be checked
* @param margin Flash margin value
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
*/
hal_flash_status_t HAL_FlashVerifyErase(uint32_t start, uint32_t lengthInBytes, hal_flash_margin_value_t margin);
/*!
* \brief Read data from FLASH
*
* @param scr The address of the Flash location to be read
* @param size The number of bytes to be read
* @param pData Pointer to the data to be read from Flash
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
*
*/
hal_flash_status_t HAL_FlashRead(uint32_t src, uint32_t size, uint8_t *pData);
/*!
* \brief Read data from FLASH with ECC Fault detection enabled.
*
* Note : BusFault is not raised, just SoC indication
*
* @param scr The address of the Flash location to be read
* @param size The number of bytes to be read
* @param pData Pointer to the data to be read from Flash
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
* #kStatus_HAL_Flash_EccError if ECC Fault error got raised
*
*/
hal_flash_status_t HAL_FlashReadCheckEccFaults(uint32_t src, uint32_t size, uint8_t *pData);
/*!
* @brief Returns the desired hal flash property.
*
* @param Property The desired property from the list of properties in
* enum hal_flash_property_tag_t
* @param value A pointer to the value returned for the desired flash property.
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
* @retval #kStatus_HAL_Flash_InvalidArgument An invalid argument is provided.
* @retval #kStatus_HAL_Flash_NotSupport Flash currently not support.
*/
hal_flash_status_t HAL_FlashGetProperty(hal_flash_property_tag_t property, uint32_t *value);
/*!
* @brief Set the desired hal flash property.
*
* @param Property The desired property from the list of properties in
* enum hal_flash_property_tag_t
* @param value The value would be set to the desired flash property.
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
* @retval #kStatus_HAL_Flash_InvalidArgument An invalid argument is provided.
* @retval #kStatus_HAL_Flash_NotSupport Flash currently not support.
*/
hal_flash_status_t HAL_FlashSetProperty(hal_flash_property_tag_t property, uint32_t value);
/*!
* @brief Returns the security state via the pointer passed into the function.
*
* This function retrieves the current flash security status, including the
* security enabling state and the backdoor key enabling state.
*
* @param state A pointer to the value returned for the current security status
*
* @retval #kStatus_HAL_Flash_Success API was executed successfully.
* @retval #kStatus_HAL_Flash_InvalidArgument An invalid argument is provided.
* @retval #kStatus_HAL_Flash_NotSupport Flash currently not support.
*/
hal_flash_status_t HAL_FlashGetSecurityState(hal_flash_security_state_t *state);
#if defined(__cplusplus)
}
#endif
/*! @}*/
#endif /* __FLASH_H__ */