Words mean things.  And sometimes multiple words mean the same thing.  In our land we use NVM, EEPROM and Flash interchangeably at times.  This can be confusing, so this posting is a primer on the what, the why and the how of the storage on the adapters.

     First let’s break up the acronym soup.  NVM is Non-Volatile Memory.  It is memory that can survive power being gone for a long time.  EEPROM is electrically erasable programmable Read Only Memory.  Flash is based off the Fowler–Nordheim tunneling effect.  In "ye olde" days, an EEPROM and a Flash were very different inside and out.  Now days only the size seems to make a difference.  Both use the same HW principle.  EEPROMs can be erased and written one word at a time.  Flash are erased in sector or whole chip erase, and can be written one word at a time.

     A quick aside on erasing:  Flash have an unusual feature.  You can change a 1 bit to a 0 bit with a write command, but you can only change a 0 to 1 via erasing the word/image.  This makes a big difference since having to erase then write can add to the programming time.  EEPROM parts can write 0 to 1 via a single write command.  The software does not need to execute an erase command before writing an EEPROM word.  One reason the largest Flash parts are bigger than the largest EEPROM parts is that there is an extra transistor on each bit cell, allowing each bit to be changed in either direction.  Flash parts share this transistor and therefore must be erased in sector blocks.  It’s a little backwards to most people that "blank" is all 1s, but that's the way the electricals works.  Back to our show!

     As you probably see, an EEPROM is a NVM as is a Flash.  So why use the less precision term NVM over EEPROM?  Again history points the way.  Back before the rise of Wired for Management spec and its inclusion into WHQL (Windows* Hardware Qualification Labs) certifications, Flash was rarely included on an implementation.  But the silicon would need a storage site for things like MAC address, Wake on LAN settings and other things. This required us to put storage on the card.  We elected to use EEPROMs.  Small, simple and cheap and able to hold enough data for our needs, it was a perfect match.  Then as the need for pre-boot technologies (like PXE, which is a whole 'nother post) started to rise, WFM put the requirement that every card brought its option ROM with it.  At the time the only a Flash was big enough so that led to the dual approach, requiring both Flash and EEPROM.  Flash forward (pardon the pun) a decade and EEPROMs are almost the same size as the Flash of the earlier period.  At this point our team elected to use just one part, but segment it virtually to have a part that functions in the role of the EEPROM and part functions as the Flash.  Now we had products that you could use either a Flash or an EEPROM in this role and this is when we started calling either NVM.  And since terms seem to leak backwards, some people use it apply to EEPROM and Flash as separate items.  We have products that use a Flash in the role of the EEPROM and they call it NVM as well.  When somebody says NVM, just think storage of configuration data and option ROMs.  Be sure to check the datasheet and other documentation to make sure which storage family, EEPROM or Flash, is appropriate for your design.  Then you can call it NVM.


That was a bunch of stuff at once, so let’s end it on a review:

1)  NVM is EEPROM and/or Flash

2)  NVM/EEPROM/Flash will have device configuration information in it and is required for normal operation

3)  Thanks for using Intel(R) Ethernet products.