/** * @brief LDROM Program * * @param ulDATA: Data to be written to LDROM * * @return None * * @details LDROM Program */ void LDROM_Program(uint32_t ulDATA) { uint32_t ulCount; int32_t ret; FMC_ENABLE_LD_UPDATE(); //中:使能更新LDROM功能//en:Enable update LDROM for(ulCount=0;ulCount<(LDROM_SIZE/4);ulCount++) { ret = DrvFMC_Write(LDROM_START_ADDRESS + ulCount*4, ulDATA); //中:写地址//en:Write address if(ret < 0) { printf("Program error\n"); while(1); } ulDATA = ~ulDATA; } }
/** * @brief Erase LDROM * * @param None * * @return None * * @details Erase LDROM */ void LDROM_Erase(void) { uint32_t ulCount; uint8_t ucPageCount; int32_t ret; FMC_ENABLE_LD_UPDATE(); //中:使能更新LDROM功能//en:Enable update LDROM ucPageCount = (uint8_t)(LDROM_SIZE/PAGE_SIZE); //中: 页数 //en: page number for(ulCount=0;ulCount<(uint32_t)ucPageCount;ulCount++) { ret = DrvFMC_Erase(LDROM_START_ADDRESS + ulCount*PAGE_SIZE); //中:擦除//en:erase if(ret < 0) { printf("LDROM Erase error\n"); while(1); } } }
int main() { uint32_t i, u32Data; /* Init System, IP clock and multi-function I/O */ SYS_Init(); /* Init UART0 for printf */ UART0_Init(); /*---------------------------------------------------------------------------------------------------------*/ /* SAMPLE CODE */ /*---------------------------------------------------------------------------------------------------------*/ printf("\n\nCPU @ %dHz\n", SystemCoreClock); SYS_UnlockReg(); /* Enable FMC ISP function */ FMC_Open(); if (set_data_flash_base(DATA_FLASH_TEST_BASE) < 0) { printf("Failed to set Data Flash base address!\n"); goto lexit; } /* Read BS */ printf(" Boot Mode ............................. "); if (FMC_GetBootSource() == 0) printf("[APROM]\n"); else { printf("[LDROM]\n"); printf(" WARNING: The driver sample code must execute in AP mode!\n"); goto lexit; } u32Data = FMC_ReadCID(); printf(" Company ID ............................ [0x%08x]\n", u32Data); u32Data = FMC_ReadPID(); printf(" Product ID ............................ [0x%08x]\n", u32Data); for (i = 0; i < 3; i++) { u32Data = FMC_ReadUID(i); printf(" Unique ID %d ........................... [0x%08x]\n", i, u32Data); } for (i = 0; i < 4; i++) { u32Data = FMC_ReadUCID(i); printf(" Unique Customer ID %d .................. [0x%08x]\n", i, u32Data); } /* Read User Configuration */ printf(" User Config 0 ......................... [0x%08x]\n", FMC_Read(FMC_CONFIG_BASE)); printf(" User Config 1 ......................... [0x%08x]\n", FMC_Read(FMC_CONFIG_BASE+4)); /* Read Data Flash base address */ u32Data = FMC_ReadDataFlashBaseAddr(); printf(" Data Flash Base Address ............... [0x%08x]\n", u32Data); printf("\n\nLDROM test =>\n"); FMC_ENABLE_LD_UPDATE(); if (flash_test(FMC_LDROM_BASE, FMC_LDROM_END, TEST_PATTERN) < 0) { printf("\n\nLDROM test failed!\n"); goto lexit; } FMC_DISABLE_LD_UPDATE(); printf("\n\nAPROM test =>\n"); FMC_ENABLE_AP_UPDATE(); if (flash_test(APROM_TEST_BASE, DATA_FLASH_TEST_BASE, TEST_PATTERN) < 0) { printf("\n\nAPROM test failed!\n"); goto lexit; } FMC_DISABLE_AP_UPDATE(); printf("\n\nData Flash test =>\n"); if (flash_test(DATA_FLASH_TEST_BASE, DATA_FLASH_TEST_END, TEST_PATTERN) < 0) { printf("\n\nUHB test failed!\n"); goto lexit; } lexit: /* Disable FMC ISP function */ FMC_Close(); /* Lock protected registers */ SYS_LockReg(); printf("\nFMC Sample Code Completed.\n"); while (1); }