| 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. |