| M480 BSP V3.05.001 The Board Support Package for M480 Series

Functions
FMC Exported Functions
Standard Driver » FMC Driver

## Functions
__STATIC_INLINE uint32_t | FMC_ReadCID (void)
| Read company ID. More...
__STATIC_INLINE uint32_t | FMC_ReadPID (void)
| Read product ID. More...
__STATIC_INLINE uint32_t | FMC_ReadUID (uint8_t u8Index)
| Read Unique ID. More...
__STATIC_INLINE uint32_t | FMC_ReadUCID (uint32_t u32Index)
| To read UCID. More...
__STATIC_INLINE void | FMC_SetVectorPageAddr (uint32_t u32PageAddr)
| Set vector mapping address. More...
__STATIC_INLINE uint32_t | FMC_GetVECMAP (void)
| Get current vector mapping address. More...
void | FMC_Close (void)
| Disable FMC ISP function. More...
int32_t | FMC_ConfigXOM (uint32_t u32XomNum, uint32_t u32XomBase, uint8_t u8XomPage)
| Config XOM Region. More...
int32_t | FMC_Erase (uint32_t u32PageAddr)
| Execute FMC_ISPCMD_PAGE_ERASE command to erase a flash page. The page size is 4096 bytes. More...
int32_t | FMC_Erase_SPROM (void)
| Execute FMC_ISPCMD_PAGE_ERASE command to erase SPROM. The page size is 4096 bytes. More...
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. More...
int32_t | FMC_Erase_Bank (uint32_t u32BankAddr)
| Execute FMC_ISPCMD_BANK_ERASE command to erase a flash block. More...
int32_t | FMC_EraseXOM (uint32_t u32XomNum)
| Execute Erase XOM Region. More...
int32_t | FMC_GetXOMState (uint32_t u32XomNum)
| Check the XOM is actived or not. More...
int32_t | FMC_GetBootSource (void)
| Get the current boot source. More...
void | FMC_Open (void)
| Enable FMC ISP function. More...
uint32_t | FMC_Read (uint32_t u32Addr)
| Execute FMC_ISPCMD_READ command to read a word from flash. More...
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. More...
uint32_t | FMC_ReadDataFlashBaseAddr (void)
| Get the base address of Data Flash if enabled. More...
void | FMC_SetBootSource (int32_t i32BootSrc)
| Set boot source from LDROM or APROM after next software reset. More...
void | FMC_Write (uint32_t u32Addr, uint32_t u32Data)
| Execute ISP FMC_ISPCMD_PROGRAM to program a word to flash. More...
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. More...
int32_t | FMC_WriteMultiple (uint32_t u32Addr, uint32_t pu32Buf[], uint32_t u32Len)
| Program Multi-Word data into specified address of flash. More...
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. More...
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. More...
int32_t | FMC_Lock_OTP (uint32_t otp_num)
| Lock the specified OTP. More...
int32_t | FMC_Is_OTP_Locked (uint32_t otp_num)
| Check the OTP is locked or not. More...
int32_t | FMC_ReadConfig (uint32_t u32Config[], uint32_t u32Count)
| Execute FMC_ISPCMD_READ command to read User Configuration. More...
int32_t | FMC_WriteConfig (uint32_t u32Config[], uint32_t u32Count)
| Execute ISP commands to erase then write User Configuration. More...
uint32_t | FMC_GetChkSum (uint32_t u32addr, uint32_t u32count)
| Run CRC32 checksum calculation and get result. More...
uint32_t | FMC_CheckAllOne (uint32_t u32addr, uint32_t u32count)
| Run flash all one verification and get result. More...
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. More...
int32_t | FMC_CompareSPKey (uint32_t key[3])
| Execute security key comparison. More...

## Detailed Description

## Function Documentation

## ◆ FMC_CheckAllOne()

uint32_t FMC_CheckAllOne | ( | uint32_t | u32addr,
|  | uint32_t | u32count
| ) |  |

Run flash all one verification and get result.

Parameters

  [in] | u32addr | Starting flash address. It must be a page aligned address.
  [in] | u32count | Byte count of flash to be calculated. It must be multiple of 512 bytes.

Return values

  READ_ALLONE_YES | The contents of verified flash area are 0xFFFFFFFF.
  READ_ALLONE_NOT | Some contents of verified flash area are not 0xFFFFFFFF.
  READ_ALLONE_CMD_FAIL | Unexpected error occurred.

Definition at line 852 of file fmc.c.

## ◆ FMC_Close()

void FMC_Close | ( | void |  | ) |

Disable FMC ISP function.

