51 int32_t
FMC_ConfigXOM(uint32_t u32XomNum, uint32_t u32XomBase, uint8_t u8XomPage)
69 FMC->ISPDAT = u32XomBase;
84 FMC->ISPDAT = u8XomPage;
133 FMC->ISPADDR = u32PageAddr;
160 FMC->ISPDAT = 0x0055AA03UL;
186 FMC->ISPADDR = u32BlockAddr;
211 FMC->ISPADDR = u32BankAddr;
239 int32_t i32Active, err = 0;
255 u32Addr = (
FMC->XOMR0STS & 0xFFFFFF00u) >> 8u;
258 u32Addr = (
FMC->XOMR1STS & 0xFFFFFF00u) >> 8u;
261 u32Addr = (
FMC->XOMR2STS & 0xFFFFFF00u) >> 8u;
264 u32Addr = (
FMC->XOMR3STS & 0xFFFFFF00u) >> 8u;
270 FMC->ISPADDR = u32Addr;
271 FMC->ISPDAT = 0x55aa03u;
276 while(
FMC->ISPTRG) {}
316 u32act = (((
FMC->XOMSTS) & 0xful) & (1ul << u32XomNum)) >> u32XomNum;
317 ret = (int32_t)u32act;
362 FMC->ISPADDR = u32Addr;
379 int32_t
FMC_Read_64(uint32_t u32addr, uint32_t * u32data0, uint32_t * u32data1)
384 FMC->ISPADDR = u32addr;
397 *u32data0 =
FMC->MPDAT0;
398 *u32data1 =
FMC->MPDAT1;
445 FMC->ISPADDR = u32Addr;
446 FMC->ISPDAT = u32Data;
465 FMC->ISPADDR = u32addr;
466 FMC->MPDAT0 = u32data0;
467 FMC->MPDAT1 = u32data1;
492 int i, idx, retval = 0;
499 u32Len = u32Len - (u32Len % 8);
505 FMC->ISPADDR = u32Addr;
506 FMC->MPDAT0 = pu32Buf[idx++];
507 FMC->MPDAT1 = pu32Buf[idx++];
508 FMC->MPDAT2 = pu32Buf[idx++];
509 FMC->MPDAT3 = pu32Buf[idx++];
531 FMC->MPDAT0 = pu32Buf[idx++];
532 FMC->MPDAT1 = pu32Buf[idx++];
553 FMC->MPDAT2 = pu32Buf[idx++];
554 FMC->MPDAT3 = pu32Buf[idx++];
580 int32_t
FMC_Write_OTP(uint32_t otp_num, uint32_t low_word, uint32_t high_word)
593 FMC->ISPDAT = low_word;
609 FMC->ISPDAT = high_word;
633 int32_t
FMC_Read_OTP(uint32_t otp_num, uint32_t *low_word, uint32_t *high_word)
658 *low_word =
FMC->MPDAT0;
659 *high_word =
FMC->MPDAT1;
731 if (
FMC->ISPDAT != 0xFFFFFFFFUL)
790 for (i = 0; i < u32Count; i++)
818 if ((u32addr % 512UL) || (u32count % 512UL))
825 FMC->ISPADDR = u32addr;
826 FMC->ISPDAT = u32count;
832 FMC->ISPADDR = u32addr;
856 FMC->ISPSTS = 0x80UL;
859 FMC->ISPADDR = u32addr;
860 FMC->ISPDAT = u32count;
868 FMC->ISPADDR = u32addr;
872 while (
FMC->ISPDAT == 0UL);
906 const int32_t lock_CONFIG,
const int32_t lock_SPROM)
908 uint32_t lock_ctrl = 0UL;
912 if (
FMC->KPKEYSTS != 0x200UL)
948 u32KeySts =
FMC->KPKEYSTS;
1009 FMC->KPKEY0 = key[0];
1010 FMC->KPKEY1 = key[1];
1011 FMC->KPKEY2 = key[2];
1016 u32KeySts =
FMC->KPKEYSTS;
#define FMC_ISPCTL_ISPFF_Msk
uint32_t FMC_ReadDataFlashBaseAddr(void)
Get the base address of Data Flash if enabled.
int32_t FMC_WriteConfig(uint32_t u32Config[], uint32_t u32Count)
Execute ISP commands to erase then write User Configuration.
#define FMC_KPCNT_KPMAX_Msk
int32_t FMC_Erase_Bank(uint32_t u32BankAddr)
Execute FMC_ISPCMD_BANK_ERASE command to erase a flash block.
int32_t FMC_GetXOMState(uint32_t xom_num)
Check the XOM is actived or not.
void FMC_Close(void)
Disable FMC ISP function.
uint32_t FMC_CheckAllOne(uint32_t u32addr, uint32_t u32count)
Run flash all one verification and get result.
#define FMC_KPKEYSTS_FORBID_Msk
int32_t FMC_ConfigXOM(uint32_t xom_num, uint32_t xom_base, uint8_t xom_page)
Config XOM Region.
int32_t FMC_Is_OTP_Locked(uint32_t otp_num)
Check the OTP is locked or not.
int32_t FMC_Erase(uint32_t u32PageAddr)
Execute FMC_ISPCMD_PAGE_ERASE command to erase a flash page. The page size is 4096 bytes.
#define FMC_MPSTS_MPBUSY_Msk
int32_t FMC_Lock_OTP(uint32_t otp_num)
Lock the specified OTP.
#define FMC_ISPCMD_BLOCK_ERASE
int32_t FMC_GetBootSource(void)
Get the current boot source.
#define FMC_KPKEYSTS_SPFLAG_Msk
#define READ_ALLONE_CMD_FAIL
void FMC_Open(void)
Enable FMC ISP function.
NuMicro peripheral access layer header file.
#define FMC_ISPCMD_RUN_CKS
#define FMC_KPKEYSTS_KEYBUSY_Msk
#define FMC_ISPCTL_BL_Msk
int32_t FMC_Write8Bytes(uint32_t u32addr, uint32_t u32data0, uint32_t u32data1)
Execute ISP FMC_ISPCMD_PROGRAM_64 to program a double-word to flash.
uint32_t FMC_Read(uint32_t u32Addr)
Execute FMC_ISPCMD_READ command to read a word from flash.
uint32_t FMC_GetChkSum(uint32_t u32addr, uint32_t u32count)
Run CRC32 checksum calculation and get result.
#define FMC_ISPCMD_READ_64
#define FMC_ISPCMD_PAGE_ERASE
int32_t FMC_Erase_SPROM(void)
Execute FMC_ISPCMD_PAGE_ERASE command to erase SPROM. The page size is 4096 bytes.
int32_t FMC_Erase_Block(uint32_t u32BlockAddr)
Execute FMC_ISPCMD_BLOCK_ERASE command to erase a flash block. The block size is 4 pages.
#define FMC_DISABLE_CFG_UPDATE()
int32_t FMC_Read_64(uint32_t u32addr, uint32_t *u32data0, uint32_t *u32data1)
Execute FMC_ISPCMD_READ_64 command to read a double-word from flash.
#define FMC_ISPSTS_ISPFF_Msk
#define FMC_KPCNT_KPMAX_Pos
#define FMC_ISPSTS_ISPBUSY_Msk
#define FMC_KPKEYSTS_CFGFLAG_Msk
int32_t FMC_SetSPKey(uint32_t key[3], uint32_t kpmax, uint32_t kemax, const int32_t lock_CONFIG, const int32_t lock_SPROM)
Setup security key.
#define FMC_ISPCMD_PROGRAM_64
#define FMC_KPKEYTRG_TCEN_Msk
#define FMC_MULTI_WORD_PROG_LEN
#define FMC_KPKEYSTS_KEYLOCK_Msk
#define FMC_ISPCMD_READ_CKS
void FMC_Write(uint32_t u32Addr, uint32_t u32Data)
Execute ISP FMC_ISPCMD_PROGRAM to program a word to flash.
#define FMC_KPKEYCNT_KPKEMAX_Pos
#define FMC_ISPCMD_PROGRAM_MUL
int32_t FMC_CompareSPKey(uint32_t key[3])
Execute security key comparison.
#define FMC_ISPTRG_ISPGO_Msk
#define FMC_ISPCTL_BS_Msk
#define FMC_ISPCTL_ISPEN_Msk
#define FMC_KPKEYSTS_KEYMATCH_Msk
#define FMC_ISPCMD_BANK_ERASE
int32_t FMC_Read_OTP(uint32_t otp_num, uint32_t *low_word, uint32_t *high_word)
Read the 64-bits data from the specified OTP.
#define FMC_ISPCMD_READ_ALL1
#define FMC_KPKEYCNT_KPKEMAX_Msk
int32_t FMC_WriteMultiple(uint32_t u32Addr, uint32_t pu32Buf[], uint32_t u32Len)
Program Multi-Word data into specified address of flash.
int32_t FMC_EraseXOM(uint32_t xom_num)
Execute Erase XOM Region.
#define FMC_ENABLE_CFG_UPDATE()
#define FMC_ISPCMD_RUN_ALL1
#define FMC_KPKEYTRG_KPKEYGO_Msk
#define FMC_ISPCMD_PROGRAM
int32_t FMC_ReadConfig(uint32_t u32Config[], uint32_t u32Count)
Execute FMC_ISPCMD_READ command to read User Configuration.
void FMC_SetBootSource(int32_t i32BootSrc)
Set boot source from LDROM or APROM after next software reset.
int32_t FMC_Write_OTP(uint32_t otp_num, uint32_t low_word, uint32_t high_word)
Program a 64-bits data to the specified OTP.