/**
|
******************************************************************************
|
* @file xl_fmc.h
|
* @author software group
|
* @brief This file contains all the functions prototypes for the fmc
|
* firmware library.
|
******************************************************************************
|
* @attention
|
*
|
* 2019 by Chipways Communications,Inc. All Rights Reserved.
|
* This software is supplied under the terms of a license
|
* agreement or non-disclosure agreement with Chipways.
|
* Passing on and copying of this document,and communication
|
* of its contents is not permitted without prior written
|
* authorization.
|
*
|
* <h2><center>© COPYRIGHT 2019 Chipways</center></h2>
|
******************************************************************************
|
*/
|
#ifndef __XL_FLASH_H__
|
#define __XL_FLASH_H__
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
/* Includes ---------------------------------------------------------------*/
|
#include <XL6600.h>
|
/* Register define ------------------------------------------------------------*/
|
/* FSTAT Bit Fields */
|
#define FMC_FSTAT_SEC_MASK 0x00800000u
|
#define FMC_FSTAT_SEC_SHIFT 23
|
|
#define FMC_FSTAT_MGSTAT_MASK 0x03000000u
|
#define FMC_FSTAT_MGSTAT_SHIFT 24
|
|
#define FMC_FSTAT_MGBUSY_MASK 0x08000000u
|
#define FMC_FSTAT_MGBUSY_SHIFT 27
|
|
#define FMC_FSTAT_FPVIOL_MASK 0x10000000u
|
#define FMC_FSTAT_FPVIOL_SHIFT 28
|
|
#define FMC_FSTAT_ACCERR_MASK 0x20000000u
|
#define FMC_FSTAT_ACCERR_SHIFT 29
|
|
#define FMC_FSTAT_CCIF_MASK 0x80000000u
|
#define FMC_FSTAT_CCIF_SHIFT 31
|
|
/* FCCOBF0 Bit Fields */
|
#define FMC_FCCOBF0_FADDR_MASK 0x00FFFFFFu
|
#define FMC_FCCOBF0_FADDR_SHIFT 0u
|
|
#define FMC_FCCOBF0_FCMD_MASK 0xFF000000u
|
#define FMC_FCCOBF0_FCMD_SHIFT 24u
|
|
/* FCCOBF1 Bit Fields */
|
#define FMC_FCCOBF1_DATA0_MASK 0xFFFFFFFFu
|
#define FMC_FCCOBF1_DATA0_SHIFT 0
|
|
/* FCCOBF2 Bit Fields */
|
#define FMC_FCCOBF2_DATA1_MASK 0xFFFFFFFFu
|
#define FMC_FCCOBF2_DATA1_SHIFT 0
|
|
/* FCNFG Bit Fields */
|
#define FMC_FCNFG_ECC_DISABLE_AREA_MASK 0x0000000Fu
|
#define FMC_FCNFG_ECC_DISABLE_AREA_SHIFT 0
|
|
#define FMC_FCNFG_CCIE_MASK 0x80000000u
|
#define FMC_FCNFG_CCIE_SHIFT 31
|
|
/* FRLD Bit Fields */
|
#define FMC_FRLD_FRLD_MASK 0x699655AAu
|
#define FMC_FRLD_FRLD_SHIFT 0
|
|
/* FCPC0 Bit Fields */
|
#define FMC_FCPC0_CLK1M_MASK 0x0001FC00u
|
#define FMC_FCPC0_CLK1M_SHIFT 10u
|
|
#define FMC_FCPC0_RWC_MASK 0x001E0000u
|
#define FMC_FCPC0_RWC_SHIFT 17u
|
|
#define FMC_FCPC0_CEN_MASK 0x00200000u
|
#define FMC_FCPC0_CEN_SHIFT 21
|
|
#define FMC_FCPC0_DPSTB_MASK 0x00400000u
|
#define FMC_FCPC0_DPSTB_SHIFT 22
|
|
#define FMC_FCPC0_CLK1MLCK_MASK 0x40000000u
|
#define FMC_FCPC0_CLK1MLCK_SHIFT 30
|
|
#define FMC_FCPC0_HSMD_MASK 0x80000000u
|
#define FMC_FCPC0_HSMD_SHIFT 31
|
|
/* FOSP Bit Fields */
|
#define FMC_FOSP_FPLS_MASK 0x00000300u
|
#define FMC_FOSP_FPLS_SHIFT 8u
|
|
#define FMC_FOSP_FPLDIS_MASK 0x00000400u
|
#define FMC_FOSP_FPLDIS_SHIFT 10u
|
|
#define FMC_FOSP_FPHS_MASK 0x00001800u
|
#define FMC_FOSP_FPHS_SHIFT 11u
|
|
#define FMC_FOSP_FPHDIS_MASK 0x00002000u
|
#define FMC_FOSP_FPHDIS_SHIFT 13u
|
|
#define FMC_FOSP_RNV6_MASK 0x00004000u
|
#define FMC_FOSP_RNV6_SHIFT 14
|
|
#define FMC_FOSP_FPOPEN_MASK 0x00008000u
|
#define FMC_FOSP_FPOPEN_SHIFT 15u
|
|
#define FMC_FOSP_FSEC_MASK 0x00030000u
|
#define FMC_FOSP_FSEC_SHIFT 16
|
|
#define FMC_FOSP_FOPT_MASK 0xFF000000u
|
#define FMC_FOSP_FOPT_SHIFT 24
|
|
/* KEYHIGH Bit Fields */
|
#define FMC_FOSP_BACKDOOR_EN_MASK 0x80000000u
|
#define FMC_FOSP_BACKDOOR_EN_SHIFT 31
|
|
/** FMC - Register Layout Typedef */
|
|
typedef struct
|
{
|
__IO uint32_t FSTAT; /*!< Flash״̬¼Ä´æÆ÷, offset: 0x0 */
|
__IO uint32_t FCCOBF0; /*!< FlashÃüÁî¼Ä´æÆ÷0, offset: 0x4 */
|
__IO uint32_t FCCOBF1; /*!< FlashÃüÁî¼Ä´æÆ÷1, offset: 0x8 */
|
__IO uint32_t FCCOBF2; /*!< FlashÃüÁî¼Ä´æÆ÷2, offset: 0xC */
|
__IO uint32_t FCNFG; /*!< FlashÅäÖüĴæÆ÷, offset: 0x10 */
|
__IO uint32_t FRLD; /*!< FlashÅäÖÃ×Ö¶ÎÖØÐ¼ÓÔØ¼Ä´æÆ÷, offset: 0x14 */
|
__IO uint32_t RESERVED1[2];
|
__IO uint32_t FCPC0; /*!< Flash¿ØÖÆÆ÷²ÎÊý¼Ä´æÆ÷, offset: 0x20 */
|
__IO uint32_t RESERVED2[5];//3
|
__IO uint32_t FOSP; /*!< Flash°²È«Ñ¡Ôñ¼Ä´æÆ÷, offset: 0x30 */
|
__IO uint32_t RESERVED3;//3
|
__IO uint32_t KEYLOW; /*!< FlashºóÃÅÃØÔ¿µÍ¼Ä´æÆ÷, offset: 0x40 */
|
__IO uint32_t RESERVED4;
|
__IO uint32_t KEYHIGH; /*!< FlashºóÃÅÃØÔ¿¸ß¼Ä´æÆ÷, offset: 0x48 */
|
}FMC_Type;
|
|
extern FMC_Type* FMC;
|
|
/** @addtogroup XL6600_StdPeriph_Driver
|
* @{
|
*/
|
|
/** @addtogroup FLASH
|
* @{
|
*/
|
|
/* Exported types ------------------------------------------------------------*/
|
|
/**
|
* @brief FLASH±£»¤ÅäÖýṹÌ嶨Òå
|
*/
|
typedef struct
|
{
|
FunctionalState FLASH_POPEN; /*!< FLASH²Ù×÷±£»¤Ê¹ÄÜ */
|
uint8_t FLASH_FPHDIS; /*!< Flash±£»¤½Ï¸ßµØÖ··¶Î§½ûÓà */
|
uint8_t FLASH_FPLDIS; /*!< Flash±£»¤½ÏµÍµØÖ··¶Î§½ûÓà */
|
uint8_t FLASH_FPHS; /*!< Flash±£»¤½Ï¸ßµØÖ·´óС */
|
uint8_t FLASH_FPLS; /*!< Flash±£»¤½ÏµÍµØÖ·´óС */
|
|
} FLASH_ProtectTypeDef, *FLASH_ProtectConfigPtr;
|
|
/* Exported constants --------------------------------------------------------*/
|
/** @defgroup FLAHS_Exported_Constants FLASHÄ£¿éʹÓòÎÊý¶¨Òå
|
* @{
|
*/
|
|
/**
|
* @defgroup Flash_Exported_Types Flash³õʼ»¯×´Ì¬
|
* @{
|
*/
|
|
#define FLASH_InitStatus_Failed ((uint8_t)0x00) /*!< FLASH³õʼ»¯Ê§°Ü */
|
#define FLASH_InitStatus_Success ((uint8_t)0x01) /*!< FLASH³õʼ»¯³É¹¦ */
|
/**
|
* @}
|
*/
|
|
/**
|
* @defgroup Flash_Protect_Commad_List Flash±£»¤ÃüÁî
|
* @{
|
*/
|
#define FLASH_PROTECT_MASK 0x0000FF00u
|
|
#define FLASH_FPHS_1KB ((uint8_t)0x00) /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x7C00-0x7FFF */
|
#define FLASH_FPHS_2KB ((uint8_t)0x01) /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x7800-0x7FFF */
|
#define FLASH_FPHS_4KB ((uint8_t)0x02) /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x7000-0x7FFF */
|
#define FLASH_FPHS_8KB ((uint8_t)0x03) /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x6000-0x7FFF */
|
|
|
#define FLASH_FPLS_2KB ((uint8_t)0x00) /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x07FF */
|
#define FLASH_FPLS_4KB ((uint8_t)0x00) /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x0FFF */
|
#define FLASH_FPLS_8KB ((uint8_t)0x00) /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x1FFF */
|
#define FLASH_FPLS_16KB ((uint8_t)0x00) /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x3FFF */
|
/**
|
* @}
|
*/
|
|
/**
|
* @defgroup Flash_ECC/Erase_Error Flash ECC´íÎ󣬲Á³ýУÑé´íÎó
|
* @{
|
*/
|
#define FLASH_FSTAT_MGSTAT0_MASK 0x01000000u /*!< FLASHÉÁ´æÃüÁî´íÎó±êÖ¾0 */
|
#define FLASH_FSTAT_MGSTAT1_MASK 0x03000000u /*!< FLASHÉÁ´æÃüÁî´íÎó±êÖ¾1 */
|
/**
|
* @}
|
*/
|
|
/**
|
* @defgroup Flash_Start_Address/Sector_Size FlashÆðʼµØÖ·ºÍÉÈÇøµÄ´óС
|
* @{
|
*/
|
#define FLASH_SECTOR_SIZE 1024 /*!< FLASHÉÈÇø´óС */
|
#define FLASH_START_ADDRESS 0 /*!< FLASHÆðʼµØÖ· */
|
/**
|
* @}
|
*/
|
|
/**
|
* @defgroup Flash_Error_Type Flash´íÎó״̬¶¨Òå
|
* @{
|
*/
|
#define FLASH_ERR_BASE 0x3000
|
#define FLASH_ERR_SUCCESS 0u /*!< ÎÞ´íÎó */
|
#define FLASH_ERR_INVALID_PARAM (FLASH_ERR_BASE+1) /*!< ÎÞЧ²ÎÊý´íÎó */
|
#define FLASH_ERR_ACCESS (FLASH_ERR_BASE+8) /*!< flash·ÃÎÊ´íÎó±êÖ¾ */
|
#define FLASH_ERR_PROTECTION (FLASH_ERR_BASE+0x10) /*!< flash±£»¤Î¥·´±êÖ¾ */
|
#define FLASH_ERR_ECC (FLASH_ERR_BASE+0x11) /*!< flash eccУÑé´íÎó */
|
#define FLASH_ERR_ERASEVERIFY (FLASH_ERR_BASE+0x12) /*!< flash²Á³ýÑéÖ¤´íÎó */
|
#define FLASH_ERR_INIT_CCIF (FLASH_ERR_BASE+0x14) /*!< ¼ÓÔØÃüÁîδÍê³É */
|
#define FLASH_ERR_INIT_CLKIM (FLASH_ERR_BASE+0x18) /*!< CLK1M´íÎó */
|
/**
|
* @}
|
*/
|
|
/**
|
* @defgroup Flash_Commad_List FlashÃüÁîÁбí
|
* @{
|
*/
|
#define FLASH_CMD_ERASE_CHIP 0x01 /*!< ²Á³ýÕû¿éFLASH */
|
#define FLASH_CMD_ERASE_SECTOR 0x02 /*!< ²Á³ýÉÈÇø */
|
#define FLASH_CMD_PROGRAM 0x03 /*!< FLASH±à³ÌÃüÁî */
|
#define FLASH_CMD_POWER_ON_RESET 0x04 /*!< FLASHÉϵ縴λ */
|
#define FLASH_CMD_READ 0x05 /*!< FLASH¶ÁÃüÁî */
|
#define FLASH_CMD_ERASE_VERIFY_SECTOR 0x06 /*!< ÉÈÇø²Á³ýУÑé */
|
#define FLASH_CMD_ERASE_VERIFY_CHIP 0x07 /*!< оƬ²Á³ýУÑé */
|
/**
|
* @}
|
*/
|
|
/**
|
* @defgroup Flash_Disable_ECC_Area Flash½ûÓÃECCÇøÓò
|
* @{
|
*/
|
#define FLASH_ECC_DISABLE_AREA_0KB 0x00 /*!< ECC½ûÓÃ0KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_1KB 0x01 /*!< ECC½ûÓÃ1KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_2KB 0x02 /*!< ECC½ûÓÃ2KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_4KB 0x03 /*!< ECC½ûÓÃ4KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_8KB 0x04 /*!< ECC½ûÓÃ8KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_16KB 0x05 /*!< ECC½ûÓÃ16KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_32KB 0x06 /*!< ECC½ûÓÃ32KBµØÖ·¿Õ¼ä */
|
#define FLASH_ECC_DISABLE_AREA_64KB 0x07 /*!< ECC½ûÓÃ64KBµØÖ·¿Õ¼ä */
|
/**
|
* @}
|
*/
|
|
/**
|
* @brief Flash_Wead_Wait_Cycle Flash¶ÁµÈ´ýʱ¼äÖÜÆÚ
|
* @{
|
*/
|
typedef enum
|
{
|
FLASH_READWAIT_NO =0, /*!< Î޵ȴý */
|
FLASH_READWAIT_1CYCLE , /*!< ¶ÁµÈ´ý1¸öÖÜÆÚ */
|
FLASH_READWAIT_2CYCLE , /*!< ¶ÁµÈ´ý2¸öÖÜÆÚ */
|
FLASH_READWAIT_3CYCLE , /*!< ¶ÁµÈ´ý3¸öÖÜÆÚ */
|
FLASH_READWAIT_4CYCLE , /*!< ¶ÁµÈ´ý4¸öÖÜÆÚ */
|
FLASH_READWAIT_5CYCLE , /*!< ¶ÁµÈ´ý5¸öÖÜÆÚ */
|
FLASH_READWAIT_6CYCLE , /*!< ¶ÁµÈ´ý6¸öÖÜÆÚ */
|
FLASH_READWAIT_7CYCLE , /*!< ¶ÁµÈ´ý7¸öÖÜÆÚ */
|
FLASH_READWAIT_8CYCLE , /*!< ¶ÁµÈ´ý8¸öÖÜÆÚ */
|
FLASH_READWAIT_9CYCLE , /*!< ¶ÁµÈ´ý9¸öÖÜÆÚ */
|
FLASH_READWAIT_10CYCLE , /*!< ¶ÁµÈ´ý10¸öÖÜÆÚ */
|
}FLASH_ReadWaitCycleDef;
|
/**
|
* @}
|
*/
|
|
|
|
/**
|
* @}
|
*/
|
#if defined(__GNUC__)
|
#undef _Init_Flash_Ram
|
#define _Init_Flash_Ram __attribute__((__section__(".flash_ram")))
|
#else
|
#undef _Init_Flash_Ram
|
#define _Init_Flash_Ram
|
#endif
|
|
/* Exported macro ------------------------------------------------------------*/
|
/* Exported functions --------------------------------------------------------*/
|
uint16_t FLASH_Init(uint8_t BusClockMhz) _Init_Flash_Ram;
|
void FLASH_ProtecConfig(const FLASH_ProtectTypeDef *FLASH_ProtectType) _Init_Flash_Ram;
|
void FLASH_CCIEnableCmd( FunctionalState NewState) _Init_Flash_Ram;
|
void FLASH_CacheCmd( FunctionalState NewState) _Init_Flash_Ram;
|
void FLASH_SleepInStopCmd( FunctionalState NewState) _Init_Flash_Ram;
|
void FLASH_LockClk1MCmd( FunctionalState NewState) _Init_Flash_Ram;
|
void FLASH_BuffEnableCmd( FunctionalState NewState) _Init_Flash_Ram;
|
void FLASH_SetReadWait(FLASH_ReadWaitCycleDef ReadWaitCycle) _Init_Flash_Ram;
|
uint8_t FLASH_GetCmdFinshFlag(void) _Init_Flash_Ram;
|
uint8_t FLASH_GetControllerBusyFlag(void) _Init_Flash_Ram;
|
void FLASH_LaunchCMD(void) _Init_Flash_Ram;
|
void FLASH_ClearErrFlag(uint32_t flag) _Init_Flash_Ram;
|
uint16_t FLASH_CheckErrStatus(void) _Init_Flash_Ram;
|
uint16_t FLASH_Program2LongWord( uint32_t TargetAddress, uint32_t DwData0, uint32_t DwData1) _Init_Flash_Ram;
|
uint64_t FLASH_ReadLongWord(const uint32_t *TargetAddress) _Init_Flash_Ram;
|
void FLASH_ReadLongWordCmd(uint32_t TargetAddress) _Init_Flash_Ram;
|
void FLASH_EraseChip(void) _Init_Flash_Ram;
|
uint16_t FLASH_EraseSector( uint32_t TargetAddress) _Init_Flash_Ram;
|
void FLASH_PowerOnReset(void) _Init_Flash_Ram;
|
uint16_t FLASH_EraseVerifySector( uint32_t TargetAddress) _Init_Flash_Ram;
|
void FLASH_EraseVerifyChip(void) _Init_Flash_Ram;
|
void FLASH_ConfigReload(void) _Init_Flash_Ram;
|
uint8_t FLASH_GetFlashSecurity(void) _Init_Flash_Ram;
|
uint8_t FLASH_GetFlashProtection(void) _Init_Flash_Ram;
|
uint8_t FLASH_GetFlashOption(void) _Init_Flash_Ram;
|
void FLASH_DisableECCArea(uint8_t ecc_area) _Init_Flash_Ram;
|
void FLASH_BackdoorUnlockFlash(uint32_t KeyHigh, uint32_t Keylow) _Init_Flash_Ram;
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /*__XL_FLASH_H__ */
|
/**
|
* @}
|
*/
|
|
/**
|
* @}
|
*/
|