Returns
  None

Definition at line 33 of file fmc.c.

## ◆ FMC_CompareSPKey()

int32_t FMC_CompareSPKey | ( | uint32_t | key[3] | ) |

Execute security key comparison.

Parameters

  [in] | key | Key 0~2 to be compared.

Return values

  0 | Key matched.
  -1 | Forbidden. Times of key comparison mismatch reach the maximum count.
  -2 | Key mismatched.
  -3 | No security key lock. Key comparison is not required.

Definition at line 990 of file fmc.c.

## ◆ FMC_ConfigXOM()

int32_t FMC_ConfigXOM | ( | uint32_t | u32XomNum,
|  | uint32_t | u32XomBase,
|  | uint8_t | u8XomPage
| ) |  |

Config XOM Region.

Parameters

  [in] | u32XomNum | The XOM number(0~3)
  [in] | u32XomBase | The XOM region base address.
  [in] | u8XomPage | The XOM page number of region size.

Return values

  0 | Success
  1 | XOM is has already actived.
  -1 | Program failed.
  -2 | Invalid XOM number.

Program XOM base address and XOM size(page)

Definition at line 51 of file fmc.c.

## ◆ FMC_Erase()

int32_t FMC_Erase | ( | uint32_t | u32PageAddr | ) |

Execute FMC_ISPCMD_PAGE_ERASE command to erase a flash page. The page size is 4096 bytes.

Parameters

  [in] | u32PageAddr | Address of the flash page to be erased. It must be a 4096 bytes aligned address.

Returns
  ISP page erase success or not.

Return values

  0 | Success
  -1 | Erase failed

Definition at line 121 of file fmc.c.

## ◆ FMC_Erase_Bank()

int32_t FMC_Erase_Bank | ( | uint32_t | u32BankAddr | ) |

Execute FMC_ISPCMD_BANK_ERASE command to erase a flash block.

Parameters

  [in] | u32BankAddr | Base address of the flash bank to be erased.

Returns
  ISP page erase success or not.

Return values

  0 | Success
  -1 | Erase failed

Definition at line 206 of file fmc.c.

## ◆ FMC_Erase_Block()

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.

Parameters

  [in] | u32BlockAddr | Address of the flash block to be erased. It must be a 4 pages aligned address.

Returns
  ISP page erase success or not.

Return values

  0 | Success
  -1 | Erase failed

Definition at line 181 of file fmc.c.

## ◆ FMC_Erase_SPROM()

int32_t FMC_Erase_SPROM | ( | void |  | ) |

Execute FMC_ISPCMD_PAGE_ERASE command to erase SPROM. The page size is 4096 bytes.

Returns
  SPROM page erase success or not.

Return values

  0 | Success
  -1 | Erase failed

Definition at line 154 of file fmc.c.

## ◆ FMC_EraseXOM()

int32_t FMC_EraseXOM | ( | uint32_t | u32XomNum | ) |

Execute Erase XOM Region.

Parameters

  [in] | u32XomNum | The XOMRn(n=0~3)

Returns
  XOM erase success or not.

Return values

  0 | Success
  -1 | Erase failed
  -2 | Invalid XOM number.

Execute FMC_ISPCMD_PAGE_ERASE command to erase XOM.

Definition at line 236 of file fmc.c.

## ◆ FMC_GetBootSource()

int32_t FMC_GetBootSource | ( | void |  | ) |

Get the current boot source.

Returns
  The current boot source.

Return values

  0 | Is boot from APROM.
  1 | Is boot from LDROM.
  2 | Is boot from Boot Loader.

Definition at line 329 of file fmc.c.

## ◆ FMC_GetChkSum()

uint32_t FMC_GetChkSum | ( | uint32_t | u32addr,
|  | uint32_t | u32count
| ) |  |

Run CRC32 checksum calculation and get result.

Parameters

  [in] | u32addr | Starting flash address. It must be a page aligned address.
  [in] | u32count | Byte count of flash to be calculated. It must be multiple of 512 bytes.

Returns
  Success or not.

Return values

  0 | Success.
  0xFFFFFFFF | Invalid parameter.

Definition at line 814 of file fmc.c.

## ◆ FMC_GetVECMAP()

__STATIC_INLINE uint32_t FMC_GetVECMAP | ( | void |  | ) |

Get current vector mapping address.

Parameters

  None |

Returns
  The current vector mapping address.

To get VECMAP value which is the page address for remapping to vector page (0x0).

Note
  VECMAP only valid when new IAP function is enabled. (CBS = 10'b or 00'b)

Definition at line 155 of file fmc.h.

