GPIF freezes when Flowstate prevents data from flowing for too long | Cypress Semiconductor
GPIF freezes when Flowstate prevents data from flowing for too long
in our design I want to stream data in one consecutive stream into a synchronous FIFO until it's full using the GPIF with a flowstate of
~FifoFlag (==Empty) AND RDY0
This works nicely as long as RDY0 is not 0 for several seconds at a consecutive time. If the FIFO is full for several seconds (thus RDY0 is low for some time), GPIF hangs and does not detect when RDY0 becomes 1 again. In this case the flags say the FIFO is not full, not empty and TC transaction Counter is for example 510 when it was started with 512, the DONE bit is not set, but nothing happens any more.
I've tried several ideas for workarounds, without success:
- GPIFABORT=0xff in a timer-interrupt and re-triggering GPIF
- Using the programmable FIFO flag to stop GPIF before the FIFO is really empty
- Checking the FIFO to be empty from the Host using a vendor-command before sending 512 Bytes more.
- Using the Coding-Style suggested in the FAQ with a while loop until GPIF sets DONE bit again.