Strictly necessary cookies are on by default and cannot be turned off. Functional, Performance and Tracking/targeting/sharing cookies can be turned on below based on your preferences (this banner will remain available for you to accept cookies). You may change your cookie settings by deleting cookies from your browser. Then this banner will appear again. You can learn more details about cookies HERE.
Strictly necessary (always on)
Functional, Performance and Tracking/targeting/sharing (default off)
Can someone please share with me the maximum throughput they've been able to achieve using the CY7C67300? I would like to confirm that there is indeed a good solution waiting out there for me to find it. I call this "confirming that the pot of gold is indeed a the end of the rainbow," before I go searching (R&D).
Specifically, I'm using the CY7C67300 in a standalone mode, providing USB Host support to a PSoC5. I need to STREAM 32,000 bytes per second into a file I write to a USB Flash Drive. So far, communication timing issues limit me to 4452 Bps.
My main question is above, but here's some additional info. Perhaps you're interested in reading it and commenting.
First, prior experience writing to a FAT file system on SD card educated me about a couple things. The traditional fileio.c code reads a block before writing it, even if you're writing a whole block. This was very wasteful. In the past, I modified the fileio.c to have what today I'll call a streaming mode, where I bypassed the initial block read (per a global flag, argh!) when writing this stream. In addition, I found that when a cluster got full and a new cluster needed to be allocated, the code spent "forever" handling the file allocation table and such. I had to simply make sure I was faster than my needed average speed, and then had a buffer large enough to handle the pause that occurs during cluster allocation.
Second, current experience divides the PSoC5-SPI-CY7C67300 communication into three levels, based on support code from AN15484. High level "command" operations are self-timed by waiting on the GPIO25 interrupt. Mid level "transaction" operations are self-timed by waiting on the GPIO24 interrupt. Low level "byte" transfers must be both separated and followed as a group by arbitrary delays. This is "nasty" and not well behaved. This is why I can't get beyond 4452 Bps (B/sec). Meanwhile, my PC can write the same flash drive at about 6.7 MB/sec, so I know it's not the flash drive. Do you have any insight or advice on this?
Third, I've been doing all this from the AN15484 app note and using it's pre-compiled support code in the CY7C76300. I have not yet studied the CY7C76300 datasheet or looked for technical manuals on this chip. My custom board design was derived from the app note as well, so I didn't really need to consult the datasheet much at all. So, any advice on where to find such technical manuals? The chip product page doesn't lead to much of use for this purpose, other than the CY4640 reference design. Looking again at that right now, I see the installed Docs folder. I don't immediately find much "overview". I do read in the datasheet that SPI can use DMA and up to 2Mbps slave clock, both germane. I don't find anything else about SPI communications.