/** ****************************************************************************** * @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. * *

© COPYRIGHT 2019 Chipways

****************************************************************************** */ #ifndef __XL_FLASH_H__ #define __XL_FLASH_H__ #ifdef __cplusplus extern "C" { #endif /* Includes ---------------------------------------------------------------*/ #include /* 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__ */ /** * @} */ /** * @} */