/*================================================================================================== * Project : RTD AUTOSAR 4.4 * Platform : CORTEXM * Peripheral : FTFC_FLS_IP IPV_QSPI * Dependencies : none * * Autosar Version : 4.4.0 * Autosar Revision : ASR_REL_4_4_REV_0000 * Autosar Conf.Variant : * SW Version : 1.0.0 * Build Version : S32K1_RTD_1_0_0_HF01_D2109_ASR_REL_4_4_REV_0000_20210907 * * (c) Copyright 2020-2021 NXP Semiconductors * All Rights Reserved. * * NXP Confidential. This software is owned or controlled by NXP and may only be * used strictly in accordance with the applicable license terms. By expressly * accepting such terms or by downloading, installing, activating and/or otherwise * using the software, you are agreeing that you have read, and that you agree to * comply with and are bound by, such license terms. If you do not agree to be * bound by the applicable license terms, then you may not retain, install, * activate or otherwise use the software. ==================================================================================================*/ /** * @file Ftfc_Fls_Ip.h * * @addtogroup FTFC_FLS_IP FTFC IP Driver * @{ */ /*================================================================================================*/ #ifndef FLS_FLASH_H #define FLS_FLASH_H #ifdef __cplusplus extern "C"{ #endif /*================================================================================================== * INCLUDE FILES * 1) system and project includes * 2) needed interfaces from external units * 3) internal and external interfaces from this unit ==================================================================================================*/ #include "Ftfc_Fls_Ip_Types.h" #include "Ftfc_Fls_Ip_Cfg.h" /*================================================================================================== * SOURCE FILE VERSION INFORMATION ==================================================================================================*/ #define FTFC_FLS_IP_VENDOR_ID_H 43 #define FTFC_FLS_IP_AR_RELEASE_MAJOR_VERSION_H 4 #define FTFC_FLS_IP_AR_RELEASE_MINOR_VERSION_H 4 #define FTFC_FLS_IP_AR_RELEASE_REVISION_VERSION_H 0 #define FTFC_FLS_IP_SW_MAJOR_VERSION_H 1 #define FTFC_FLS_IP_SW_MINOR_VERSION_H 0 #define FTFC_FLS_IP_SW_PATCH_VERSION_H 0 /*================================================================================================== FILE VERSION CHECKS ==================================================================================================*/ /* Check if current file and Ftfc_Fls_Ip_Types header file are of the same vendor */ #if (FTFC_FLS_IP_TYPES_VENDOR_ID != FTFC_FLS_IP_VENDOR_ID_H) #error "Ftfc_Fls_Ip.h and Ftfc_Fls_Ip_Types.h have different vendor ids" #endif /* Check if current file and Ftfc_Fls_Ip_Types header file are of the same Autosar version */ #if ((FTFC_FLS_IP_TYPES_AR_RELEASE_MAJOR_VERSION != FTFC_FLS_IP_AR_RELEASE_MAJOR_VERSION_H) || \ (FTFC_FLS_IP_TYPES_AR_RELEASE_MINOR_VERSION != FTFC_FLS_IP_AR_RELEASE_MINOR_VERSION_H) || \ (FTFC_FLS_IP_TYPES_AR_RELEASE_REVISION_VERSION != FTFC_FLS_IP_AR_RELEASE_REVISION_VERSION_H) \ ) #error "AutoSar Version Numbers of Ftfc_Fls_Ip.h and Ftfc_Fls_Ip_Types.h are different" #endif /* Check if current file and Ftfc_Fls_Ip_Types header file are of the same Software version */ #if ((FTFC_FLS_IP_TYPES_SW_MAJOR_VERSION != FTFC_FLS_IP_SW_MAJOR_VERSION_H) || \ (FTFC_FLS_IP_TYPES_SW_MINOR_VERSION != FTFC_FLS_IP_SW_MINOR_VERSION_H) || \ (FTFC_FLS_IP_TYPES_SW_PATCH_VERSION != FTFC_FLS_IP_SW_PATCH_VERSION_H) \ ) #error "Software Version Numbers of Ftfc_Fls_Ip.h and Ftfc_Fls_Ip_Types.h are different" #endif /* Check if current file and Ftfc_Fls_Ip_Cfg header file are of the same vendor */ #if (FTFC_FLS_IP_VENDOR_ID_CFG != FTFC_FLS_IP_VENDOR_ID_H) #error "Ftfc_Fls_Ip.h and Ftfc_Fls_Ip_Cfg.h have different vendor ids" #endif /* Check if current file and Ftfc_Fls_Ip_Cfg header file are of the same Autosar version */ #if ((FTFC_FLS_IP_AR_RELEASE_MAJOR_VERSION_CFG != FTFC_FLS_IP_AR_RELEASE_MAJOR_VERSION_H) || \ (FTFC_FLS_IP_AR_RELEASE_MINOR_VERSION_CFG != FTFC_FLS_IP_AR_RELEASE_MINOR_VERSION_H) || \ (FTFC_FLS_IP_AR_RELEASE_REVISION_VERSION_CFG != FTFC_FLS_IP_AR_RELEASE_REVISION_VERSION_H) \ ) #error "AutoSar Version Numbers of Ftfc_Fls_Ip.h and Ftfc_Fls_Ip_Cfg.h are different" #endif /* Check if current file and Ftfc_Fls_Ip_Cfg header file are of the same Software version */ #if ((FTFC_FLS_IP_SW_MAJOR_VERSION_CFG != FTFC_FLS_IP_SW_MAJOR_VERSION_H) || \ (FTFC_FLS_IP_SW_MINOR_VERSION_CFG != FTFC_FLS_IP_SW_MINOR_VERSION_H) || \ (FTFC_FLS_IP_SW_PATCH_VERSION_CFG != FTFC_FLS_IP_SW_PATCH_VERSION_H) \ ) #error "Software Version Numbers of Ftfc_Fls_Ip.h and Ftfc_Fls_Ip_Cfg.h are different" #endif /*================================================================================================== * DEFINES AND MACROS ==================================================================================================*/ /*================================================================================================== GLOBAL VARIABLES ==================================================================================================*/ #define FLS_START_SEC_VAR_CLEARED_32 #include "Fls_MemMap.h" #if (STD_ON == FTFC_TIMEOUT_SUPERVISION_ENABLED) extern uint32 Ftfc_Fls_Ip_u32ElapsedTicks; extern uint32 Ftfc_Fls_Ip_u32TimeoutTicks; extern uint32 Ftfc_Fls_Ip_u32CurrentTicks; #endif #define FLS_STOP_SEC_VAR_CLEARED_32 #include "Fls_MemMap.h" #define FLS_START_SEC_CONST_UNSPECIFIED #include "Fls_MemMap.h" /* Base address for Flash Memory Module */ extern FTFx_HARDWARE_TYPE * const FTFx_BaseAddress; #define FLS_STOP_SEC_CONST_UNSPECIFIED #include "Fls_MemMap.h" /*================================================================================================== * FUNCTION PROTOTYPES ==================================================================================================*/ #define FLS_START_SEC_CODE #include "Fls_MemMap.h" /** * @brief Initializes the FTCF module * * @details This function will initialize ftfc module and clear all error flags. * * @param[in] Ftfc_Fls_Ip_pInitConfig Pointer to the driver configuration structure. * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Initialization is success * @retval STATUS_FTFC_FLS_IP_ERROR_TIMEOUT Errors Timeout because wait for the Done bit long time * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_Init(const Ftfc_ConfigType * Ftfc_Fls_Ip_pInitConfig); /*! * @brief Abort a program or erase operation * * @details This function will abort a program or erase operation in user * mode and clear all PGM, APGM, ERS, AERS, EHV, AEHV bits in MCR,AMCRS registers * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS : The operation is successful. * @retval STATUS_FTFC_FLS_IP_ERROR_TIMEOUT: the operation error because wait for the Done bit long time * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_Abort(void); /** * @brief This function fills data to pDestAddressPtr * * @details This function fills data to pDestAddressPtr with data from the specified address * * @param[in] u32SrcAddress The start address of the area to be read. * @param[in] pDestAddressPtr Pointer to the destination of the read. * @param[in] u32Length Read size * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Read performed successfully. * @retval STATUS_FTFC_FLS_IP_ERROR_INPUT_PARAM Input parameters are invalid. * @retval STATUS_FTFC_FLS_IP_ERROR There was an error while reading. * * @pre The module has to be initialized and not busy. * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_Read(Ftfc_Fls_Ip_AddressType u32SrcAddress, uint8 *pDestAddressPtr, Ftfc_Fls_Ip_LengthType u32Length ); /** * @brief Checks that there is the desired data at the specified address * * @details Checks that there is the desired data at the specified address. * If the compare is intented to be a blank check, the pSourceAddressPtr should be NULL. * * @param[in] u32SrcAddress The start address of the area to be checked. * @param[in] pCompareAddressPtr Pointer to the data expected to be read. * @param[in] u32Length Check size * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Read performed successfully. * @retval STATUS_FTFC_FLS_IP_ERROR_INPUT_PARAM Input parameters are invalid. * @retval STATUS_FTFC_FLS_IP_ERROR There was an error while reading. * @retval STATUS_FTFC_FLS_IP_ERROR_PROGRAM_VERIFY The expected data was not found completely at the specified address * * @pre The module has to be initialized and not busy. * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_Compare(Ftfc_Fls_Ip_AddressType u32SrcAddress, const uint8 * pCompareAddressPtr, Ftfc_Fls_Ip_LengthType u32Length ); /** * @brief Get block number from target address * * @details Get block number from target address * * @param[in] u32TargetAddress target address * * @return Ftfc_Fls_Ip_GetBlockNumberFromAddress * @retval The block number which contains the target address. * */ Ftfc_Fls_Ip_FlashBlocksNumberType Ftfc_Fls_Ip_GetBlockNumberFromAddress(uint32 u32TargetAddress); /** * @brief Accepts and erases a selected program flash or data flash sector if possible * * @details Accepts an erase job over one of the sectors if possible. * Starts the high voltage erase and then exits. The status of the hardware erase must * be verified by calling asynchronously the Ftfc_Fls_Ip_SectorEraseStatus function. * The Ftfc_Fls_Ip_SectorErase function shall cover all the available sectors. * * @param[in] u32SectorStartAddress The start address of the sector to be erased. * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Hardware erase started successfully * @retval STATUS_FTFC_FLS_IP_ERROR_INPUT_PARAM The selected sector is out of bound * @retval STATUS_FTFC_FLS_IP_ERROR There is another job configured or in progress or * @p The sector is locked by another core or couldn't be unlocked. * @retval STATUS_FTFC_FLS_IP_ERROR_TIMEOUT The erase operation exceeded the timeout - Status value available only if the timeout feature is enabled * * @pre The module has to be initialized. * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_SectorErase(uint32 u32SectorStartAddress); /** * @brief Checks the status of the hardware erase started by the Ftfc_Fls_Ip_SectorErase function. * * @details Checks the status of the hardware erase started by the Ftfc_Fls_Ip_SectorErase function. * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Erase performed successfully * @retval STATUS_Ftfc_Fls_Ip_BUSY Hardware erase is still in progress * @retval STATUS_FTFC_FLS_IP_ERROR There was an error during the hardware erase. * @retval STATUS_FTFC_FLS_IP_ERROR_TIMEOUT The erase operation exceeded the timeout - Status value available only if the timeout feature is enabled. * @retval STATUS_FTFC_FLS_IP_ERROR_BLANK_CHECK The sector was not erased correctly - Status value available only if the blank check feature is enabled * * @pre The module has to be initialized. * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_SectorEraseStatus(void); /** * @brief Writes data into the memory array using the main interface. Initiates the hardware write and then exits. * * @details Writes data into the memory array using the main interface. Initiates the hardware write and then exits. * the status of the hardware erase must be verified by calling asynchronously the Ftfc_Fls_Ip_WriteStatus function. * * @param[in] u32DestAddress The start address of the write, must be aligned with 8 bytes. * @param[in] pSourceAddressPtr Source program buffer address. * @param[in] u32Length Size in bytes of the flash region to be programed, must be aligned with 8 bytes and the maximum value is 128 bytes. * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Program performed successfully * @retval STATUS_FTFC_FLS_IP_ERROR_INPUT_PARAM The input parameters are invaid. * @retval STATUS_FTFC_FLS_IP_ERROR There is another job configured or in progress or * @p The sector is locked by another core or couldn't be unlocked. * @retval STATUS_FTFC_FLS_IP_ERROR_TIMEOUT The erase operation exceeded the timeout - Status value available only if the timeout feature is enabled * * @pre The module has to be initialized. * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_Write(uint32 u32DestAddress, const uint8 *pSourceAddressPtr, uint32 u32Length ); /** * @brief Checks the status of the hardware program started by the FTFC_Ip_Write function. * * @details Checks the status of the hardware program started by the FTFC_Ip_Write function. * * @return Ftfc_Fls_Ip_StatusType * @retval STATUS_FTFC_FLS_IP_SUCCESS Program performed successfully * @retval STATUS_Ftfc_Fls_Ip_BUSY Hardware program is still in progress * @retval STATUS_FTFC_FLS_IP_ERROR There was an error during the hardware program. * @retval STATUS_FTFC_FLS_IP_ERROR_TIMEOUT The program operation exceeded the timeout - Status value available only if the timeout feature is enabled. * @retval STATUS_FTFC_FLS_IP_ERROR_PROGRAM_VERIFY The data was not written corectly into the memory - Status available only of program verify feature is enabled * * @pre The module has to be initialized. * */ Ftfc_Fls_Ip_StatusType Ftfc_Fls_Ip_WriteStatus(void); #if ( (FTFC_ECC_CHECK == STD_ON) || (FTFC_ECC_CHECK_BY_AUTOSAR_OS == STD_ON) ) #if ( FTFC_ECC_SYNDROME_AND_DATA_ADDRESS_CHECK == STD_ON ) Fls_CompHandlerReturnType Ftfc_Fls_Ip_DsiHandler(const Fls_ExceptionDetailsType *pExceptionDetailsPtr); #else Fls_CompHandlerReturnType Ftfc_Fls_Ip_DsiHandler(void); #endif #endif /* ( (FTFC_ECC_CHECK == STD_ON) || (FTFC_ECC_CHECK_BY_AUTOSAR_OS == STD_ON) ) */ void Ftfc_Fls_Ip_SetAsyncMode(const boolean Async); #define FLS_STOP_SEC_CODE #include "Fls_MemMap.h" #ifdef __cplusplus } #endif /** @} */ #endif /* FTFC_FLS_IP_H */