> AFAIK FRAM does not have unlimited life. It was around 10^6 cycles > when I forst looked at it many years back and I believe it is now > around 10^12 cycles, compared to around 10^5 cycles for EEPROM and > flash. For the FM23CL64 Ramtron claims Unlimited Read/Write cycles ! -- 42Bastian Schick |
Using flash memory instead of eeprom?
Started by ●January 31, 2005
Reply by ●February 1, 20052005-02-01
Reply by ●February 1, 20052005-02-01
Hi Owen, Yes, this helps a lot. Thank you! Martin --- In , Owen Mooney <ojm@s...> wrote: > Yes I have. Its easy, but you have to use up a whole page (unless you read - modify - write) I had lots of spare flash and was typically saving a configuration just a few times so these limitations didn't matter. > > Code using IAP instructions below. > > Accessing the stored structure is just a direct memory access. > > The write cycle limitations have been well documented by those willing to offer an opinion but not answer your question !!! > > Owen Mooney > > #define IAP_LOCATION 0x7ffffff1 > > void savesetup(struct SETUP *setup){ > typedef void (*IAP)(unsigned int [],unsigned int[]); > unsigned int command[5]; > unsigned int result[2]; > IAP iap_entry; > __ARMLIB_disableIRQ(); > iap_entry=(IAP) IAP_LOCATION; > // get part ID > command[0]T; > result[0]=0; > iap_entry(command, result); > // result in result[1] > // prepare to erase > command[0]P; > command[1]; > command[2]; > iap_entry(command, result); > if (result[0] != 0) goto error; > // erase > command[0]R; > command[1]; > command[2]; > command[3]745; > iap_entry(command, result); > if (result[0] != 0) goto error; > // prepare to program > iap_entry=(IAP) IAP_LOCATION; > command[0]P; > command[1]; > command[2]; > iap_entry(command, result); > if (result[0] != 0) goto error; > // program > command[0]Q; > command[1]=0x1C000; > command[2]=(int)setup; > command[3]Q2; > command[4]745; > iap_entry(command, result); > if (result[0] != 0) goto error; > __ARMLIB_enableIRQ(); > return; > error: > __ARMLIB_enableIRQ(); > printf("bum"); > } > Hi! > > Has someone used the flash memory of the lpc21xx for eeprom purposes? > Or is it more usefull to take an additive eeprom to the design? I only > want to store some parameters. > > Thank you for feedback! > Martin > ____________ |
Reply by ●February 1, 20052005-02-01
Hi Owen / Martin, Maybe it's also worth to point out that you can emulate EEPROM closer by "spreading" the data in Flash, and leaving markers - although I'm not sure with the sector sizes involved, it would have to be large amounts to make it worth. If you have plenty spare Flash, you can get closer to EEPROM by typically using 4-8 times the amount of Flash, and emulate EEPROM like that. (ie. for 4 K EEPROM you'd need at least 16K Flash) If you need further info, send me a direct Email. Cheers, Kris > --- In , Owen Mooney <ojm@s...> wrote: > > Yes I have. Its easy, but you have to use up a whole page (unless > you read - modify - write) I had lots of spare flash and was typically > saving a configuration just a few times so these limitations didn't > matter. > > > > Code using IAP instructions below. > > > > Accessing the stored structure is just a direct memory access. > > > > The write cycle limitations have been well documented by those > willing to offer an opinion but not answer your question !!! > > > > Owen Mooney > > > > #define IAP_LOCATION 0x7ffffff1 > > > > void savesetup(struct SETUP *setup){ > > typedef void (*IAP)(unsigned int [],unsigned int[]); > > unsigned int command[5]; > > unsigned int result[2]; > > IAP iap_entry; > > __ARMLIB_disableIRQ(); > > iap_entry=(IAP) IAP_LOCATION; > > // get part ID > > command[0]T; > > result[0]=0; > > iap_entry(command, result); > > // result in result[1] > > // prepare to erase > > command[0]P; > > command[1]; > > command[2]; > > iap_entry(command, result); > > if (result[0] != 0) goto error; > > // erase > > command[0]R; > > command[1]; > > command[2]; > > command[3]745; > > iap_entry(command, result); > > if (result[0] != 0) goto error; > > // prepare to program > > iap_entry=(IAP) IAP_LOCATION; > > command[0]P; > > command[1]; > > command[2]; > > iap_entry(command, result); > > if (result[0] != 0) goto error; > > // program > > command[0]Q; > > command[1]=0x1C000; > > command[2]=(int)setup; > > command[3]Q2; > > command[4]745; > > iap_entry(command, result); > > if (result[0] != 0) goto error; > > __ARMLIB_enableIRQ(); > > return; > > error: > > __ARMLIB_enableIRQ(); > > printf("bum"); > > } > > > > > > Hi! > > > > Has someone used the flash memory of the lpc21xx for eeprom purposes? > > Or is it more usefull to take an additive eeprom to the design? I only > > want to store some parameters. > > > > Thank you for feedback! > > Martin > > > > > > > > > > > > ____________ > -- ------ > Yahoo! Groups Links > > a.. To |
Reply by ●February 1, 20052005-02-01
Hi Martin, there has been a thread a while ago with the title "Partial Flash Programming" which you can use to do a search in the archive. In particular there was a posting from Philips_apps message # 2681 which give all the information necessary and some background why the flash can only be used in chunks of 16 bytes for EEPROM simulation and so on. hth, Bob --- In , "gewitter2000" <martin@c...> wrote: > > Hi! > > Has someone used the flash memory of the lpc21xx for eeprom purposes? > Or is it more usefull to take an additive eeprom to the design? I only > want to store some parameters. > > Thank you for feedback! > Martin |
Reply by ●February 1, 20052005-02-01
--- In , "gewitter2000" <martin@c...> wrote: > > Hi! > > Has someone used the flash memory of the lpc21xx for eeprom purposes? > Or is it more usefull to take an additive eeprom to the design? I only > want to store some parameters. > > Thank you for feedback! > Martin Ho, I've implemented an eeprom emulation for a LPC2106 in my "T-Clock"- project. In the application it's just used to store two bytes for brightness (backlight LED PWM) and contrast (contrast voltage PWM AD-converter) values of the GLCD. You may find useful information in the files iap*.* and the linker-scripts in the archive available from http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/glcd_dcf77 One 8kByte memory-sector is reserved for "persistent storage" but the emulation is a "512Byte EEPROM" to minimize sector-erase. Basic approach: IAP and read-modify-write. HTH Martin Thomas |