First of all I've used the search facility and can't find anything related to this, and I've also trawled through specs and google for weeks and been going round in circles for weeks so really would appreciate anyone knowledgeable with Compact Flash transfer modes (DMA / PIO), and especially the low-level signals and the Compact Flash specification giving me a helping hand!
I am working on a PCB design which interfaces a Compact Flash card to a USB card-reader IC (Genesys Logic GL3233). The GL3233 accesses the compact flash card and then presents the card as a mass-storage device via USB.
The USB aspect works correctly, but there is something wrong with the CF-to-GL3233 interface and the data transfers do not happen correctly when operating in DMA mode. For example, when using a card which supports max PIO mode 6 everything works fine. But when using a card which supports max DMA mode 4, there are frequent file errors and corruption of the file system on the card.
I want to force the interface to operate in PIO-only mode even though both the CF card and the host "support" faster; how can I do this?
Performance is not an issue, just that the transfer work without corruption. I do not have control of the CF card or host design/firmware, only the connection of the signals and the PCB design. My first idea was to leave DMARQ and DMACK disconnected so that the host (GL3233) would 'fall back' to PIO-only mode. It does, eventually, do this - however it takes ~200seconds which is not something we can live with! There are lots of other signals and I feel sure connecting / pulling up / pulling down these in a certain way should be able to interrupt the DMA initiation in such a way that it is not used. I just dont know where to start!
Some other info; The interface is setup to run in True-IDE mode only. DMARQ and DMACK signals are connected from the CF card to the host (GL3233). There is a buffer IC (TI CF4320H) between the host and the CF card which introduces an approximate ~20ns delay. but other than that doesn't really interfere with the signals.
Any help REALLY appreciated! Thanks
Kevin
I am working on a PCB design which interfaces a Compact Flash card to a USB card-reader IC (Genesys Logic GL3233). The GL3233 accesses the compact flash card and then presents the card as a mass-storage device via USB.
The USB aspect works correctly, but there is something wrong with the CF-to-GL3233 interface and the data transfers do not happen correctly when operating in DMA mode. For example, when using a card which supports max PIO mode 6 everything works fine. But when using a card which supports max DMA mode 4, there are frequent file errors and corruption of the file system on the card.
I want to force the interface to operate in PIO-only mode even though both the CF card and the host "support" faster; how can I do this?
Performance is not an issue, just that the transfer work without corruption. I do not have control of the CF card or host design/firmware, only the connection of the signals and the PCB design. My first idea was to leave DMARQ and DMACK disconnected so that the host (GL3233) would 'fall back' to PIO-only mode. It does, eventually, do this - however it takes ~200seconds which is not something we can live with! There are lots of other signals and I feel sure connecting / pulling up / pulling down these in a certain way should be able to interrupt the DMA initiation in such a way that it is not used. I just dont know where to start!
Some other info; The interface is setup to run in True-IDE mode only. DMARQ and DMACK signals are connected from the CF card to the host (GL3233). There is a buffer IC (TI CF4320H) between the host and the CF card which introduces an approximate ~20ns delay. but other than that doesn't really interfere with the signals.
Any help REALLY appreciated! Thanks
Kevin