Quad SPI Object

in Propeller 2
Anyone have a QSPI object they are willing to share? This is cooking my noodle, but maybe I should take a swing at it by reworking one of Jon's excellent objects.
I have 3 Wiznet W6300's in hand and they are supposed to have greatly improved UDP support over the W6100. I would like to increase throughput by using QSPI instead of the clunky parallel interface.
Comments
Hmm. Can't find anything in my stack. But, isn't the PSRAM in QPI mode? Maybe can use something from @rogloh or @cgracey driver?
Appears my QPI stuff is all spin1...
Yes, this looks very PSRAM-esque, except that those PSRAMs are usually set up to use 4 bit commands, too, but that's "same difference" territory.
QPI and QuadSPI are a little different. QPI has command as 4-bit wide as well.


I did some coding on this a few years back but never turned it into a full driver - https://forums.parallax.com/discussion/comment/1542085#Comment_1542085
I am wondering if I could just do a SET/GETNIB and then shift left the data as needed. Seems like the clock will have to be bit-banged. Maybe this wouldn't be as hard as I first thought.
For the PSRAM drivers, the clock is generated by a smart pin and the data tx/rx is done with streamer commands. (That could very cleanly handle that 1 bit command / 4 bit address oddity). That's super efficient (goes down to 2 P2 cycles per bus cycle), but only really works if read data is to be dumped as-is into hub ram though.
I've written a driver for the LAN9252 Ethercat controller that features quad SPI or what they call "SQI". It has 4 data lines and starts in normal SPI mode using only one bit. It then switches to 4 bit parallel mode.
My driver uses the streamer and is optimized for 200MHz system clock and 50MHz serial clock. I've checked functionality and signal timing and it works quite well. But I have no idea if it fits any other chip or application. Maybe, you can use it as a base for your own development.