EEPROM communication

Question: How does FX know if it the EEPROM it is talking to is  24LC00 or 24LC64?

 

Answer:

The I2C compatible controller uses the EEPROM address pins A2, A1 and A0 to determine wheter to send out one or two bytes of address. A three-step test at power-on is used to determine whether a one-byte-address (24LC00) or a two-byte-address (24LC64) EEPROM is attached.


  1.   The I2C compatible controller sends out a "read current address" command to sub-address 000. If no ACK is returned, proceed to step 2. If ACK is returned, the one-byte-address device is indicated. The controller discards the data and proceeds to step 3.
     
  2.   The I2C compatible controller sends out a "read current address" command to sub-address 001. If ACK is returned, the two-byte-address device is indicated. The controller discards the data and proceeds to step 3. If no ACK is returned, the controller assumes that a valid EEPROM is not connected, assumes the "No Serial EEPROM" mode and terminates the boot load
     
  3.   The I2C compatible controller resets the EEPROM address pointer to zero, then reads the first EEPROM byte. If it does not read either a 0xB4 or 0xB6 for the FX, the controller assumes the "No Serial EEPROM" mode. If it reads either 0xB4 or 0xB6 the controller copies the next six bytes into internal storage. If it reads 0xB6 it proceeds to load the EPROM contents into internal RAM.
     

The same test is performed for the EZ-USB AN21xx family with 0xB0 and 0xB2 as valid first bytes. For the FX2, valid first bytes in the EEPROM are 0xC0 and 0xC2.For more information refer to Section 3.4 of the Technical Reference Manual