The Octal Serial Peripheral Interface (OSPI) module is a kind of Serial Peripheral Interface (SPI) module which allows single, dual, quad or octal read and write access to external flash devices. The OSPI module is used to transfer data, either in a memory mapped direct mode (for example a processor wishing to execute code directly from external flash memory), or in an indirect mode where the module is set-up to silently perform some requested operation, signaling its completion via interrupts or status registers.
The OSPI tuning algorithm works as follows:
            Rx_DLL
              ▲
              │   ++++++++++++++++
          127 │     ++++++++++++++
              │   x   ++++++++++++
              │   xx   +++++++++++
              │   xxx   ++++++++++
              │   xxxx   +++++++++
              │   xxxxx   ++++++++
              │ │ xxx│xx   +++++++
              │ │ xxx│xxx   ++++++
              │ │ xxx│xxxx   +++++
              │ │ xxx│xxxxx   ++++
              │ │ xxx│xxxxxx   +++
     Search   │ │ xxx│xxxxxxx   ++
     Rx_Low ──┼─┤►xxx│xxxxxxxx   +
              │ │    │
             ─┼─┼────┼------────►  Tx_DLL
             0│ │    │           127
                │    │
                │    │
            Tx_Low   Tx_Low
            Start    End
 | Primary Search | Secondary Search | Final Point | 
|---|---|---|
| Fail | Fail | Return Fail | 
| Fail | Pass | Return Fail | 
| Pass | Fail | Return Fail | 
| Pass | Pass | RxDll = Min(Primary, Secondary) RdDelay = Min(Primary, Secondary) TxDll = Primary | 
            Rx_DLL
              ▲
          127 │   ▲+++++++++++++++
    Search    │   │ ++++++++++++++
   Rx_High────┼──►│   ++++++++++++
   on Fixed   │   │x   +++++++++++
    Tx_DLL    │   │xx   ++++++++++
              │   │xxx   +++++++++
              │   │xxxx   ++++++++
              │   ▼xxxxx   +++++++
              │   Xxxxxxx   ++++++
              │   Xxxxxxxx   +++++
              │   Xxxxxxxxx   ++++
              │   Xxxxxxxxxx   +++
              │   Xxxxxxxxxxx   ++
              │   Xxxxxxxxxxxx   +
              │
             ─┼------------───►  Tx_DLL
             0│                  127
 | Primary Search | Secondary Search | Final Point | 
|---|---|---|
| Fail | Fail | Return Fail | 
| Fail | Pass | Return Fail | 
| Pass | Fail | Return Fail | 
| Pass | Pass | If(secondary.rxDll > primary.rxDll) Pick Secondary search point Else Pick Primary search point | 
       Rx_DLL
        ▲
        │   ++++++++++++++++
    127 │   ++++++++++++++++
        │   ++++++++++++++++
        │    +++++++++++++++
        │     +++++++++│++++│
        │      ++++++++│++++│
        │   x   +++++++│++++│
        │   xx   ++++++│++++│
        │   xxx   +++++│++++│
        │   xxxx   ++++│++++│
        │   xxxxx   +++│++++│
        │   xxxxxx   ++│++++│
        │   xxxxxxx   +│++++│         Search
        │   xxxxxxxx   │++++◄───────  Rx_Low
        │              │    │
       ─┼──────────────┼────┤► Tx_DLL
       0│              │    │   127
                       │    │
               Tx_High        Tx_High
               Start          End
        Rx_DLL
127 ▲
    │   +++++++++++++++▲                Search Rx_High
    │   +++++++++++++++│◄────────────   on Fixed Tx_DLL
    │   +++++++++++++++│
    │    ++++++++++++++│
    │     +++++++++++++│
    │      ++++++++++++│
    │   x   +++++++++++▼
    │   xx   +++++++++++
    │   xxx   ++++++++++
    │   xxxx   +++++++++
    │   xxxxx   ++++++++
    │   xxxxxx   +++++++
    │   xxxxxxx   ++++++
    │   xxxxxxxx    ++++
    │
   ─┼────────────────────► Tx_DLL
   0│                       127
