.. raw:: html

   <!---
   # SPDX-FileCopyrightText: 2020 Efabless Corporation
   #
   # Licensed under the Apache License, Version 2.0 (the "License");
   # you may not use this file except in compliance with the License.
   # You may obtain a copy of the License at
   #
   #      http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing, software
   # distributed under the License is distributed on an "AS IS" BASIS,
   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   # See the License for the specific language governing permissions and
   # limitations under the License.
   #
   # SPDX-License-Identifier: Apache-2.0
   -->

QSPI Flash interface
====================

Related pins
------------

* :ref:`flash_io[1:0] <flash_io>` - D9 and D10, respectively,
* :ref:`flash_csb <flash_csb>` - C10,
* :ref:`flash_clk <flash_clk>` - D8.

Description
-----------

The QSPI flash controller is automatically enabled on power-up, and will 
immediately initiate a read sequence in single-bit mode 
with pin :ref:`flash_io0 <flash_io>` acting as ``SDI`` (data from flash to CPU) 
and pin :ref:`flash_io1 <flash_io>` acting as ``SDO`` (data from CPU to flash).
Protocol is according to, e.g., `Cypress S25FL256L <https://www.cypress.com/file/316171/download>`_.

The initial SPI instruction sequence is :ref:`as follows: <initial_spi_instruction_sequence>`.

.. list-table:: Initial SPI instruction sequence
    :name: initial_spi_instruction_sequence
    :widths: auto

    * - ``0xFF``
      - Mode bit reset
    * - ``0xAB``
      - Release from deep power-down
    * - ``0x03``
      - Read w/3 byte address
    * - ``0x00``
      - Program start address (``0x10000000``) (3 bytes) (upper byte is ignored)
    * - ``0x00``
      -
    * - ``0x00``
      -

The QSPI flash continues to read bytes, either sequentially on the same command, 
or issuing a new read command to read from a new address.

.. _reg_spictrl:

``reg_spictrl``
---------------
**QSPI control register**

The behaviour of the QSPI flash controller can be modified by changing values in the register below:

Base address: ``0x2d000000``

.. wavedrom::

     { "reg": [
         {"name": "FLASH_IO[3:0]", "bits": 4},
         {"name": "CLK", "bits": 1},
         {"name": "CSB", "bits": 1},
         {"bits": 2, "type": 1},
         {"name": "OE_FLASH_IO [3:0]", "bits": 4},
         {"bits": 4, "type": 1},
         {"name": "DUMMY CLK COUNT", "bits": 4},
         {"name": "ACCESS MODE", "bits": 3},
         {"bits": 8, "type": 1},
         {"name": "EN", "bits": 1}],
       "config": {"hspace": 1400}
   }

.. list-table:: ``reg_spictrl`` register description
    :name: reg_spictrl_description
    :header-rows: 1
    :widths: auto

    * - Mask bit
      - Default
      - Description
    * - 31
      - 1
      - QSPI flash interface enable
    * - 22-20
      - 0
      - Access mode *(including DDR enable, QSPI enable, CRM enable)* (see :ref:`reg_spictrl_access_mode_values`)
    * - 19-16
      - 8
      - Dummy clock cycle count / Read latency cycles
    * - 11-8
      - 0
      - Bit-bang ``OE_FLASH_IO[3:0]`` I/O output enable
    * - 5
      - 0
      - Bit-bang ``FLASH_CSB`` chip select bit
    * - 4
      - 0
      - Bit-bang ``FLASH_CLK`` serial clock line
    * - 3-0
      - 0
      - Bit-bang ``FLASH_IO[3:0]`` data bits

QSPI access modes
-----------------

.. list-table:: ``reg_spictrl`` Access mode bit values
    :name: reg_spictrl_access_mode_values
    :widths: auto

    * - 0
      - ``000``
      - Single bit per clock
    * - 1
      - ``001``
      - Single bit per clock (same as 0)

All additional modes (QSPI dual and quad modes) cannot be used, 
as the management SoC only has pins for data lines 0 and 1.

The SPI flash can be accessed by bit banging when the enable is off.
To do this from the CPU, the entire routine to access the SPI flash 
must be read into SRAM and executed from the SRAM.

.. note::

    To sum up, the DDR enable, QSPI enable and CRM enable bits cannot be used due to the limited number of data pins.
