The octal SPI (OSPI) flash memory controller can access one or two flash devices using several different methods. The controller is located with the other flash memory controllers in the PMC. The I/O interface is routed to the PMC MIO pin bank 0. OSPI is commonly used as a boot device; see OSPI Flash Boot Mode.
The controller provides multiple ways to read and write the flash memory:
- STIG/PIO read/write (software triggered instruction generator)
- Direct read/write with address remap
- Non-DMA indirect read/write via AXI interface
- DMA indirect read using AXI master interface
STIG/PIO access enables software to read and write 64-bit flash memory data via the APB programming interface.
Direct access allows software to read/write flash memory within a 512 MB
memory block starting at
0xC000_0000. This window
is mapped to the flash device memory space. This enables software to perform normal
reads and writes within this memory-mapped window. Processor software cannot execute
code directly from the controller. Execute-in-place is not supported.
In DMA mode, data is autonomously read from the flash memory and written to system memory via the TXFIFO. The DMA master is on the PMC main AXI switch.
Software sends commands to the controller using the flash command control register. Commands include configuration, SPI commands (opcode, address, mode, dummy), and single byte reads and writes.
The controller also includes a programmable polling features to read the flash device status and report when a certain value is received. The polling feature also includes an expiration timeout.
The interface works with up to two flash devices that are connected to the PMC MIO MUX and pin bank 0. The signals are listed in OSPI Flash Interface Signals. The I/O signals are not available on the LPD MIO pins or as PL EMIO port signals.
Software accesses the OSPI register module via the 32-bit APB programming interface. All of the OSPI related registers are listed in the Register Reference.