2009-08-27 08:54 AM
EEPROM Read problem
2011-05-17 06:04 AM
Hi,
I follow the example of the firmware libraty to read/write/erase one byte of the EEPROM, I can write a byte, but fail to readback, my code u8 c; u32 add = 0x4000; FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); FLASH_Unlock(FLASH_MEMTYPE_DATA); FLASH_ProgramByte(add, 0xa5); c = FLASH_ReadByte((u32)add); FLASH_ProgramByte(add,0x5a); c = FLASH_ReadByte((u32)add); FLASH_EraseByte(add); FLASH_ProgramByte(add,0x5a); c = FLASH_ReadByte(add); I'm sure the FLASH_ProgramByte() executes correctly (I also read back using STVP), but the FLASH_ReadByte() always returns ''0'', what's wrong? Jason2011-05-17 06:04 AM
Hi Jason,
When unlocking the data eeprom you should wait until the DUL flag in the flash status register is set (data eeprom ready), FLASH_Unlock(FLASH_MEMTYPE_DATA); while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET); if you execute your code from RAM, if the address is in data eeprom memory you should wait until the HVOFF flag in the status register is set (end of high voltage) FLASH_ProgramByte(add, 0xa5); while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET); c = FLASH_ReadByte((u32)add); and if the address is in flash program memory you should wait until the EOP flag in the status register is set (End of programming). FLASH_ProgramByte(add, 0xa5); while (FLASH_GetFlagStatus(FLASH_FLAG_EOP) == RESET); c = FLASH_ReadByte((u32)add); Normally your code works fine if you use the default clock system HSI/8 (lower execution speed) Regards mozra [ This message was edited by: mozra27 on 26-08-2009 23:11 ]2011-05-17 06:04 AM
Hi mozra,
Thanks for your reply. I'vd try to read the EEPROM in flash, but failed. But I can read the EEPROM in ram. regards, Jason2011-05-17 06:04 AM
Hi jason,
What is the clock speed used in your application? if you use a clock higher than 16MHz you should set the wait state option byte. Thanks to verify this point regards mozra