PeripheralDriver_Flagchip_F.../Inc/fc7xxx_driver_flash.h

183 lines
6.3 KiB
C

/**
* @file fc7xxx_driver_flash.c
* @author Flagchip
* @brief FC7xxx Flash driver type definition and API
* @version 0.1.0
* @date 2024-01-11
*
* @copyright Copyright (c) 2024 Flagchip Semiconductors Co., Ltd.
*
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2024-01-11 Flagchip054 N/A First version for FC7200
******************************************************************************** */
#ifndef _DRIVER_FC7XXX_DRIVER_FLASH_H_
#define _DRIVER_FC7XXX_DRIVER_FLASH_H_
#include "device_header.h"
/**
* @addtogroup fc7xxx_driver_flash
* @{
*/
/***********************************************************************************************************************
* DEFINES
**********************************************************************************************************************/
/* ------------------------- PFlash ------------------------ */
/** PFlash start address */
#define PFLASH_ADDR_START 0x01000000U
#define PFLASH_ADDR_END 0x011FFFFFU
#define PFLASH_SIZE 0x00200000U /* 256KB */
#define PFLASH_BANK_SIZE 0x00100000U
#define PFLASH_LAST256K_OFFSET 0xC0000UL
/** Program minimum size */
#define PFLASH_PROGRAM_PAGE_MIN_SIZE 0x08U /* 8 bytes */
/** Program maximum */
#define PFLASH_PROGRAM_PAGE_MAX_SIZE 0x80U /* 128 bytes */
/** Erase size */
#define PFLASH_ERASE_SECTOR_SIZE 0x800U /* 2 KBytes */
/** Erase value of flash memory */
#define PFLASH_ERASED_VALUE 0xFFU
/** 4 PFlash Banks, every bank is 2MB */
#define PFLASH_BANK_NUM 0x02U
/* ------------------------- DFlash ------------------------ */
/** DFlash total size */
#define DFLASH_SIZE 0x00040000U /* 256KB */
/** DFlash start address */
#define DFLASH_ADDR_START 0x04000000U
/** DFlash end address */
#define DFLASH_ADDR_END 0x0401FFFFU
/** Program minimum size */
#define DFLASH_PROGRAM_PAGE_MIN_SIZE 0x08U /* 16 bytes */
/** Program maximum */
#define DFLASH_PROGRAM_PAGE_MAX_SIZE 0x80U /* 128 bytes */
/** Erase size */
#define DFLASH_ERASE_SECTOR_SIZE 0x800U /* 8 KBytes */
/** Erase value of flash memory */
#define DFLASH_ERASED_VALUE 0xFFU
/** 1 DFlash Banks, every bank is 2MB */
#define DFLASH_BANK_NUM 0x01U
/** DFlash Bank 0 size */
#define DFLASH_BANK0_SIZE 0x00040000U
#define FLASH_256KB_SIZE 0x00040000U
/** ########################################## Error Code ################################################ */
/**
* \brief FLASH API error status
*
*/
typedef enum
{
FLASH_ERROR_OK = 0x00U,/**< FLASH_ERROR_OK means no error */
FLASH_ERROR_NO_INIT, /**< FLASH_ERROR_NO_INIT means rom code api address is not initialed */
FLASH_ERROR_INVALID_VERSION, /**< FLASH_ERROR_INVALID_VERSION means rom code api version is not same */
FLASH_ERROR_FAILED, /**< FLASH_ERROR_FAILED means operation is failed */
FLASH_ERROR_INVALID_PARAM, /**< FLASH_ERROR_INVALID_PARAM means parameters are invalid */
FLASH_ERROR_INVALID_ADDR, /**< FLASH_ERROR_INVALID_ADDR means address is invalid */
FLASH_ERROR_INVALID_SIZE, /**< FLASH_ERROR_INVALID_SIZE means size is invalid */
FLASH_ERROR_INVALID_SEQUENCE, /**< FLASH_ERROR_INVALID_SEQUENCE means sequence is error */
FLASH_ERROR_TIMEOUT, /**< FLASH_ERROR_TIMEOUT means operation is timeout */
FLASH_ERROR_END = 0xFFFFFFFFU /**< FLASH_ERROR_END make aligned 32bits */
}FLASH_StatusType;
typedef enum
{
FLASH_BLOCK_SELECT0 =0x000u,
FLASH_BLOCK_SELECT1 =0x001u,
FLASH_DATA_BLOCK_SELECT0 =0x002u
}FLASH_API_BLOCK_SELECT_TYPE;
/** ########################################## Type define ################################################ */
/**
* \brief Flash driver parameter define
*
*/
typedef struct
{
uint32_t u32Address; /**< Logical target address */
uint32_t u32Length; /**< Length in logical sectors or bytes */
uint8_t *pData; /**< Pointer to data buffer (read only) */
uint8_t (*wdTriggerFct)(void); /**< Pointer to watchdog handling function */
uint32_t u32ErrorAddress; /**< Error address */
} FLASH_DRIVER_ParamType;
/**
* \brief Initial Flash api address
*
*/
void FLASHDRIVER_Init(void);
/**
* \brief flash driver erase block function
*
* \param blk_sel c
* \return ErrorType
*/
FLASH_StatusType FLASHDRIVER_FlashEraseBlock ( FLASH_API_BLOCK_SELECT_TYPE blk_sel );
/**
* \brief Pflash driver erase function, called after FLASHDRIVER_ArrayCopyToRam
*
* \param pFlashParam contains flash erase function parameter, address is align to 0x400, and length is align to 0x400
* \return ErrorType
*/
FLASH_StatusType FLASHDRIVER_PFlashEraseSector ( FLASH_DRIVER_ParamType * pFlashParam );
/**
* \brief Pflash driver write function, called after FLASHDRIVER_ArrayCopyToRam
*
* \param pFlashParam contains flash write function parameter, address is align to 0x08, and length is align to 0x08
* \return ErrorType
*/
FLASH_StatusType FLASHDRIVER_PFlashWrite ( FLASH_DRIVER_ParamType * pFlashParam );
/**
* \brief DFlash Driver Function for Erasing
*
* \param pFlashParam flash driver erase parameter
* \return ErrorType
*/
FLASH_StatusType FLASHDRIVER_DFlashEraseSector(FLASH_DRIVER_ParamType *pFlashParam);
/**
* \brief DFlash Driver Function for Writing
*
* \param pFlashParam flash driver write parameter
* \return ErrorType
*/
FLASH_StatusType FLASHDRIVER_DFlashWrite(FLASH_DRIVER_ParamType *pFlashParam);
#endif /* end of DRIVER_FLASH_H_ */