Question: What are the key differences between the three modes: Port I/O, GPIF, and FIFO? After I select a mode, can I switch to another?
The key difference is that in the Port I/O mode, devices can use the FX2LP CPU to process USB data directly, without the need of a Master control. The GPIF interface is the master when you use the GPIF mode, and the Slave FIFO mode requires an external master, such as an FPGA.
FX2LP was designed to be used in either one of the modes: Port I/O, Slave FIFO, or GPIF. For more information, refer to the application note Endpoint FIFO Architecture of EZ-USB FX1/FX2(TM) - AN4067.
It is possible to switch from one mode to another. Before switching from slave FIFO to GPIF or vice versa, you must make sure that there is no data transfer in progress as far as the physical interface is concerned or for that master on the USB end (host is not sending or receiving data from any of the endpoint).
You must make sure that the FIFO is reset and the device is in a state (no data activity in progress). When this is done, you may switch from one mode to the other. Switching from one mode of operation to another is not an intended feature, but something that you may do as long as the device is in a stable state.