GPIF makes me mad ! | Cypress Semiconductor
GPIF makes me mad !
I'm trying to use the GPIF for a simple application : interfacing a NAND flash. I designed some state machines :
- writting a command
- writting an address
- writting data
- receiving data
I created 2 DMA channels (one for transmitting data, the other to receive) agtnd attached them (through socket 0 and 1) to my state machines.
To produce a NAND command, i switch between stat machine to send command, address and write or read data.
When i need to send data, i get a buffer (DMA channel get buffer), fill it and commit it and when i have to read data, i get a buffer and discard it after processing it.
I'm working with DMA buffer up to 8192 bytes (a nand page). All seems work except :
- during the read phases, sometime the FSM is stuck in the start state, waiting for a DMA_RDY_1 condition, like the previous discard didn't work. The getbuffer call returns me a buffer with a count to 0. My current workaround is to discard these '0 count' buffer and trying to get another one.
- the other MAJOR issue is the commit time : in transmission, getting a buffer (8192) + memcpy it + committing it takes 2,5 milli second !!!!! I have the same thing when i'm reading data. During command and address phase, comminting a 1 or 5 bytes buffer takes 60 micro second !
How to fix that ?