summaryrefslogtreecommitdiff
path: root/doc/SPI/README.dual-flash
blob: ba0aa265e0177a393fd3926cc91452acb1777686 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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.

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.