## ◆ FMC_GetXOMState()

int32_t FMC_GetXOMState | ( | uint32_t | u32XomNum | ) |

Check the XOM is actived or not.

Parameters

  [in] | u32XomNum | The xom number(0~3).

Return values

  1 | XOM is actived.
  0 | XOM is not actived.
  -2 | Invalid XOM number.

To get specify XOMRn(n=0~3) active status

Definition at line 304 of file fmc.c.

## ◆ FMC_Is_OTP_Locked()

int32_t FMC_Is_OTP_Locked | ( | uint32_t | otp_num | ) |

Check the OTP is locked or not.

Parameters

  [in] | otp_num | The OTP number.

Return values

  1 | OTP is locked.
  0 | OTP is not locked.
  -1 | Failed to read OTP lock bits.
  -2 | Invalid OTP number.

Definition at line 707 of file fmc.c.

## ◆ FMC_Lock_OTP()

int32_t FMC_Lock_OTP | ( | uint32_t | otp_num | ) |

Lock the specified OTP.

Parameters

  [in] | otp_num | The OTP number.

Return values

  0 | Success
  -1 | Failed to write OTP lock bits.
  -2 | Invalid OTP number.

Definition at line 672 of file fmc.c.

## ◆ FMC_Open()

void FMC_Open | ( | void |  | ) |

Enable FMC ISP function.

Returns
  None

Definition at line 347 of file fmc.c.

## ◆ FMC_Read()

uint32_t FMC_Read | ( | uint32_t | u32Addr | ) |

Execute FMC_ISPCMD_READ command to read a word from flash.

Parameters

  [in] | u32Addr | Address of the flash location to be read. It must be a word aligned address.

Returns
  The word data read from specified flash address.

Definition at line 359 of file fmc.c.

## ◆ FMC_Read_64()

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.

Parameters

  [in] | u32addr | Address of the flash location to be read. It must be a double-word aligned address.
  [out] | u32data0 | Place holder of word 0 read from flash address u32addr.
  [out] | u32data1 | Place holder of word 0 read from flash address u32addr+4.

Returns
  0 Success
  -1 Failed

Definition at line 379 of file fmc.c.

## ◆ FMC_Read_OTP()

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.

Parameters

  [in] | otp_num | The OTP number.
  [in] | low_word | Low word of the 64-bits data.
  [in] | high_word | Low word of the 64-bits data.

Return values

  0 | Success
  -1 | Read failed.
  -2 | Invalid OTP number.

Definition at line 633 of file fmc.c.

## ◆ FMC_ReadCID()

__STATIC_INLINE uint32_t FMC_ReadCID | ( | void |  | ) |

Read company ID.

Parameters

  None |

Returns
  The company ID (32-bit)

The company ID of Nuvoton is fixed to be 0xDA

Definition at line 166 of file fmc.h.

## ◆ FMC_ReadConfig()

int32_t FMC_ReadConfig | ( | uint32_t | u32Config[],
|  | uint32_t | u32Count
| ) |  |

Execute FMC_ISPCMD_READ command to read User Configuration.

Parameters

  [out] | u32Config | A two-word array. u32Config[0] holds CONFIG0, while u32Config[1] holds CONFIG1.
  [in] | u32Count | Available word count in u32Config.

Returns
  Success or not.

Return values

  0 | Success.
  -1 | Invalid parameter.

Definition at line 749 of file fmc.c.

## ◆ FMC_ReadDataFlashBaseAddr()

uint32_t FMC_ReadDataFlashBaseAddr | ( | void |  | ) |

Get the base address of Data Flash if enabled.

Return values

  The | base address of Data Flash

Definition at line 408 of file fmc.c.

## ◆ FMC_ReadPID()

__STATIC_INLINE uint32_t FMC_ReadPID | ( | void |  | ) |

Read product ID.

Parameters

  None |

Returns
  The product ID (32-bit)

This function is used to read product ID.

Definition at line 185 of file fmc.h.

## ◆ FMC_ReadUCID()

__STATIC_INLINE uint32_t FMC_ReadUCID | ( | uint32_t | u32Index | ) |

To read UCID.

Parameters

  [in] | u32Index | Index of the UCID to read. u32Index must be 0, 1, 2, or 3.

Returns
  The UCID of specified index

This function is used to read unique chip ID (UCID).

Definition at line 224 of file fmc.h.

## ◆ FMC_ReadUID()

__STATIC_INLINE uint32_t FMC_ReadUID | ( | uint8_t | u8Index | ) |

Read Unique ID.

