Author Topic: Zynq Quad SPI controller: has anyone used it successfully for non-flash devices?  (Read 523 times)

0 Members and 1 Guest are viewing this topic.

Online tom66Topic starter

  • Super Contributor
  • ***
  • Posts: 7009
  • Country: gb
  • Electronics Hobbyist & FPGA/Embedded Systems EE
Hi all

I'm looking at an existing hardware platform which needs to interact with a reasonably high speed quad SPI peripheral (40MHz+).  Unfortunately, we do not have any more pins broken out from the PL, but we do have some pins on a connector which go to the Quad SPI peripheral on the PS.  This Quad SPI peripheral was never used, as we ultimately used SDIO for boot.

Looking at the Zynq TRM it would appear that we could manually drive the RxFIFO and TxFIFO to place commands on the bus, but it's not clear at all to me how this might work in the 'real world'.  I need raw access, and the ability to turn-around the lane, i.e. put the QSPI into receive mode and drive clock to receive a response from a downstream peripheral.  The lane-turn-around is initiated by external GPIOs, it doesn't work the same way as flash memory devices where a command follows a possible receive.  The Zynq manual is not very clear on how this turn-around is done in manual mode.

We also need to be able to switch on boot up from 1x SPI to 4x SPI, but we don't need to do that any more than once on start up to initialise the module.    (This appears to be possible using the "Legacy SPI" mode.)

A quick Google revealed no one else has done this, and the native Linux driver for the Zynq does not appear to support anything other than flash devices.  It is worth us writing a custom kernel driver to achieve this if we need to do so. (Lots of field hardware we can update!)

Any thoughts appreciated.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf