| SPI/QSPI Dual flash connection modes: | |
| ===================================== | |
| This describes how SPI/QSPI flash memories are connected to a given | |
| controller in a single chip select line. | |
| Current spi_flash framework supports, single flash memory connected | |
| to a given controller with single chip select line, but there are some | |
| hw logics(ex: xilinx zynq qspi) that describes two/dual memories are | |
| connected with a single chip select line from a controller. | |
| "dual_flash" from include/spi.h describes these types of connection mode | |
| Possible connections: | |
| -------------------- | |
| SF_SINGLE_FLASH: | |
| - single spi flash memory connected with single chip select line. | |
| +------------+ CS +---------------+ | |
| | |----------------------->| | | |
| | Controller | I0[3:0] | Flash memory | | |
| | SPI/QSPI |<======================>| (SPI/QSPI) | | |
| | | CLK | | | |
| | |----------------------->| | | |
| +------------+ +---------------+ | |
| SF_DUAL_STACKED_FLASH: | |
| - dual spi/qspi flash memories are connected with a single chipselect | |
| line and these two memories are operating stacked fasion with shared buses. | |
| - xilinx zynq qspi controller has implemented this feature [1] | |
| +------------+ CS +---------------+ | |
| | |---------------------->| | | |
| | | I0[3:0] | Upper Flash | | |
| | | +=========>| memory | | |
| | | | CLK | (SPI/QSPI) | | |
| | | | +---->| | | |
| | Controller | CS | | +---------------+ | |
| | SPI/QSPI |------------|----|---->| | | |
| | | I0[3:0] | | | Lower Flash | | |
| | |<===========+====|====>| memory | | |
| | | CLK | | (SPI/QSPI) | | |
| | |-----------------+---->| | | |
| +------------+ +---------------+ | |
| - two memory flash devices should has same hw part attributes (like size, | |
| vendor..etc) | |
| - Configurations: | |
| on LQSPI_CFG register, Enable TWO_MEM[BIT:30] on LQSPI_CFG | |
| Enable U_PAGE[BIT:28] if U_PAGE flag set - upper memory | |
| Disable U_PAGE[BIT:28] if U_PAGE flag unset - lower memory | |
| - Operation: | |
| accessing memories serially like one after another. | |
| by default, if U_PAGE is unset lower memory should accessible, | |
| once user wants to access upper memory need to set U_PAGE. | |
| SPI_FLASH_CONN_DUALPARALLEL: | |
| - dual spi/qspi flash memories are connected with a single chipselect | |
| line and these two memories are operating parallel with separate buses. | |
| - xilinx zynq qspi controller has implemented this feature [1] | |
| +-------------+ CS +---------------+ | |
| | |---------------------->| | | |
| | | I0[3:0] | Upper Flash | | |
| | |<=====================>| memory | | |
| | | CLK | (SPI/QSPI) | | |
| | |---------------------->| | | |
| | Controller | CS +---------------+ | |
| | SPI/QSPI |---------------------->| | | |
| | | I0[3:0] | Lower Flash | | |
| | |<=====================>| memory | | |
| | | CLK | (SPI/QSPI) | | |
| | |---------------------->| | | |
| +-------------+ +---------------+ | |
| - two memory flash devices should has same hw part attributes (like size, | |
| vendor..etc) | |
| - Configurations: | |
| Need to enable SEP_BUS[BIT:29],TWO_MEM[BIT:30] on LQSPI_CFG register. | |
| - Operation: | |
| Even bits, i.e. bit 0, 2, 4 ., of a data word is located in the lower memory | |
| and odd bits, i.e. bit 1, 3, 5, ., of a data word is located in the upper memory. | |
| Note: Technically there is only one CS line from the controller, but | |
| zynq qspi controller has an internal hw logic to enable additional CS | |
| when controller is configured for dual memories. | |
| [1] http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf | |
| -- | |
| Jagannadha Sutradharudu Teki <jaganna@xilinx.com> | |
| 05-01-2014. |