Parameters

  [in] | u8Index | UID index. 0 = UID[31:0], 1 = UID[63:32], 2 = UID[95:64]

Returns
  The 32-bit unique ID data of specified UID index.

To read out 96-bit Unique ID.

Definition at line 204 of file fmc.h.

## ◆ FMC_SetBootSource()

void FMC_SetBootSource | ( | int32_t | i32BootSrc | ) |

Set boot source from LDROM or APROM after next software reset.

Parameters

  [in] | i32BootSrc | 1: Boot from LDROM 0: Boot from APROM

Returns
  None

This function is used to switch APROM boot or LDROM boot. User need to call FMC_SetBootSource to select boot source first, then use CPU reset or System Reset Request to reset system.

Definition at line 423 of file fmc.c.

## ◆ FMC_SetSPKey()

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.

Parameters

  [in] | key | Key 0~2 to be setup.
  [in] | kpmax | Maximum unmatched power-on counting number.
  [in] | kemax | Maximum unmatched counting number.
  [in] | lock_CONFIG | 1: Security key lock CONFIG to write-protect. 0: Don't lock CONFIG.
  [in] | lock_SPROM | 1: Security key lock SPROM to write-protect. 0: Don't lock SPROM.

Return values

  0 | Success.
  -1 | Key is locked. Cannot overwrite the current key.
  -2 | Failed to erase flash.
  -3 | Failed to program key.
  -4 | Key lock function failed.
  -5 | CONFIG lock function failed.
  -6 | SPROM lock function failed.
  -7 | KPMAX function failed.
  -8 | KEMAX function failed.

Definition at line 905 of file fmc.c.

## ◆ FMC_SetVectorPageAddr()

__STATIC_INLINE void FMC_SetVectorPageAddr | ( | uint32_t | u32PageAddr | ) |

Set vector mapping address.

Parameters

  [in] | u32PageAddr | The page address to remap to address 0x0. The address must be page alignment.

Returns
  To set VECMAP to remap specified page address to 0x0.

This function is used to set VECMAP to map specified page to vector page (0x0).

Note
  VECMAP only valid when new IAP function is enabled. (CBS = 10'b or 00'b)

Definition at line 245 of file fmc.h.

## ◆ FMC_Write()

void FMC_Write | ( | uint32_t | u32Addr,
|  | uint32_t | u32Data
| ) |  |

Execute ISP FMC_ISPCMD_PROGRAM to program a word to flash.

Parameters

  [in] | u32Addr | Address of the flash location to be programmed. It must be a word aligned address.
  [in] | u32Data | The word data to be programmed.

Returns
  None

Definition at line 442 of file fmc.c.

## ◆ FMC_Write8Bytes()

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.

Parameters

  [in] | u32addr | Address of the flash location to be programmed. It must be a double-word aligned address.
  [in] | u32data0 | The word data to be programmed to flash address u32addr.
  [in] | u32data1 | The word data to be programmed to flash address u32addr+4.

Returns
  0 Success
  -1 Failed

Definition at line 460 of file fmc.c.

## ◆ FMC_Write_OTP()

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.

Parameters

  [in] | otp_num | The OTP number.
  [in] | low_word | Low word of the 64-bits data.
  [in] | high_word | Low word of the 64-bits data.

Return values

  0 | Success
  -1 | Program failed.
  -2 | Invalid OTP number.

Definition at line 580 of file fmc.c.

## ◆ FMC_WriteConfig()

int32_t FMC_WriteConfig | ( | uint32_t | u32Config[],
|  | uint32_t | u32Count
| ) |  |

Execute ISP commands to erase then write User Configuration.

Parameters

  [in] | u32Config | A two-word array. u32Config[0] holds CONFIG0, while u32Config[1] holds CONFIG1.
  [in] | u32Count | The number of User Configuration words to be written.

Returns
  Success or not.

Return values

  0 | Success
  -1 | Failed

Definition at line 776 of file fmc.c.

## ◆ FMC_WriteMultiple()

int32_t FMC_WriteMultiple | ( | uint32_t | u32Addr,
|  | uint32_t | pu32Buf[],
|  | uint32_t | u32Len
| ) |  |

Program Multi-Word data into specified address of flash.

Parameters

  [in] | u32Addr | Start flash address in APROM where the data chunk to be programmed into. This address must be 8-bytes aligned to flash address.
  [in] | pu32Buf | Buffer that carry the data chunk.
  [in] | u32Len | Length of the data chunk in bytes.

Return values

  >=0 | Number of data bytes were programmed.

Returns
  -1 Invalid address.

Definition at line 490 of file fmc.c.