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 05-01-2014.