| Primary Search | Secondary Search | Final Point | 
|---|---|---|
| Fail | Fail | Return Fail | 
| Fail | Pass | Return Fail | 
| Pass | Fail | Return Fail | 
| Pass | Pass | If(secondary.rxDll > primary.rxDll) Pick Secondary search point Else Pick Primary search point | 
                      Rx_DLL
                 127 ▲
                     │   ++++++++++++++++
          Rx_High    │     ++++++++++++++
              ───────┼──►x   ++++++++++++
                     │   xx   +++++++++++
                     │   xxx   ++++++++++
                     │   xxxx   +++++++++
       Fix Rx_DLL    │   xxxxx   ++++++++
      1/4 between    │   xxxxxx   +++++++
      Rx_High and    │   xxxxxxx   ++++++
        Rx_Low       │   xxxxxxxx   +++++
               ──────┼─► ◄───┬──►    ++++
                     │   xxxx│xxxxx   +++
           Rx_Low    │   xxxx│xxxxxx   ++
               ──────┼──►xxxx│xxxxxxx   +
                     │       │
                    ─┼───────┼───────────►  Tx_DLL
                    0│       │          127
                             │
                        Search Tx_Low
         Rx_DLL
           127 ▲
               │   +++++++++++++++++
    Rx_High    │     +++++++++++++++
        ───────┼──►x   +++++++++++++
               │   xx   ++++++++++++
               │   xxx   +++++++++++
               │   xxxx   ++++++++++
 Fix Rx_DLL    │   xxxxx   +++++++++
1/4 between    │   xxxxxx   ++++++++
Rx_High and    │   xxxxxxx   +++++++
   Rx_Low      │   xxxxxxxx   ++++++
         ──────┼─► xxxxxxxxx   ◄─┬─►
               │   xxxxxxxxxx   +│++
     Rx_Low    │   xxxxxxxxxxx   │++
         ──────┼──►xxxxxxxxxxxx  │++
               │                 │
              ─┼─────────────────┼─►  Tx_DLL
              0│                 │127
                              Search Tx_Max
          Rx_DLL
        127 ▲
            │
   Rx_High──┼──►+++++++++++++++++
Fix Rx_DLL  │   +++++++++++++++++
   3/4 of   │   +++++++++++++++++
  Rx_High  ─┼─► ◄───┬───►++++++++
and Rx_Low  │     ++│++++++++++++
            │      +│++++++++++++
            │   x   │++++++++++++
            │   xx  │++++++++++++
            │   xxx │ +++++++++++
            │   xxxx│  ++++++++++
            │   xxxx│   +++++++++
            │   xxxx│x   ++++++++
            │   xxxx│xx   +++++++
    Rx_Low──┼──►xxxx│xxx   ++++++
            │       │
           ─┼───────┼────────────► Tx_DLL
           0│       │               127
               Search Tx_Min
         Rx_DLL
          127
            ▲
            │
   Rx_High──┼──►+++++++++++++++++
            │   +++++++++++++++++
 Fix Rx_DLL │   +++++++++++++++++
 3/4 of ────┼─► +++++++◄────┬───►
  Rx_High   │     ++++++++++│++++
   and      │      +++++++++│++++
  Rx_Low    │   x   ++++++++│++++
            │   xx   +++++++│++++
            │   xxx   ++++++│++++
            │   xxxx   +++++│++++
            │   xxxxx   ++++│++++
            │   xxxxxx   +++│++++
            │   xxxxxxx   ++│++++
    Rx_Low──┼──►xxxxxxxx   +│++++
            │               │
           ─┼───────────────┼────► Tx_DLL
           0│               │       127
                         Search Tx_Max
 Include the below file to access the APIs
Instance Open Example
Instance Close Example