40 FMC->ISPCTL &= ~FMC_ISPCTL_ISPEN_Msk;
53 uint32_t u32TimeOutCnt;
58 FMC->ISPADDR = u32PageAddr;
64 if(--u32TimeOutCnt == 0)
118 int32_t i32TimeOutCnt;
123 FMC->ISPADDR = u32Addr;
128 if (i32TimeOutCnt <= 0)
146 int32_t i32TimeOutCnt;
156 if (i32TimeOutCnt <= 0)
175 int32_t i32TimeOutCnt;
185 if (i32TimeOutCnt <= 0)
205 int32_t i32TimeOutCnt;
210 FMC->ISPADDR = (0x04 * u32Index) + 0x10;
215 if (i32TimeOutCnt <= 0)
235 int32_t i32TimeOutCnt;
240 FMC->ISPADDR = 0x04 * u32Index;
245 if (i32TimeOutCnt <= 0)
275 int32_t i32TimeOutCnt;
280 FMC->ISPADDR = u32PageAddr;
285 if (i32TimeOutCnt <= 0)
296 return (
FMC->ISPSTS & 0x0FFFFF00ul);
313 int32_t i32TimeOutCnt;
318 FMC->ISPADDR = u32Addr;
319 FMC->ISPDAT = u32Data;
324 if (i32TimeOutCnt <= 0)
387int32_t
FMC_GetChkSum(uint32_t u32Addr, uint32_t u32Count, uint32_t *u32ChkSum)
389 int32_t i32TimeOutCnt;
393 if ((u32Addr % 512) || (u32Count % 512))
402 FMC->ISPADDR = u32Addr;
403 FMC->ISPDAT = u32Count;
408 if (i32TimeOutCnt <= 0)
418 FMC->ISPADDR = u32Addr;
423 if (i32TimeOutCnt <= 0)
432 *u32ChkSum =
FMC->ISPDAT;
450 int32_t i32TimeOutCnt;
457 FMC->ISPADDR = u32Addr;
458 FMC->ISPDAT = u32Count;
464 if (i32TimeOutCnt <= 0)
480 FMC->ISPADDR = u32Addr;
483 if (i32TimeOutCnt <= 0)
489 while (
FMC->ISPDAT == 0);
493 printf(
"FMC_ISPCMD_READ_ALL1 ISP failed!\n");
523int32_t
FMC_SKey_Setup(uint32_t key[3], uint32_t kpmax, uint32_t kemax,
int lock_CONFIG)
525 uint32_t lock_ctrl = 0;
526 int32_t i32TimeOutCnt;
530 if (
FMC->KEYSTS != 0)
560 if(i32TimeOutCnt <= 0)
568 printf(
"Security key lock failed!\n");
576 printf(
"CONFIG lock failed!\n");
583 printf(
"KPMAX failed!\n");
590 printf(
"KEMAX failed!\n");
612 int32_t i32TimeOutCnt;
618 printf(
"FMC_SKey_Compare - FORBID!\n");
625 printf(
"FMC_SKey_Compare - key is not locked!\n");
637 if (i32TimeOutCnt <= 0)
645 printf(
"Key mismatched!\n");
652 printf(
"Key matched, but still be locked!\n");
657 printf(
"FMC_SKey_Compare - OK.\n");
NANO103 peripheral access layer header file. This file contains all the peripheral register's definit...
#define FMC_ISPSTS_ISPBUSY_Msk
#define FMC_KEYSTS_FORBID_Msk
#define FMC_ISPCTL_ISPFF_Msk
#define FMC_ISPCTL_BS_Msk
#define FMC_KPCNT_KPMAX_Pos
#define FMC_KEYSTS_KEYBUSY_Msk
#define FMC_KEYSTS_KEYLOCK_Msk
#define FMC_KEYTRG_KEYGO_Msk
#define FMC_KEYSTS_KEYMATCH_Msk
#define FMC_ISPCTL_ISPEN_Msk
#define FMC_KEYTRG_TCEN_Msk
#define FMC_KPCNT_KPMAX_Msk
#define FMC_KECNT_KEMAX_Pos
#define FMC_KECNT_KEMAX_Msk
#define FMC_ISPTRG_ISPGO_Msk
#define FMC_KEYSTS_CFGFLAG_Msk
#define FMC_TIMEOUT_ERASE
#define FMC_ISPCMD_READ_CKS
#define FMC_ISPCMD_PROGRAM
#define FMC_FLASH_PAGE_SIZE
#define FMC_TIMEOUT_CHKSUM
#define FMC_ISPCMD_READ_CID
#define FMC_ISPCMD_RUN_ALL1
#define FMC_ISPCMD_READ_PID
#define FMC_TIMEOUT_CHKALLONE
#define FMC_ISPCMD_RUN_CKS
#define FMC_ISPCMD_READ_ALL1
#define FMC_ISPCMD_VECMAP
#define FMC_TIMEOUT_WRITE
#define READ_ALLONE_CMD_FAIL
#define FMC_ISPCMD_READ_UID
#define FMC_ISPCMD_PAGE_ERASE
void FMC_Close(void)
Disable FMC ISP function.
int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count)
Execute ISP command to read User Configuration.
void FMC_SetVectorPageAddr(uint32_t u32PageAddr)
This function will force re-map assigned flash page to CPU address 0x0.
uint32_t FMC_ReadCID(void)
Read company ID.
uint32_t FMC_GetVectorPageAddr(void)
Obtain the current vector page address setting.
uint32_t FMC_ReadUID(uint32_t u32Index)
This function reads one of the three UID.
int32_t FMC_Erase(uint32_t u32PageAddr)
Execute FMC_ISPCMD_PAGE_ERASE command to erase a flash page. The page size is 512 bytes.
int32_t FMC_SKey_Setup(uint32_t key[3], uint32_t kpmax, uint32_t kemax, int lock_CONFIG)
Setup security key.
uint32_t FMC_ReadDataFlashBaseAddr(void)
Get the base address of Data Flash if enabled.
int32_t FMC_Write(uint32_t u32Addr, uint32_t u32Data)
Execute ISP command to program a word to flash.
#define FMC_DISABLE_CFG_UPDATE()
uint32_t FMC_Read(uint32_t u32Addr)
Execute ISP command to read a word from flash.
#define FMC_ENABLE_CFG_UPDATE()
uint32_t FMC_ReadPID(void)
Read product ID.
uint32_t FMC_CheckAllOne(uint32_t u32addr, uint32_t u32count)
Run flash all one verification and get result.
int32_t FMC_GetBootSource(void)
Get the current boot source.
int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count)
Execute ISP command to write User Configuration.
#define FMC_GET_FAIL_FLAG()
void FMC_Open(void)
Enable FMC ISP function.
int32_t FMC_SKey_Compare(uint32_t key[3])
Execute security key comparison.
int32_t FMC_GetChkSum(uint32_t u32Addr, uint32_t u32Count, uint32_t *u32ChkSum)
Run CRC32 checksum calculation and get result.
uint32_t FMC_ReadUCID(uint32_t u32Index)
This function reads one of the four UCID.
#define FMC
Pointer to FMC register structure.