I'm working on an application to interface a NAND flash through GPIF. I've made several state machines (using GPIF designer) to model all needed cycles (Command phase, address phase, data-in and data-out phase). To create an access, i switch between these states.
All data i need to put on data bus go through a DMA channel (socket). I've created both, one for outgoing data, another for incoming.
Typically, for outgoing data, i just call the GetBuffer, fill the received buffer and Commit it. For incoming data, i call the GetBuffer, process the data and discard the buffer
All wok fine except:
- For incoming, the GetBuffer function returns me sometime a buffer with a count of 0 which i need to discard to avoid to stuck my state machine (waiting for a DMA_RDY_TH1 condition). I use a retry as workaround.
- for outgoing transfer, the commit operation take a lot of time ... 2.5MS to xfer 8192 bytes !!!!. Idem for the incoming data.
Anyone already have this problem of latency through GPIF ?