/*================================================================================================== * 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. ==================================================================================================*/ /*================================================================================================== ==================================================================================================*/ #ifndef FLS_API_H #define FLS_API_H /** * @file Fls_Api.h * * @addtogroup FLS FLS Driver * @{ */ /* implements Fls_Api.h_Artifact */ #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 "Fls_Cfg.h" #include "MemIf_Types.h" /*================================================================================================== * SOURCE FILE VERSION INFORMATION ==================================================================================================*/ /** * @brief Version Check parameters. */ #define FLS_API_VENDOR_ID 43 #define FLS_API_AR_RELEASE_MAJOR_VERSION 4 #define FLS_API_AR_RELEASE_MINOR_VERSION 4 #define FLS_API_AR_RELEASE_REVISION_VERSION 0 #define FLS_API_SW_MAJOR_VERSION 1 #define FLS_API_SW_MINOR_VERSION 0 #define FLS_API_SW_PATCH_VERSION 0 /*================================================================================================== * FILE VERSION CHECKS ==================================================================================================*/ /* Check if current file and Fls_Cfg.h file are of the same vendor */ #if (FLS_API_VENDOR_ID != FLS_VENDOR_ID_CFG) #error "Fls_Api.h and Fls_Cfg.h have different vendor ids" #endif /* Check if current file and Fls_Cfg.h file are of the same Autosar version */ #if ((FLS_API_AR_RELEASE_MAJOR_VERSION != FLS_AR_RELEASE_MAJOR_VERSION_CFG) || \ (FLS_API_AR_RELEASE_MINOR_VERSION != FLS_AR_RELEASE_MINOR_VERSION_CFG) || \ (FLS_API_AR_RELEASE_REVISION_VERSION != FLS_AR_RELEASE_REVISION_VERSION_CFG) \ ) #error "AutoSar Version Numbers of Fls_Api.h and Fls_Cfg.h are different" #endif /* Check if current file and Fls_Cfg.h file are of the same software version */ #if ((FLS_API_SW_MAJOR_VERSION != FLS_SW_MAJOR_VERSION_CFG) || \ (FLS_API_SW_MINOR_VERSION != FLS_SW_MINOR_VERSION_CFG) || \ (FLS_API_SW_PATCH_VERSION != FLS_SW_PATCH_VERSION_CFG) \ ) #error "Software Version Numbers of Fls_Api.h and Fls_Cfg.h are different" #endif #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK /* Check if current file and MemIf_Types.h file are of the same Autosar version */ #if ((FLS_API_AR_RELEASE_MAJOR_VERSION != MEMIF_AR_RELEASE_MAJOR_VERSION) || \ (FLS_API_AR_RELEASE_MINOR_VERSION != MEMIF_AR_RELEASE_MINOR_VERSION) \ ) #error "AutoSar Version Numbers of Fls_Api.h and MemIf_Types.h are different" #endif #endif /*================================================================================================== * CONSTANTS ==================================================================================================*/ /** * @brief AUTOSAR module identification */ #define FLS_MODULE_ID 92 /** * @brief AUTOSAR module instance identification */ #define FLS_INSTANCE_ID 0U /** * @brief Development error codes (passed to DET). * @implements DETERRORCODE_enumeration */ /** * @brief API service called with wrong config parameter */ #define FLS_E_PARAM_CONFIG 0x01U /** * @brief API service called with wrong address parameter */ #define FLS_E_PARAM_ADDRESS 0x02U /** * @brief API service called with wrong length parameter */ #define FLS_E_PARAM_LENGTH 0x03U /** * @brief API service called with wrong data parameter */ #define FLS_E_PARAM_DATA 0x04U /** * @brief API service called without module initialization */ #define FLS_E_UNINIT 0x05U /** * @brief API service called while driver still busy */ #define FLS_E_BUSY 0x06U /** * @brief API service called with NULL pointer */ #define FLS_E_PARAM_POINTER 0x0AU /** * @brief Runtime error codes (passed to DET). */ /** * @brief Erase verification (blank check) failed */ #define FLS_E_VERIFY_ERASE_FAILED 0x07U /** * @brief Write verification (compare) failed */ #define FLS_E_VERIFY_WRITE_FAILED 0x08U /** * @brief Timeout exceeded */ #define FLS_E_TIMEOUT 0x09U /** * @brief Transient Faults codes (passed to DET). */ /** * @brief Flash erase failed (HW) */ #define FLS_E_ERASE_FAILED 0x01U /** * @brief Flash write failed (HW) */ #define FLS_E_WRITE_FAILED 0x02U /** * @brief Flash read failed (HW) */ #define FLS_E_READ_FAILED 0x03U /** * @brief Flash compare failed (HW) */ #define FLS_E_COMPARE_FAILED 0x04U #if (FLS_QSPI_SECTORS_CONFIGURED == STD_ON) #define FLS_E_UNEXPECTED_FLASH_ID 0x05U /* Expected hardware ID not matched */ #endif /** * @brief All service IDs (passed to DET). * @implements SERVICEIDs_enumeration */ /** * @brief service ID of function: Fls_Init. (passed to DET) */ #define FLS_INIT_ID 0x00U /** * @brief service ID of function: Fls_Erase. (passed to DET) */ #define FLS_ERASE_ID 0x01U /** * @brief service ID of function: Fls_Write. (passed to DET) */ #define FLS_WRITE_ID 0x02U /** * @brief service ID of function: Fls_Cancel. (passed to DET) */ #define FLS_CANCEL_ID 0x03U /** * @brief service ID of function: Fls_GetJobResult. (passed to DET) */ #define FLS_GETJOBRESULT_ID 0x05U /** * @brief service ID of function: Fls_MainFunction. (passed to DET) */ #define FLS_MAINFUNCTION_ID 0x06U /** * @brief service ID of function: Fls_Read. (passed to DET) */ #define FLS_READ_ID 0x07U /** * @brief service ID of function: Fls_Compare. (passed to DET) */ #define FLS_COMPARE_ID 0x08U /** * @brief service ID of function: Fls_SetMode. (passed to DET) */ #define FLS_SETMODE_ID 0x09U /** * @brief service ID of function: Fls_GetVersionInfo. (passed to DET) */ #define FLS_GETVERSIONINFO_ID 0x10U /** * @brief service ID of function: Fls_BlankCheck. (passed to DET) */ #define FLS_BLANK_CHECK_ID 0x11U /** * @brief All sector flags. */ /** * @brief fls sector erase asynch */ #define FLS_SECTOR_ERASE_ASYNCH 0x01U /** * @brief fls page write asynch */ #define FLS_PAGE_WRITE_ASYNCH 0x02U /*================================================================================================== * DEFINES AND MACROS ==================================================================================================*/ /*================================================================================================== * FUNCTION PROTOTYPES ==================================================================================================*/ /** * @brief Start of Fls section CODE */ #define FLS_START_SEC_CODE #include "Fls_MemMap.h" /** * @brief The function initializes Fls module. * @details The function sets the internal module variables according to given * configuration set. * * @param[in] pConfigPtr Pointer to flash driver configuration set. * * @api * * @pre @p pConfigPtr must not be @p NULL_PTR and the module status must not * be @p MEMIF_BUSY. * * */ extern void Fls_Init(const Fls_ConfigType * pConfigPtr); /** * @brief Write one or more complete flash pages to the flash device. * @details Starts a write job asynchronously. The actual job is performed by * @p Fls_MainFunction. * * @param[in] u32TargetAddress Target address in flash memory. * @param[in] pSourceAddressPtr Pointer to source data buffer. * @param[in] u32Length Number of bytes to write. * * @return Std_ReturnType * @retval E_OK Write command has been accepted. * @retval E_NOT_OK Write command has not been accepted. * * @api * * @pre The module has to be initialized and not busy. * @post @p Fls_Write changes module status and some internal variables * (@p Fls_u32JobSectorIt, @p Fls_u32JobAddrIt, @p Fls_u32JobAddrEnd, * @p Fls_pJobDataSrcPtr, @p Fls_eJob, @p Fls_eJobResult). * */ extern Std_ReturnType Fls_Write(Fls_AddressType u32TargetAddress, const uint8 * pSourceAddressPtr, Fls_LengthType u32Length ); /** * @brief Erase one or more complete flash sectors. * @details Starts an erase job asynchronously. The actual job is performed * by the @p Fls_MainFunction. * * @param[in] u32TargetAddress Target address in flash memory. * @param[in] u32Length Number of bytes to erase. * * @return Std_ReturnType * @retval E_OK Erase command has been accepted. * @retval E_NOT_OK Erase command has not been accepted. * * @api * * @pre The module has to be initialized and not busy. * @post @p Fls_Erase changes module status and some internal variables * (@p Fls_u32JobSectorIt, @p Fls_u32JobSectorEnd, @p Fls_Job, * @p Fls_eJobResult). * * */ extern Std_ReturnType Fls_Erase(Fls_AddressType u32TargetAddress, Fls_LengthType u32Length ); #if ( FLS_CANCEL_API == STD_ON ) /** * @brief Cancel an ongoing flash read, write, erase or compare job. * @details Abort a running job synchronously so that directly after returning * from this function a new job can be started. * * @api * * @pre The module must be initialized. * @post @p Fls_Cancel changes module status and @p Fls_eJobResult * internal variable. * * */ extern void Fls_Cancel( void ); #endif /* FLS_CANCEL_API == STD_ON */ #if ( FLS_GET_STATUS_API == STD_ON ) /** * @brief Returns the FLS module status. * @details Returns the FLS module status synchronously. * * @return MemIf_StatusType * @retval MEMIF_UNINIT Module has not been initialized (yet). * @retval MEMIF_IDLE Module is currently idle. * @retval MEMIF_BUSY Module is currently busy. * * @api * */ extern MemIf_StatusType Fls_GetStatus( void ); #endif /* FLS_GET_STATUS_API == STD_ON */ #if ( FLS_GET_JOB_RESULT_API == STD_ON ) /** * @brief Returns the result of the last job. * @details Returns synchronously the result of the last job. * * @return MemIf_JobResultType * @retval MEMIF_JOB_OK Successfully completed job. * @retval MEMIF_JOB_FAILED Not successfully completed job. * @retval MEMIF_JOB_PENDING Still pending job (not yet completed). * @retval MEMIF_JOB_CANCELED Job has been cancelled. * @retval MEMIF_BLOCK_INCONSISTENT Inconsistent block requested, it may * contains corrupted data. * @retval MEMIF_BLOCK_INVALID Invalid block requested. * * @api * * @implements Fls_GetJobResult_Activity * */ extern MemIf_JobResultType Fls_GetJobResult( void ); #endif /* FLS_GET_JOB_RESULT_API == STD_ON */ /** * @brief Reads from flash memory. * @details Starts a read job asynchronously. The actual job is performed by * @p Fls_MainFunction. * * @param[in] u32SourceAddress Source address in flash memory. * @param[in] u32Length Number of bytes to read. * @param[out] pTargetAddressPtr Pointer to target data buffer. * * @return MemIf_JobResultType * @retval MEMIF_JOB_OK Successfully completed job. * @retval MEMIF_JOB_FAILED Not successfully completed job. * @retval MEMIF_JOB_PENDING Still pending job (not yet completed). * @retval MEMIF_JOB_CANCELED Job has been canceled. * @retval MEMIF_BLOCK_INCONSISTENT Inconsistent block requested, it may * contains corrupted data. * @retval MEMIF_BLOCK_INVALID Invalid block requested. * * @api * * @pre The module has to be initialized and not busy. * @post @p Fls_Read changes module status and some internal variables * (@p Fls_u32JobSectorIt, @p Fls_u32JobAddrIt, @p Fls_u32JobAddrEnd, * @p Fls_pJobDataDestPtr, @p Fls_eJob, @p Fls_eJobResult). * * */ extern Std_ReturnType Fls_Read(Fls_AddressType u32SourceAddress, uint8 * pTargetAddressPtr, Fls_LengthType u32Length ); #if ( FLS_COMPARE_API == STD_ON ) /** * @brief Compares a flash memory area with an application data buffer. * @details Starts a compare job asynchronously. The actual job is performed by * @p Fls_MainFunction. * * @param[in] u32SourceAddress Source address in flash memory. * @param[in] pTargetAddressPtr Pointer to source data buffer. * @param[in] u32Length Number of bytes to compare. * * @return Std_ReturnType * @retval E_OK Compare command has been accepted. * @retval E_NOT_OK Compare command has not been accepted. * * @api * * @pre The module has to be initialized and not busy. * @post @p Fls_Read changes module status and some internal variables * (@p Fls_u32JobSectorIt, @p Fls_u32JobAddrIt, @p Fls_u32JobAddrEnd, * @p Fls_pJobDataSrcPtr, @p Fls_eJob, @p Fls_eJobResult). * */ extern Std_ReturnType Fls_Compare(Fls_AddressType u32SourceAddress, const uint8 * pTargetAddressPtr, Fls_LengthType u32Length ); #endif /* FLS_COMPARE_API == STD_ON */ #if (FLS_BLANK_CHECK_API == STD_ON) /** * @brief Verify whether a given memory area has been erased but not (yet) programmed. * @details Starts a compare job asynchronously. The actual job is performed by * @p Fls_MainFunction. * * @param[in] u32TargetAddress Address in flash memory from which the blank check should be started. * @param[in] u32Length Number of bytes to be checked for erase pattern. * * @return Std_ReturnType * @retval E_OK Blank checking command has been accepted. * @retval E_NOT_OK Blank checking command has not been accepted. * * @api * * @pre The module has to be initialized and not busy. * @post @p Fls_Read changes module status and some internal variables * (@p Fls_u32JobSectorIt, @p Fls_u32JobAddrIt, @p Fls_u32JobAddrEnd, * @p Fls_pJobDataSrcPtr, @p Fls_eJob, @p Fls_eJobResult). * * @implements Fls_BlankCheck_Activity * */ Std_ReturnType Fls_BlankCheck(Fls_AddressType u32TargetAddress, Fls_LengthType u32Length ); #endif /* FLS_BLANK_CHECK_API == STD_ON */ #if (FLS_SET_MODE_API == STD_ON) || defined(__DOXYGEN__) /** * @brief Sets the FLS module's operation mode to the given Mode. * @details Every given mode determinates maximum bytes for read-write * operations. Every mode has a set of pre-configured values. * * @param[in] eMode MEMIF_MODE_FAST or MEMIF_MODE_SLOW. * * @api * * @pre The module has to be initialized and not busy. * @post @p Fls_SetMode changes internal variables @p Fls_u32MaxRead and * @p Fls_u32MaxWrite. * */ extern void Fls_SetMode(MemIf_ModeType eMode); #endif /* FLS_SET_MODE_API == STD_ON */ #if ( FLS_VERSION_INFO_API == STD_ON ) /** * @brief Returns version information about FLS module. * @details Version information includes: * - Module Id * - Vendor Id * - Vendor specific version numbers (BSW00407). * * @param[inout] pVersionInfoPtr Pointer to where to store the version information of this module. * * @api * */ extern void Fls_GetVersionInfo(Std_VersionInfoType * pVersionInfoPtr); #endif /* FLS_VERSION_INFO_API == STD_ON */ #if ( STD_ON == FLS_INTERNAL_SECTORS_CONFIGURED ) #if ( (STD_ON == FLS_ECC_CHECK) || (STD_ON == FLS_ECC_CHECK_BY_AUTOSAR_OS) ) /** * @brief Low level data storage exception handler. * @details Low level data storage exception handler. * * @param[in] pExceptionDetailsPtr Exception pointer * * @return Exc_CompHandlerReturnType * @retval EXC_HANDLED_SKIP The data storage exception was * caused by currently pending flash read or compare job * @retval EXC_UNHANDLED The data storage exception was * NOT caused by currently pending flash read or compare job * * @implements Fls_DsiHandler_Activity */ extern Fls_CompHandlerReturnType Fls_DsiHandler(const Fls_ExceptionDetailsType * pExceptionDetailsPtr); #endif /* (STD_ON == FLS_ECC_CHECK) || (STD_ON == FLS_ECC_CHECK_BY_AUTOSAR_OS) */ #if (STD_ON == FLS_ECC_CHECK_BY_AUTOSAR_OS) /** * @brief In the FlsReadFunctionCallout, user can start a task and call this function to performs the actual copy operation. * * @implements Fls_ReadEachBlock_Activity */ extern void Fls_ReadEachBlock(void); #endif /* STD_ON == FLS_ECC_CHECK_BY_AUTOSAR_OS */ #endif /* STD_ON == FLS_INTERNAL_SECTORS_CONFIGURED */ /** * @brief Stop of Fls section CODE */ #define FLS_STOP_SEC_CODE #include "Fls_MemMap.h" #ifdef __cplusplus } #endif /** @}*/ #endif /* FLS_API_H */