void SF_NvmodeErase(void) { SF_PrechargeAll(); reg_SFCTL = CMD_LCR; /* Set to LCR mode */ __REG(CFG_FLASH_BASE + LCR_ERASE_NVMODE) = 0; /* Issue Erase Nvmode Reg Command */ reg_SFCTL = CMD_NORMAL; /* Return to Normal mode */ __REG(CFG_FLASH_BASE + LCR_ERASE_NVMODE) = 0xC0C0C0C0; /* Confirm */ while(!SF_Ready()); }
/* Erase SyncFlash */ void SF_Erase(u32 RowAddress) { reg_SFCTL = CMD_NORMAL; __REG(RowAddress); reg_SFCTL = CMD_PREC; __REG(RowAddress); reg_SFCTL = CMD_LCR; /* Set LCR mode */ __REG(RowAddress + LCR_ERASE_CONFIRM) = 0; /* Issue Erase Setup Command */ reg_SFCTL = CMD_NORMAL; /* return to Normal mode */ __REG(RowAddress) = 0xD0D0D0D0; /* Confirm */ while(!SF_Ready()); }
int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) { int i; for(i = 0; i < cnt; i += 4) { SF_PrechargeAll(); reg_SFCTL = CMD_PROGRAM; /* Enter SyncFlash Program mode */ __REG(addr + i) = __REG((u32)src + i); while(!SF_Ready()); } SF_Normal(); return ERR_OK; }