I wrote a tool for programming the large EEPROM connected to FX2LP via WinUSB. It works fine but I cannot correctly detect the EEPROM size using the 0xA5 vendor request.
I stop the CPU by writing 0x01 to 0xE600 via the 0xA0 request. After this I download the complete vend_ax in one block to the ram starting at 0x0000. After sending 0x00 to the 0xE600 the vend_ax is running and responding on the vendor requests. I can program and read the connected EEPROM. But the I2C Type request 0xA5 always reflect the EEPROM state at power-up. For firmware Update, we disable the 24C64 EEPROM by pulling down the A0 line to ground. Even if I remove the jumper before or after downloading and starting the vend_ax firmware, the A5 request always gives me 0x00. If the jumper is removed at power-up, the A5 gives me the correct 0x01. If I remove the EEPROM detection all works great, buts we want to go the safe way...
What are we doing wrong? I used the FXEeprom and fxload-libusb code together with the vend_ax application note for understanding the 2nd stage bootloader function. I use the vend_ax.hex from the fxload-libusb project. With the extracted vend_ax.hex from the source of FXEeprom Example the behavior is the same (but the programming itself is much slower...).
The EEPROM size detection is not dynamic as you think. During boot-up FX2LP checks for EEPROM and sets the bit for EEPROM type. Rather than sending the bit, Modify 0xA5 vendor command in vend_ax to check the EEPROM address and send data accordingly. This should get things working.